diff options
-rw-r--r-- | CHANGES.rst | 3 | ||||
-rw-r--r-- | src/zope/security/checker.py | 14 | ||||
-rw-r--r-- | src/zope/security/proxy.py | 13 |
3 files changed, 21 insertions, 9 deletions
diff --git a/CHANGES.rst b/CHANGES.rst index 58d4122..ab5790b 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -32,6 +32,9 @@ Changes - Simplify the internal ``_compat.py`` module now that we only run on newer Python versions. See `PR 32 <https://github.com/zopefoundation/zope.security/pull/32>`_. +- Respect ``PURE_PYTHON`` at runtime. See `issue 33 + <https://github.com/zopefoundation/zope.security/issues/33>`_. + 4.1.1 (2017-05-17) ------------------ diff --git a/src/zope/security/checker.py b/src/zope/security/checker.py index d617ef4..238f748 100644 --- a/src/zope/security/checker.py +++ b/src/zope/security/checker.py @@ -49,6 +49,7 @@ from zope.security.interfaces import Unauthorized from zope.security._definitions import thread_local from zope.security._compat import CLASS_TYPES from zope.security._compat import PYTHON2 +from zope.security._compat import PURE_PYTHON from zope.security.proxy import Proxy from zope.security.proxy import getChecker @@ -438,11 +439,14 @@ _defaultChecker = Checker({}) _available_by_default = [] # Get optimized versions -try: - import zope.security._zope_security_checker -except (ImportError, AttributeError): #pragma NO COVER PyPy / PURE_PYTHON - pass -else: +_c_available = not PURE_PYTHON +if _c_available: + try: + import zope.security._zope_security_checker + except (ImportError, AttributeError): #pragma NO COVER PyPy / PURE_PYTHON + _c_available = False + +if _c_available: from zope.security._zope_security_checker import _checkers, selectChecker from zope.security._zope_security_checker import NoProxy, Checker from zope.security._zope_security_checker import _defaultChecker diff --git a/src/zope/security/proxy.py b/src/zope/security/proxy.py index 60dcae8..9e7333d 100644 --- a/src/zope/security/proxy.py +++ b/src/zope/security/proxy.py @@ -17,7 +17,7 @@ import functools import sys from zope.proxy import PyProxyBase -from zope.security._compat import PYPY +from zope.security._compat import PYPY, PURE_PYTHON from zope.security.interfaces import ForbiddenAttribute def _check_name(meth, wrap_result=True): @@ -346,9 +346,14 @@ def getObjectPy(proxy): return proxy return super(PyProxyBase, proxy).__getattribute__('_wrapped') -try: - from zope.security._proxy import _Proxy -except (ImportError, AttributeError): #pragma NO COVER PyPy / PURE_PYTHON +_c_available = not PURE_PYTHON +if _c_available: + try: + from zope.security._proxy import _Proxy + except (ImportError, AttributeError): #pragma NO COVER PyPy / PURE_PYTHON + _c_available = False + +if not _c_available: getChecker = getCheckerPy getObject = getObjectPy Proxy = ProxyPy |