diff --git a/CHANGES.rst b/CHANGES.rst index e2a4dbd..40e6414 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -1,6 +1,13 @@ Changelog ========= +1.2.0 (unreleased) +------------------ + +- Add ``api.env.plone_version()`` and ``api.env.zope_version()`` refs. #126. + [hvelarde] + + 1.1.0 (2013-10-12) ------------------ diff --git a/docs/env.rst b/docs/env.rst index baf7449..1955d39 100644 --- a/docs/env.rst +++ b/docs/env.rst @@ -104,6 +104,38 @@ To know if your plone instance is running in a test runner, use pass # do something +.. _env_plone_version_example: + +Plone version +------------- + +To know what version of Plone you are using, use :meth:`api.env.plone_version`. + +.. code-block:: python + + from plone import api + + plone_version = api.env.plone_version() + if plone_version < '4.1': + pass # do something + + +.. _env_zope_version_example: + +Zope version +------------ + +To know what version of Zope 2 you are using, use :meth:`api.env.zope_version`. + +.. code-block:: python + + from plone import api + + zope_version = api.env.zope_version() + if zope_version >= '2.13': + pass # do something + + Further reading --------------- diff --git a/src/plone/api/env.py b/src/plone/api/env.py index 5f73f0c..fb18122 100644 --- a/src/plone/api/env.py +++ b/src/plone/api/env.py @@ -1,14 +1,15 @@ # -*- coding: utf-8 -*- from AccessControl.SecurityManagement import getSecurityManager -from AccessControl.SecurityManagement import setSecurityManager from AccessControl.SecurityManagement import newSecurityManager +from AccessControl.SecurityManagement import setSecurityManager from contextlib import contextmanager +from pkg_resources import get_distribution from plone.api import portal from plone.api.exc import InvalidParameterError from plone.api.exc import UserNotFoundError -from plone.api.validation import required_parameters from plone.api.validation import at_least_one_of from plone.api.validation import mutually_exclusive_parameters +from plone.api.validation import required_parameters from zope.globalrequest import getRequest import Globals @@ -185,3 +186,21 @@ def test_mode(): break return env.IS_TEST + + +def plone_version(): + """Return Plone version number. + + :returns: string denoting what release of Plone this distribution contains + :Example: :ref:`env_plone_version_example` + """ + return get_distribution('Plone').version + + +def zope_version(): + """Return Zope 2 version number. + + :returns: string denoting what release of Zope2 this distribution contains + :Example: :ref:`env_zope_version_example` + """ + return get_distribution('Zope2').version diff --git a/src/plone/api/tests/test_env.py b/src/plone/api/tests/test_env.py index 7274d86..13465f8 100644 --- a/src/plone/api/tests/test_env.py +++ b/src/plone/api/tests/test_env.py @@ -392,3 +392,23 @@ class TestPloneApiEnv(unittest.TestCase): """Tests that test_mode() returns True as we are in a test runner.""" from plone.api.env import test_mode self.assertEqual(test_mode(), True) + + def test_plone_version(self): + """Tests that plone_version() returns Plone version.""" + from plone.api.env import plone_version + self.assertTrue(isinstance(plone_version(), str)) + # version should be something like 'X.Y' or 'X.Y.Z' + versions = plone_version().split('.') + self.assertTrue(len(versions) >= 2) + for v in versions: + self.assertTrue(v.isdigit()) + + def test_zope_version(self): + """Tests that zope_version() returns Zope version.""" + from plone.api.env import zope_version + self.assertTrue(isinstance(zope_version(), str)) + # version should be something like 'X.Y' or 'X.Y.Z' + versions = zope_version().split('.') + self.assertTrue(len(versions) >= 2) + for v in versions: + self.assertTrue(v.isdigit())