diff options
34 files changed, 272 insertions, 136 deletions
@@ -19,3 +19,14 @@ ignore = docs/_build/html/_sources/* docs/_build/doctest/* docs/_build/html/_sources/api/* + +[isort] +force_single_line = True +combine_as_imports = True +sections = FUTURE,STDLIB,THIRDPARTY,ZOPE,FIRSTPARTY,LOCALFOLDER +known_third_party = six, docutils, pkg_resources +known_zope = +known_first_party = +default_section = ZOPE +line_length = 79 +lines_after_imports = 2 @@ -21,17 +21,14 @@ import os import platform import sys - - from distutils.errors import CCompilerError from distutils.errors import DistutilsExecError from distutils.errors import DistutilsPlatformError - from setuptools import Extension -from setuptools.command.build_ext import build_ext from setuptools import find_packages from setuptools import setup +from setuptools.command.build_ext import build_ext class optional_build_ext(build_ext): diff --git a/src/zope/security/__init__.py b/src/zope/security/__init__.py index d6f39f4..ca44b1f 100644 --- a/src/zope/security/__init__.py +++ b/src/zope/security/__init__.py @@ -14,10 +14,10 @@ """Base security system """ -from zope.security.management import checkPermission -from zope.security.checker import canWrite, canAccess - # We need the injection of DecoratedSecurityCheckerDescriptor into # zope.location's LocationProxy as soon someone uses security proxies by # importing zope.security.proxy: import zope.security.decorator +from zope.security.checker import canAccess +from zope.security.checker import canWrite +from zope.security.management import checkPermission diff --git a/src/zope/security/_compat.py b/src/zope/security/_compat.py index 6f7dc0a..99f0d75 100644 --- a/src/zope/security/_compat.py +++ b/src/zope/security/_compat.py @@ -13,11 +13,12 @@ ############################################################################## """ Python 2 / 3 compatibility """ -import platform import os +import platform import sys import types + py_impl = getattr(platform, 'python_implementation', lambda: None) PYPY = py_impl() == 'PyPy' PURE_PYTHON = os.environ.get('PURE_PYTHON', PYPY) diff --git a/src/zope/security/_definitions.py b/src/zope/security/_definitions.py index 070a345..f1d0176 100644 --- a/src/zope/security/_definitions.py +++ b/src/zope/security/_definitions.py @@ -14,10 +14,12 @@ """Common definitions to avoid circular imports """ import threading + import zope.interface from zope.security import interfaces + thread_local = threading.local() diff --git a/src/zope/security/adapter.py b/src/zope/security/adapter.py index c8c44b6..0f5bc84 100644 --- a/src/zope/security/adapter.py +++ b/src/zope/security/adapter.py @@ -14,9 +14,11 @@ """Support for taking security into account in adaptation """ +from zope.location import ILocation +from zope.location import LocationProxy + from zope.security.checker import ProxyFactory from zope.security.proxy import removeSecurityProxy -from zope.location import ILocation, LocationProxy def assertLocation(adapter, parent): diff --git a/src/zope/security/checker.py b/src/zope/security/checker.py index fbc0b2a..ae8ab5a 100644 --- a/src/zope/security/checker.py +++ b/src/zope/security/checker.py @@ -58,36 +58,37 @@ API .. autofunction:: selectChecker """ import abc +import datetime +import decimal import os import sys import types -import datetime -import decimal import weakref -from zope.i18nmessageid import Message +import zope.interface.declarations import zope.interface.interface import zope.interface.interfaces -import zope.interface.declarations +from zope.i18nmessageid import Message from zope.interface import Interface from zope.interface import directlyProvides from zope.interface import implementer from zope.interface.interfaces import IDeclaration from zope.interface.interfaces import IInterface +from zope.security._compat import CLASS_TYPES +from zope.security._compat import PURE_PYTHON +from zope.security._compat import PYTHON2 +from zope.security._compat import implementer_if_needed +from zope.security._definitions import thread_local +from zope.security.interfaces import ForbiddenAttribute from zope.security.interfaces import IChecker from zope.security.interfaces import INameBasedChecker from zope.security.interfaces import ISecurityProxyFactory -from zope.security.interfaces import ForbiddenAttribute 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._compat import implementer_if_needed from zope.security.proxy import Proxy from zope.security.proxy import getChecker + try: from zope.exceptions import DuplicationError except ImportError: # pragma: no cover @@ -136,6 +137,8 @@ directlyProvides(ProxyFactory, ISecurityProxyFactory) # This import represents part of the API for the proxy module from . import proxy # noqa: E402 module level import not at top + + proxy.ProxyFactory = ProxyFactory @@ -514,10 +517,12 @@ if _c_available: # pragma: no cover _c_available = False if _c_available: # pragma: no cover - 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 + from zope.security._zope_security_checker import Checker + from zope.security._zope_security_checker import NoProxy from zope.security._zope_security_checker import _available_by_default + from zope.security._zope_security_checker import _checkers + from zope.security._zope_security_checker import _defaultChecker + from zope.security._zope_security_checker import selectChecker zope.interface.classImplements(Checker, INameBasedChecker) @@ -940,6 +945,7 @@ def _fixup_odict(): # uses view classes) and CPython 3.5+ (implemented in C). These should # all be iterable. from collections import OrderedDict + # The `_fixup_dictlike` is detected as undefined because it is deleted # later on but this function is called beforehand: _fixup_dictlike(OrderedDict) # noqa: F821 undefined name '_fixup_dictlike' @@ -992,8 +998,8 @@ def _fixup_zope_interface(): # checking process at all, much like BTrees, so NoProxy is necessary for # compatibility. On Python 3, prior to this, iteration was simply not # allowed. - from zope.interface import providedBy from zope.interface import alsoProvides + from zope.interface import providedBy class I1(Interface): pass diff --git a/src/zope/security/decorator.py b/src/zope/security/decorator.py index 0f9f2f4..18751d8 100644 --- a/src/zope/security/decorator.py +++ b/src/zope/security/decorator.py @@ -17,8 +17,8 @@ Decorators are proxies that are mostly transparent but that may provide additional features. """ -from zope.proxy import getProxiedObject from zope.proxy import ProxyBase +from zope.proxy import getProxiedObject from zope.proxy.decorator import SpecificationDecoratorBase from zope.security.checker import CombinedChecker @@ -75,5 +75,7 @@ class DecoratorBase(SpecificationDecoratorBase, SecurityCheckerDecoratorBase): # This is the only sane place we found for doing it: it kicks in as soon # as someone starts using security proxies. import zope.location.location # noqa: E402 module level import not at top + + zope.location.location.LocationProxy.__Security_checker__ = ( DecoratedSecurityCheckerDescriptor()) diff --git a/src/zope/security/examples/sandbox.py b/src/zope/security/examples/sandbox.py index eb6499f..70dd5a8 100644 --- a/src/zope/security/examples/sandbox.py +++ b/src/zope/security/examples/sandbox.py @@ -13,10 +13,11 @@ ############################################################################## """A small sandbox application. """ -import time import random +import time -from zope.interface import Interface, implementer +from zope.interface import Interface +from zope.interface import implementer class IAgent(Interface): diff --git a/src/zope/security/examples/sandbox_security.py b/src/zope/security/examples/sandbox_security.py index 5115ca7..d102c5f 100644 --- a/src/zope/security/examples/sandbox_security.py +++ b/src/zope/security/examples/sandbox_security.py @@ -27,10 +27,13 @@ secure mode. There are several steps that are taken to set up the security 5. proxy wrap as necessary """ import sandbox -from zope.security.interfaces import IParticipation -from zope.security import checker, management, simplepolicies from zope.interface import implementer +from zope.security import checker +from zope.security import management +from zope.security import simplepolicies +from zope.security.interfaces import IParticipation + # Define all permissions that will be available NotAllowed = 'Not Allowed' diff --git a/src/zope/security/i18n.py b/src/zope/security/i18n.py index fc47f88..0db0317 100644 --- a/src/zope/security/i18n.py +++ b/src/zope/security/i18n.py @@ -17,4 +17,6 @@ __docformat__ = 'restructuredtext' # import this as _ to create i18n messages in the zope domain from zope.i18nmessageid import MessageFactory + + ZopeMessageFactory = MessageFactory('zope') diff --git a/src/zope/security/interfaces.py b/src/zope/security/interfaces.py index 890e6fc..c1cb155 100644 --- a/src/zope/security/interfaces.py +++ b/src/zope/security/interfaces.py @@ -51,11 +51,18 @@ means the name of the permission, or the special object :class:`zope.security.checker.CheckerPublic`. """ -from zope.interface import Interface, Attribute, implementer -from zope.interface.common.interfaces import IException, IAttributeError -from zope.schema import Text, TextLine, NativeStringLine +from zope.interface import Attribute +from zope.interface import Interface +from zope.interface import implementer +from zope.interface.common.interfaces import IAttributeError +from zope.interface.common.interfaces import IException +from zope.schema import NativeStringLine +from zope.schema import Text +from zope.schema import TextLine + from zope.security.i18n import ZopeMessageFactory as _ + #: The name (id) of the registered :class:`IPermission` utility that signifies #: that the protected attribute is public. #: diff --git a/src/zope/security/management.py b/src/zope/security/management.py index 2daf0ce..bf79f28 100644 --- a/src/zope/security/management.py +++ b/src/zope/security/management.py @@ -20,13 +20,13 @@ Note that this module itself provides those interfaces. from zope.interface import moduleProvides +from zope.security._definitions import system_user +from zope.security._definitions import thread_local from zope.security.checker import CheckerPublic from zope.security.interfaces import IInteractionManagement from zope.security.interfaces import ISecurityManagement from zope.security.interfaces import NoInteraction from zope.security.simplepolicies import ParanoidSecurityPolicy -from zope.security._definitions import thread_local -from zope.security._definitions import system_user __all__ = [ diff --git a/src/zope/security/metaconfigure.py b/src/zope/security/metaconfigure.py index ee437da..b09c725 100644 --- a/src/zope/security/metaconfigure.py +++ b/src/zope/security/metaconfigure.py @@ -17,22 +17,22 @@ __docformat__ = 'restructuredtext' from types import ModuleType -from zope.component.interfaces import IFactory from zope.component.factory import Factory from zope.component.interface import provideInterface +from zope.component.interfaces import IFactory from zope.component.zcml import utility +from zope.configuration.exceptions import ConfigurationError from zope.interface import classImplements from zope.schema.interfaces import IField -from zope.configuration.exceptions import ConfigurationError from zope.security.checker import Checker from zope.security.checker import CheckerPublic from zope.security.checker import defineChecker from zope.security.checker import moduleChecker +from zope.security.interfaces import PUBLIC_PERMISSION_NAME as PublicPermission from zope.security.protectclass import protectLikeUnto from zope.security.protectclass import protectName from zope.security.protectclass import protectSetAttribute -from zope.security.interfaces import PUBLIC_PERMISSION_NAME as PublicPermission def dottedName(klass): diff --git a/src/zope/security/metadirectives.py b/src/zope/security/metadirectives.py index 3e85cfd..c7e82e2 100644 --- a/src/zope/security/metadirectives.py +++ b/src/zope/security/metadirectives.py @@ -16,10 +16,12 @@ __docformat__ = 'restructuredtext' import zope.configuration.fields -from zope.configuration.fields import GlobalObject, GlobalInterface -from zope.configuration.fields import Tokens, PythonIdentifier import zope.interface import zope.schema +from zope.configuration.fields import GlobalInterface +from zope.configuration.fields import GlobalObject +from zope.configuration.fields import PythonIdentifier +from zope.configuration.fields import Tokens from zope.interface import Interface import zope.security.zcml diff --git a/src/zope/security/permission.py b/src/zope/security/permission.py index da0dd40..8fc2837 100644 --- a/src/zope/security/permission.py +++ b/src/zope/security/permission.py @@ -26,8 +26,8 @@ from zope.schema.vocabulary import SimpleTerm from zope.schema.vocabulary import SimpleVocabulary from zope.security.checker import CheckerPublic -from zope.security.interfaces import IPermission from zope.security.interfaces import PUBLIC_PERMISSION_NAME as zope_Public +from zope.security.interfaces import IPermission @implementer(IPermission) diff --git a/src/zope/security/proxy.py b/src/zope/security/proxy.py index 1f4281c..52a7189 100644 --- a/src/zope/security/proxy.py +++ b/src/zope/security/proxy.py @@ -20,8 +20,9 @@ import functools import sys from zope.proxy import PyProxyBase -from zope.security._compat import PURE_PYTHON + from zope.security._compat import _BUILTINS +from zope.security._compat import PURE_PYTHON def _check_name(meth, wrap_result=True): diff --git a/src/zope/security/simplepolicies.py b/src/zope/security/simplepolicies.py index d1617ce..feaa104 100644 --- a/src/zope/security/simplepolicies.py +++ b/src/zope/security/simplepolicies.py @@ -21,10 +21,10 @@ that the classes themselves are implementations of """ import zope.interface +from zope.security._definitions import system_user from zope.security.checker import CheckerPublic from zope.security.interfaces import IInteraction from zope.security.interfaces import ISecurityPolicy -from zope.security._definitions import system_user @zope.interface.implementer(IInteraction) diff --git a/src/zope/security/testing.py b/src/zope/security/testing.py index 792813f..be551ce 100644 --- a/src/zope/security/testing.py +++ b/src/zope/security/testing.py @@ -19,15 +19,16 @@ This module provides some helper/stub objects for setting up interactions. import contextlib import re -from zope import interface, component +from zope.testing import renormalizing -from zope.security import interfaces -from zope.security.permission import Permission import zope.security.management +from zope import component +from zope import interface +from zope.security import interfaces from zope.security._compat import PYTHON2 as PY2 from zope.security.interfaces import PUBLIC_PERMISSION_NAME +from zope.security.permission import Permission -from zope.testing import renormalizing _str_prefix = 'b' if PY2 else 'u' diff --git a/src/zope/security/tests/test_adapter.py b/src/zope/security/tests/test_adapter.py index 2d68b0e..20a3975 100644 --- a/src/zope/security/tests/test_adapter.py +++ b/src/zope/security/tests/test_adapter.py @@ -19,6 +19,7 @@ from zope.location import ILocation from zope.location import LocationProxy from zope.proxy import getProxiedObject + # pylint:disable=attribute-defined-outside-init,protected-access @@ -217,8 +218,8 @@ class LocatingTrustedAdapterFactoryTests(unittest.TestCase): self.assertEqual(after, before) # no added attrs def test__call__w_ILocation_w_spacesuit(self): - from zope.security.proxy import getObject from zope.security.proxy import ProxyFactory + from zope.security.proxy import getObject from zope.security.proxy import removeSecurityProxy factory = self._makeFactory() factory.__parent__ = factory.__name__ = None @@ -244,8 +245,8 @@ class LocatingTrustedAdapterFactoryTests(unittest.TestCase): self.assertEqual(after, before) # no added attrs def test__call__w_ILocation_w_spacesuit_w_existing_parent(self): - from zope.security.proxy import getObject from zope.security.proxy import ProxyFactory + from zope.security.proxy import getObject from zope.security.proxy import removeSecurityProxy factory = self._makeFactory() factory.__name__ = None diff --git a/src/zope/security/tests/test_checker.py b/src/zope/security/tests/test_checker.py index a8b3990..a102ad6 100644 --- a/src/zope/security/tests/test_checker.py +++ b/src/zope/security/tests/test_checker.py @@ -16,9 +16,9 @@ import unittest from zope.security import checker as sec_checker -from zope.security.tests import QuietWatchingChecker -from zope.security._compat import PYTHON3 as PY3 from zope.security._compat import PYTHON2 as PY2 +from zope.security._compat import PYTHON3 as PY3 +from zope.security.tests import QuietWatchingChecker # pylint:disable=protected-access,inherit-non-class,no-method-argument,old-style-class @@ -31,7 +31,8 @@ class Test_ProxyFactory(unittest.TestCase): return ProxyFactory(obj, checker) def test_w_already_proxied_no_checker(self): - from zope.security.proxy import Proxy, getChecker + from zope.security.proxy import Proxy + from zope.security.proxy import getChecker obj = object() def _check(*x): @@ -42,7 +43,8 @@ class Test_ProxyFactory(unittest.TestCase): self.assertIs(getChecker(returned), _check) def test_w_already_proxied_same_checker(self): - from zope.security.proxy import Proxy, getChecker + from zope.security.proxy import Proxy + from zope.security.proxy import getChecker obj = object() def _check(*x): @@ -80,7 +82,8 @@ class Test_ProxyFactory(unittest.TestCase): self.assertIs(returned, obj) def test_no_checker_w_dunder(self): - from zope.security.proxy import getChecker, getObject + from zope.security.proxy import getChecker + from zope.security.proxy import getObject _check = object() # don't use a func, due to bound method class _WithChecker(object): @@ -95,7 +98,8 @@ class Test_ProxyFactory(unittest.TestCase): from zope.security.checker import Checker from zope.security.checker import _checkers from zope.security.checker import _clear - from zope.security.proxy import getChecker, getObject + from zope.security.proxy import getChecker + from zope.security.proxy import getObject class _Obj(object): pass @@ -221,11 +225,13 @@ class CheckerTestsBase(QuietWatchingChecker): def test_class_conforms_to_IChecker(self): from zope.interface.verify import verifyClass + from zope.security.interfaces import IChecker verifyClass(IChecker, self._getTargetClass()) def test_instance_conforms_to_IChecker(self): from zope.interface.verify import verifyObject + from zope.security.interfaces import IChecker verifyObject(IChecker, self._makeOne()) @@ -290,8 +296,8 @@ class CheckerTestsBase(QuietWatchingChecker): del thread_local.interaction def test_check_setattr_w_interaction_denies(self): - from zope.security.interfaces import Unauthorized from zope.security._definitions import thread_local + from zope.security.interfaces import Unauthorized class _Interaction(object): def checkPermission(self, obj, perm): @@ -338,8 +344,8 @@ class CheckerTestsBase(QuietWatchingChecker): del thread_local.interaction def test_check_non_public_w_interaction_denies(self): - from zope.security.interfaces import Unauthorized from zope.security._definitions import thread_local + from zope.security.interfaces import Unauthorized class _Interaction(object): def checkPermission(self, obj, perm): @@ -354,7 +360,8 @@ class CheckerTestsBase(QuietWatchingChecker): del thread_local.interaction def test_proxy_already_proxied(self): - from zope.security.proxy import Proxy, getChecker + from zope.security.proxy import Proxy + from zope.security.proxy import getChecker obj = object() def _check(*x): @@ -372,7 +379,8 @@ class CheckerTestsBase(QuietWatchingChecker): self.assertIs(returned, obj) def test_proxy_no_checker_w_dunder(self): - from zope.security.proxy import getChecker, getObject + from zope.security.proxy import getChecker + from zope.security.proxy import getObject _check = object() # don't use a func, due to bound method class _WithChecker(object): @@ -388,7 +396,8 @@ class CheckerTestsBase(QuietWatchingChecker): from zope.security.checker import Checker from zope.security.checker import _checkers from zope.security.checker import _clear - from zope.security.proxy import getChecker, getObject + from zope.security.proxy import getChecker + from zope.security.proxy import getObject class _Obj(object): pass @@ -408,11 +417,12 @@ class CheckerTestsBase(QuietWatchingChecker): _clear() def test_Decimal_operations(self): - from zope.security.proxy import Proxy - from zope.security.checker import _default_checkers from decimal import Decimal from decimal import DecimalTuple + from zope.security.checker import _default_checkers + from zope.security.proxy import Proxy + checker = _default_checkers[Decimal] value = Decimal('1.1') @@ -450,8 +460,8 @@ class CheckerTestsBase(QuietWatchingChecker): self.assertEqual(proxy.quantize(Decimal('1.10')), Decimal('1.10')) def _check_iteration_of_dict_like(self, dict_like): - from zope.security.proxy import Proxy from zope.security.checker import _default_checkers + from zope.security.proxy import Proxy checker = _default_checkers[dict] @@ -492,12 +502,12 @@ class CheckerTestsBase(QuietWatchingChecker): def test_iteration_of_interface_implementedBy(self): # Iteration of implementedBy is allowed by default # See https://github.com/zopefoundation/zope.security/issues/27 - from zope.security.proxy import Proxy - from zope.security.checker import Checker - - from zope.interface import providedBy - from zope.interface import implementer from zope.interface import Interface + from zope.interface import implementer + from zope.interface import providedBy + + from zope.security.checker import Checker + from zope.security.proxy import Proxy class I1(Interface): pass @@ -521,13 +531,13 @@ class CheckerTestsBase(QuietWatchingChecker): def test_iteration_of_interface_providesBy(self): # Iteration of zope.interface.Provides is allowed by default # See https://github.com/zopefoundation/zope.security/issues/27 - from zope.security.proxy import Proxy - from zope.security.checker import Checker - - from zope.interface import providedBy + from zope.interface import Interface from zope.interface import alsoProvides from zope.interface import implementer - from zope.interface import Interface + from zope.interface import providedBy + + from zope.security.checker import Checker + from zope.security.proxy import Proxy class I1(Interface): pass @@ -558,8 +568,8 @@ class CheckerTestsBase(QuietWatchingChecker): # __length_hint__ method to be defined on iterators. It should # be allowed by default. See # https://github.com/zopefoundation/zope.security/issues/27 - from zope.security.proxy import Proxy from zope.security.checker import _iteratorChecker + from zope.security.proxy import Proxy class Iter(object): __Security_checker__ = _iteratorChecker @@ -607,10 +617,10 @@ class CheckerTestsBase(QuietWatchingChecker): def test_iteration_of_itertools_groupby(self): # itertools.groupby is a custom iterator type. # The groups it returns are also custom. - from zope.security.checker import ProxyFactory - from itertools import groupby + from zope.security.checker import ProxyFactory + group = groupby([0]) list_group = list(group) self.assertEqual(1, len(list_group)) @@ -732,6 +742,7 @@ class Test_NamesChecker(unittest.TestCase): def test_empty_names_no_kw(self): from zope.interface.verify import verifyObject + from zope.security.interfaces import IChecker checker = self._callFUT() verifyObject(IChecker, checker) @@ -780,6 +791,7 @@ class Test_InterfaceChecker(unittest.TestCase): def test_simple_iface_wo_kw(self): from zope.interface import Attribute from zope.interface import Interface + from zope.security.checker import CheckerPublic class IFoo(Interface): @@ -801,6 +813,7 @@ class Test_InterfaceChecker(unittest.TestCase): def test_simple_iface_w_kw(self): from zope.interface import Attribute from zope.interface import Interface + from zope.security.checker import CheckerPublic class IFoo(Interface): @@ -814,6 +827,7 @@ class Test_InterfaceChecker(unittest.TestCase): def test_derived_iface(self): from zope.interface import Attribute from zope.interface import Interface + from zope.security.checker import CheckerPublic class IFoo(Interface): @@ -829,6 +843,7 @@ class Test_InterfaceChecker(unittest.TestCase): def test_w_clash(self): from zope.interface import Attribute from zope.interface import Interface + from zope.security.checker import DuplicationError class IFoo(Interface): @@ -847,6 +862,7 @@ class Test_MultiChecker(unittest.TestCase): def test_empty(self): from zope.interface.verify import verifyObject + from zope.security.interfaces import IChecker checker = self._callFUT([]) verifyObject(IChecker, checker) @@ -874,6 +890,7 @@ class Test_MultiChecker(unittest.TestCase): def test_w_spec_as_names_and_iface(self): from zope.interface import Attribute from zope.interface import Interface + from zope.security.checker import CheckerPublic class IFoo(Interface): @@ -889,6 +906,7 @@ class Test_MultiChecker(unittest.TestCase): def test_w_spec_as_names_and_iface_clash(self): from zope.interface import Attribute from zope.interface import Interface + from zope.security.checker import CheckerPublic from zope.security.checker import DuplicationError @@ -938,6 +956,7 @@ class _SelectCheckerBase(object): def test_w_basic_types_NoProxy(self): import datetime + from zope.i18nmessageid import Message msg = Message('msg') for obj in [object(), @@ -1018,9 +1037,10 @@ class _SelectCheckerBase(object): self.assertIs(self._callFUT(Foo()), checker) def test_itertools_checkers(self): - from zope.security.checker import _iteratorChecker import itertools + from zope.security.checker import _iteratorChecker + def pred(x): return x iterable = (1, 2, 3) @@ -1139,6 +1159,7 @@ class Test_defineChecker(unittest.TestCase): def test_w_duplicate(self): from zope.exceptions import DuplicationError + from zope.security.checker import _checkers class Foo(object): @@ -1158,6 +1179,7 @@ class Test_defineChecker(unittest.TestCase): def test_w_module(self): import zope.interface + from zope.security.checker import _checkers checker = object() self._callFUT(zope.interface, checker) @@ -1226,17 +1248,19 @@ class TestCombinedChecker(QuietWatchingChecker, def test_class_conforms_to_IChecker(self): from zope.interface.verify import verifyClass + from zope.security.interfaces import IChecker verifyClass(IChecker, self._getTargetClass()) def test_instance_conforms_to_IChecker(self): from zope.interface.verify import verifyObject + from zope.security.interfaces import IChecker verifyObject(IChecker, self._makeOne()) def test_check_lhs_ok_rhs_not_called(self): - from zope.security.checker import CheckerPublic from zope.security.checker import Checker + from zope.security.checker import CheckerPublic class _NeverCalled(Checker): def check(self, object, name): # pylint:disable=redefined-builtin @@ -1248,8 +1272,8 @@ class TestCombinedChecker(QuietWatchingChecker, combined.check(object(), 'name') # no raise def test_check_lhs_unauth_rhs_ok(self): - from zope.security.checker import CheckerPublic from zope.security._definitions import thread_local + from zope.security.checker import CheckerPublic class _Interaction(object): def checkPermission(self, obj, perm): @@ -1265,8 +1289,8 @@ class TestCombinedChecker(QuietWatchingChecker, del thread_local.interaction def test_check_lhs_unauth_rhs_forbidden(self): - from zope.security.interfaces import Unauthorized from zope.security._definitions import thread_local + from zope.security.interfaces import Unauthorized class _Interaction(object): def checkPermission(self, obj, perm): @@ -1283,8 +1307,8 @@ class TestCombinedChecker(QuietWatchingChecker, del thread_local.interaction def test_check_lhs_unauth_rhs_unauth(self): - from zope.security.interfaces import Unauthorized from zope.security._definitions import thread_local + from zope.security.interfaces import Unauthorized class _Interaction(object): def checkPermission(self, obj, perm): @@ -1318,8 +1342,8 @@ class TestCombinedChecker(QuietWatchingChecker, combined.check, object(), 'name') def test_check_lhs_forbidden_rhs_unauth(self): - from zope.security.interfaces import Unauthorized from zope.security._definitions import thread_local + from zope.security.interfaces import Unauthorized class _Interaction(object): def checkPermission(self, obj, perm): @@ -1336,8 +1360,8 @@ class TestCombinedChecker(QuietWatchingChecker, del thread_local.interaction def test_check_setattr_lhs_ok_rhs_not_called(self): - from zope.security.checker import CheckerPublic from zope.security.checker import Checker + from zope.security.checker import CheckerPublic class _NeverCalled(Checker): def check_setattr(self, object, name): @@ -1349,8 +1373,8 @@ class TestCombinedChecker(QuietWatchingChecker, combined.check_setattr(object(), 'name') # no raise def test_check_setattr_lhs_unauth_rhs_ok(self): - from zope.security.checker import CheckerPublic from zope.security._definitions import thread_local + from zope.security.checker import CheckerPublic class _Interaction(object): def checkPermission(self, obj, perm): @@ -1366,8 +1390,8 @@ class TestCombinedChecker(QuietWatchingChecker, del thread_local.interaction def test_check_setattr_lhs_unauth_rhs_forbidden(self): - from zope.security.interfaces import Unauthorized from zope.security._definitions import thread_local + from zope.security.interfaces import Unauthorized class _Interaction(object): def checkPermission(self, obj, perm): @@ -1384,8 +1408,8 @@ class TestCombinedChecker(QuietWatchingChecker, del thread_local.interaction def test_check_setattr_lhs_unauth_rhs_unauth(self): - from zope.security.interfaces import Unauthorized from zope.security._definitions import thread_local + from zope.security.interfaces import Unauthorized class _Interaction(object): def checkPermission(self, obj, perm): @@ -1419,8 +1443,8 @@ class TestCombinedChecker(QuietWatchingChecker, combined.check_setattr, object(), 'name') def test_check_setattr_lhs_forbidden_rhs_unauth(self): - from zope.security.interfaces import Unauthorized from zope.security._definitions import thread_local + from zope.security.interfaces import Unauthorized class _Interaction(object): def checkPermission(self, obj, perm): @@ -1662,6 +1686,7 @@ class Test_moduleChecker(unittest.TestCase): def test_hit(self): from zope.interface import verify + from zope.security.checker import _checkers checker = _checkers[verify] = object() self.assertIs(self._callFUT(verify), checker) @@ -1700,6 +1725,7 @@ class TestSecurityPolicy(QuietWatchingChecker, def _makeSecurityPolicy(self): from zope.interface import implementer + from zope.security.interfaces import ISecurityPolicy @implementer(ISecurityPolicy) @@ -1709,8 +1735,8 @@ class TestSecurityPolicy(QuietWatchingChecker, return SecurityPolicy def test_defineChecker_oldstyle_class(self): - from zope.security.checker import defineChecker from zope.security.checker import NamesChecker + from zope.security.checker import defineChecker old_type = self._get_old_class_type() class ClassicClass: @@ -1720,8 +1746,8 @@ class TestSecurityPolicy(QuietWatchingChecker, defineChecker(ClassicClass, NamesChecker()) def test_defineChecker_newstyle_class(self): - from zope.security.checker import defineChecker from zope.security.checker import NamesChecker + from zope.security.checker import defineChecker class NewStyleClass(object): pass @@ -1730,13 +1756,13 @@ class TestSecurityPolicy(QuietWatchingChecker, def test_defineChecker_module(self): import zope.security - from zope.security.checker import defineChecker from zope.security.checker import NamesChecker + from zope.security.checker import defineChecker defineChecker(zope.security, NamesChecker()) def test_defineChecker_error(self): - from zope.security.checker import defineChecker from zope.security.checker import NamesChecker + from zope.security.checker import defineChecker not_a_type = object() self.assertRaises(TypeError, defineChecker, not_a_type, NamesChecker()) @@ -1783,10 +1809,10 @@ class TestSecurityPolicy(QuietWatchingChecker, # - allow and disallow by permission def test_check_getattr(self): # pylint:disable=attribute-defined-outside-init + from zope.security.checker import CheckerPublic + from zope.security.checker import NamesChecker from zope.security.interfaces import Forbidden from zope.security.interfaces import Unauthorized - from zope.security.checker import NamesChecker - from zope.security.checker import CheckerPublic OldInst, NewInst = self._makeClasses() @@ -1834,10 +1860,10 @@ class TestSecurityPolicy(QuietWatchingChecker, def test_check_setattr(self): # pylint:disable=attribute-defined-outside-init - from zope.security.interfaces import Forbidden - from zope.security.interfaces import Unauthorized from zope.security.checker import Checker from zope.security.checker import CheckerPublic + from zope.security.interfaces import Forbidden + from zope.security.interfaces import Unauthorized OldInst, NewInst = self._makeClasses() @@ -1874,11 +1900,11 @@ class TestSecurityPolicy(QuietWatchingChecker, self.assertRaises(Forbidden, checker.check_setattr, inst, 'f') def test_proxy(self): - from zope.security.proxy import getChecker - from zope.security.proxy import removeSecurityProxy from zope.security.checker import BasicTypes_examples from zope.security.checker import CheckerPublic from zope.security.checker import NamesChecker + from zope.security.proxy import getChecker + from zope.security.proxy import removeSecurityProxy OldInst, NewInst = self._makeClasses() @@ -1917,9 +1943,10 @@ class TestSecurityPolicy(QuietWatchingChecker, def testLayeredProxies(self): # Test that a Proxy will not be re-proxied. - from zope.security.proxy import Proxy, getObject from zope.security.checker import Checker from zope.security.checker import NamesChecker + from zope.security.proxy import Proxy + from zope.security.proxy import getObject class Base: __Security_checker__ = NamesChecker(['__Security_checker__']) @@ -2007,8 +2034,8 @@ class TestSecurityPolicy(QuietWatchingChecker, self.assertEqual(checker.check(C, '__parent__'), None) def test_setattr(self): - from zope.security.interfaces import Forbidden from zope.security.checker import NamesChecker + from zope.security.interfaces import Forbidden OldInst, NewInst = self._makeClasses() @@ -2025,12 +2052,12 @@ class TestSecurityPolicy(QuietWatchingChecker, def test_ProxyFactory(self): # pylint:disable=attribute-defined-outside-init - from zope.security.checker import _defaultChecker - from zope.security.checker import defineChecker from zope.security.checker import NamesChecker from zope.security.checker import ProxyFactory - from zope.security.proxy import getChecker + from zope.security.checker import _defaultChecker + from zope.security.checker import defineChecker from zope.security.proxy import Proxy + from zope.security.proxy import getChecker class SomeClass(object): pass @@ -2061,8 +2088,8 @@ class TestSecurityPolicy(QuietWatchingChecker, self.assertIs(getChecker(proxy), specific_checker) def test_define_and_undefineChecker(self): - from zope.security.checker import defineChecker from zope.security.checker import NamesChecker + from zope.security.checker import defineChecker from zope.security.checker import undefineChecker class SomeClass(object): @@ -2070,7 +2097,8 @@ class TestSecurityPolicy(QuietWatchingChecker, obj = SomeClass() checker = NamesChecker() - from zope.security.checker import _defaultChecker, selectChecker + from zope.security.checker import _defaultChecker + from zope.security.checker import selectChecker self.assertIs(selectChecker(obj), _defaultChecker) defineChecker(SomeClass, checker) self.assertIs(selectChecker(obj), checker) @@ -2078,8 +2106,8 @@ class TestSecurityPolicy(QuietWatchingChecker, self.assertIs(selectChecker(obj), _defaultChecker) def test_ProxyFactory_using_proxy(self): - from zope.security.checker import ProxyFactory from zope.security.checker import NamesChecker + from zope.security.checker import ProxyFactory class SomeClass(object): pass @@ -2109,11 +2137,11 @@ class TestSecurityPolicy(QuietWatchingChecker, # and call access to methods. # For example, consider this humble pair of class and object. - from zope.security.interfaces import Forbidden from zope.security.checker import Checker from zope.security.checker import canAccess from zope.security.checker import canWrite from zope.security.checker import defineChecker + from zope.security.interfaces import Forbidden class SomeClass(object): pass @@ -2185,13 +2213,14 @@ class TestCheckerPublic(unittest.TestCase): def test_that_pickling_CheckerPublic_retains_identity(self): import pickle + from zope.security.checker import CheckerPublic self.assertIs(pickle.loads(pickle.dumps(CheckerPublic)), CheckerPublic) def test_that_CheckerPublic_identity_works_even_when_proxied(self): - from zope.security.checker import ProxyFactory from zope.security.checker import CheckerPublic + from zope.security.checker import ProxyFactory self.assertIs(ProxyFactory(CheckerPublic), CheckerPublic) @@ -2224,6 +2253,7 @@ class TestMixinDecoratedChecker(unittest.TestCase): def _makeSecurityPolicy(self): from zope.interface import implementer + from zope.security.interfaces import ISecurityPolicy @implementer(ISecurityPolicy) @@ -2297,8 +2327,8 @@ class TestCombinedCheckerMixin(QuietWatchingChecker, super(TestCombinedCheckerMixin, self).tearDown() def test_checking(self): - from zope.security.interfaces import Unauthorized from zope.security.checker import CombinedChecker + from zope.security.interfaces import Unauthorized cc = CombinedChecker(self.overridingChecker, self.originalChecker) self.check_checking_impl(cc) @@ -2319,6 +2349,7 @@ class TestCombinedCheckerMixin(QuietWatchingChecker, def test_interface(self): from zope.interface.verify import verifyObject + from zope.security.checker import CombinedChecker from zope.security.interfaces import IChecker dc = CombinedChecker(self.overridingChecker, self.originalChecker) diff --git a/src/zope/security/tests/test_decorator.py b/src/zope/security/tests/test_decorator.py index 285f7ef..756177a 100644 --- a/src/zope/security/tests/test_decorator.py +++ b/src/zope/security/tests/test_decorator.py @@ -14,6 +14,7 @@ """Test zope.security.decorator """ import unittest + from zope.security.tests import QuietWatchingChecker @@ -39,6 +40,7 @@ class DecoratedSecurityCheckerDescriptorTests(QuietWatchingChecker, def test_neither_wrapper_nor_object_has_checker(self): from zope.proxy import ProxyBase + from zope.security.checker import NoProxy from zope.security.checker import defineChecker @@ -57,6 +59,7 @@ class DecoratedSecurityCheckerDescriptorTests(QuietWatchingChecker, def test_both_wrapper_and_object_have_checkers_not_security_proxied(self): from zope.proxy import ProxyBase + from zope.security.checker import CombinedChecker from zope.security.checker import NamesChecker from zope.security.checker import defineChecker @@ -88,6 +91,7 @@ class DecoratedSecurityCheckerDescriptorTests(QuietWatchingChecker, def test_only_wrapper_has_checker(self): from zope.proxy import ProxyBase + from zope.security.checker import NamesChecker from zope.security.checker import NoProxy from zope.security.checker import defineChecker @@ -107,6 +111,7 @@ class DecoratedSecurityCheckerDescriptorTests(QuietWatchingChecker, def test_only_object_has_checker(self): from zope.proxy import ProxyBase + from zope.security.checker import NamesChecker from zope.security.checker import NoProxy from zope.security.checker import defineChecker @@ -126,6 +131,7 @@ class DecoratedSecurityCheckerDescriptorTests(QuietWatchingChecker, def test_both_wrapper_and_object_have_checkers_security_proxied(self): from zope.proxy import ProxyBase + from zope.security.checker import CombinedChecker from zope.security.checker import NamesChecker from zope.security.checker import defineChecker @@ -152,6 +158,7 @@ class DecoratedSecurityCheckerDescriptorTests(QuietWatchingChecker, def test_cannot_overwrite(self): from zope.proxy import ProxyBase + from zope.security.checker import NoProxy from zope.security.checker import defineChecker diff --git a/src/zope/security/tests/test_location.py b/src/zope/security/tests/test_location.py index 194fc52..a620605 100644 --- a/src/zope/security/tests/test_location.py +++ b/src/zope/security/tests/test_location.py @@ -16,6 +16,7 @@ import unittest from zope.location.location import LocationProxy + from zope.security.tests import QuietWatchingChecker @@ -23,8 +24,8 @@ class LocationSecurityProxyTests(QuietWatchingChecker, unittest.TestCase): def test_locationproxy_security(self): - from zope.security.checker import defineChecker from zope.security.checker import NamesChecker + from zope.security.checker import defineChecker from zope.security.proxy import ProxyFactory class Unlocated(object): diff --git a/src/zope/security/tests/test_management.py b/src/zope/security/tests/test_management.py index 78dd78d..6fb62cf7 100644 --- a/src/zope/security/tests/test_management.py +++ b/src/zope/security/tests/test_management.py @@ -32,16 +32,17 @@ class Test(unittest.TestCase): def test_import(self): from zope.interface.verify import verifyObject + from zope.security import management - from zope.security.interfaces import ISecurityManagement from zope.security.interfaces import IInteractionManagement + from zope.security.interfaces import ISecurityManagement verifyObject(ISecurityManagement, management) verifyObject(IInteractionManagement, management) def test_securityPolicy(self): - from zope.security.management import setSecurityPolicy from zope.security.management import getSecurityPolicy + from zope.security.management import setSecurityPolicy from zope.security.simplepolicies import PermissiveSecurityPolicy policy = PermissiveSecurityPolicy @@ -110,9 +111,9 @@ class Test(unittest.TestCase): self.assertTrue(queryInteraction() is None) def test_restoreInteraction_after_neither(self): + from zope.security._definitions import thread_local from zope.security.management import queryInteraction from zope.security.management import restoreInteraction - from zope.security._definitions import thread_local try: del thread_local.interaction except AttributeError: @@ -125,17 +126,17 @@ class Test(unittest.TestCase): self.assertTrue(queryInteraction() is None) def test_checkPermission_w_no_interaction(self): - from zope.security.management import checkPermission from zope.security.interfaces import NoInteraction + from zope.security.management import checkPermission permission = 'zope.Test' obj = object() self.assertRaises(NoInteraction, checkPermission, permission, obj) def test_checkPermission_w_interaction(self): from zope.security.management import checkPermission - from zope.security.management import setSecurityPolicy - from zope.security.management import queryInteraction from zope.security.management import newInteraction + from zope.security.management import queryInteraction + from zope.security.management import setSecurityPolicy permission = 'zope.Test' obj = object() @@ -155,8 +156,8 @@ class Test(unittest.TestCase): def test_checkPermission_forbidden_policy(self): from zope.security import checkPermission from zope.security.checker import CheckerPublic - from zope.security.management import setSecurityPolicy from zope.security.management import newInteraction + from zope.security.management import setSecurityPolicy obj = object() @@ -172,6 +173,7 @@ class Test(unittest.TestCase): def test_system_user(self): from zope.interface.verify import verifyObject + from zope.security.interfaces import IPrincipal from zope.security.interfaces import ISystemPrincipal from zope.security.management import system_user diff --git a/src/zope/security/tests/test_metaconfigure.py b/src/zope/security/tests/test_metaconfigure.py index c8631e9..a446b72 100644 --- a/src/zope/security/tests/test_metaconfigure.py +++ b/src/zope/security/tests/test_metaconfigure.py @@ -14,6 +14,7 @@ """Test ZCML directives """ import unittest + from zope.security.interfaces import PUBLIC_PERMISSION_NAME as zope_Public @@ -132,6 +133,7 @@ class ClassDirectiveTests(unittest.TestCase): from zope.component.interface import provideInterface from zope.interface import Attribute from zope.interface import Interface + from zope.security.protectclass import protectName class IFoo(Interface): @@ -158,6 +160,7 @@ class ClassDirectiveTests(unittest.TestCase): from zope.component.interface import provideInterface from zope.interface import Attribute from zope.interface import Interface + from zope.security.protectclass import protectName class IFoo(Interface): @@ -221,8 +224,9 @@ class ClassDirectiveTests(unittest.TestCase): def test_require_w_set_schema_normal_fields(self): from zope.component.interface import provideInterface - from zope.schema import Field from zope.interface import Interface + from zope.schema import Field + from zope.security.protectclass import protectSetAttribute class IFoo(Interface): @@ -263,8 +267,8 @@ class ClassDirectiveTests(unittest.TestCase): def test_require_w_set_schema_ignores_readonly_fields(self): from zope.component.interface import provideInterface - from zope.schema import Field from zope.interface import Interface + from zope.schema import Field class IFoo(Interface): bar = Field(u"Bar", readonly=True) @@ -287,6 +291,7 @@ class ClassDirectiveTests(unittest.TestCase): from zope.component.interface import provideInterface from zope.interface import Attribute from zope.interface import Interface + from zope.security.protectclass import protectName class IFoo(Interface): @@ -315,6 +320,7 @@ class ClassDirectiveTests(unittest.TestCase): from zope.component.interface import provideInterface from zope.interface import Attribute from zope.interface import Interface + from zope.security.protectclass import protectName class IFoo(Interface): @@ -368,8 +374,8 @@ class ClassDirectiveTests(unittest.TestCase): self.assertEqual(directive(), ()) def test_factory_wo_explicit_id(self): - from zope.component.interfaces import IFactory from zope.component.interface import provideInterface + from zope.component.interfaces import IFactory from zope.component.zcml import handler context = DummyZCMLContext() context.info = 'INFO' @@ -394,8 +400,8 @@ class ClassDirectiveTests(unittest.TestCase): self.assertEqual(context._actions[1]['args'], ('', IFactory)) def test_factory_w_explicit_id(self): - from zope.component.interfaces import IFactory from zope.component.interface import provideInterface + from zope.component.interfaces import IFactory from zope.component.zcml import handler context = DummyZCMLContext() context.info = 'INFO' @@ -503,6 +509,7 @@ class Test_allow(unittest.TestCase): def test_w_interface(self): from zope.interface import Attribute from zope.interface import Interface + from zope.security.metaconfigure import protectModule class IFoo(Interface): @@ -521,6 +528,7 @@ class Test_allow(unittest.TestCase): def test_w_both(self): from zope.interface import Attribute from zope.interface import Interface + from zope.security.metaconfigure import protectModule class IFoo(Interface): @@ -602,6 +610,7 @@ class Test_requre(unittest.TestCase): def test_w_interface(self): from zope.interface import Attribute from zope.interface import Interface + from zope.security.metaconfigure import protectModule class IFoo(Interface): @@ -621,6 +630,7 @@ class Test_requre(unittest.TestCase): def test_w_both(self): from zope.interface import Attribute from zope.interface import Interface + from zope.security.metaconfigure import protectModule class IFoo(Interface): diff --git a/src/zope/security/tests/test_permission.py b/src/zope/security/tests/test_permission.py index 9e03496..075aed0 100644 --- a/src/zope/security/tests/test_permission.py +++ b/src/zope/security/tests/test_permission.py @@ -14,7 +14,9 @@ """Test permissions """ import unittest + from zope.component.testing import PlacelessSetup + from zope.security.interfaces import PUBLIC_PERMISSION_NAME as zope_Public @@ -30,13 +32,15 @@ class PermissionTests(unittest.TestCase): def test_class_conforms_to_IPermission(self): from zope.interface.verify import verifyClass + from zope.security.interfaces import IPermission verifyClass(IPermission, self._getTargetClass()) def test_instance_conforms_to_IPermission(self): from zope.interface.verify import verifyObject - from zope.security.interfaces import IPermission from zope.schema import getValidationErrors + + from zope.security.interfaces import IPermission verifyObject(IPermission, self._makeOne('testing')) self.assertEqual([], getValidationErrors(IPermission, @@ -70,6 +74,7 @@ class Test_checkPermission(PlacelessSetup, unittest.TestCase): def test_hit(self): from zope.component import provideUtility + from zope.security.interfaces import IPermission permission = object() provideUtility(permission, IPermission, 'testing') @@ -88,6 +93,7 @@ class Test_allPermissions(PlacelessSetup, unittest.TestCase): def test_w_registration(self): self.assertEqual(list(self._callFUT()), []) from zope.component import provideUtility + from zope.security.interfaces import IPermission permission = object() provideUtility(permission, IPermission, 'testing') @@ -96,6 +102,7 @@ class Test_allPermissions(PlacelessSetup, unittest.TestCase): def test_skips_zope_Public(self): self.assertEqual(list(self._callFUT()), []) from zope.component import provideUtility + from zope.security.checker import CheckerPublic from zope.security.interfaces import IPermission permission = object() @@ -119,6 +126,7 @@ class Test_PermissionsVocabulary(PlacelessSetup, unittest.TestCase): def test_w_registration(self): self.assertEqual(list(self._callFUT()), []) from zope.component import provideUtility + from zope.security.interfaces import IPermission permission = object() provideUtility(permission, IPermission, 'testing') @@ -128,6 +136,7 @@ class Test_PermissionsVocabulary(PlacelessSetup, unittest.TestCase): def test_includes_zope_Public(self): self.assertEqual(list(self._callFUT()), []) from zope.component import provideUtility + from zope.security.checker import CheckerPublic from zope.security.interfaces import IPermission permission = object() @@ -139,11 +148,12 @@ class Test_PermissionsVocabulary(PlacelessSetup, unittest.TestCase): def test_zcml_valid(self): from zope.configuration import xmlconfig - import zope.security from zope.interface.verify import verifyObject - from zope.security.interfaces import IPermission from zope.schema import getValidationErrors + import zope.security + from zope.security.interfaces import IPermission + xmlconfig.file('configure.zcml', zope.security) vocabulary = self._callFUT() vocabulary = sorted(vocabulary, key=lambda term: term.token) @@ -171,6 +181,7 @@ class Test_PermissionIdsVocabulary(PlacelessSetup, unittest.TestCase): def test_w_registration(self): self.assertEqual(list(self._callFUT()), []) from zope.component import provideUtility + from zope.security.interfaces import IPermission permission = object() provideUtility(permission, IPermission, 'testing') @@ -181,6 +192,7 @@ class Test_PermissionIdsVocabulary(PlacelessSetup, unittest.TestCase): def test_includes_zope_Public(self): self.assertEqual(list(self._callFUT()), []) from zope.component import provideUtility + from zope.security.checker import CheckerPublic from zope.security.interfaces import IPermission permission = object() diff --git a/src/zope/security/tests/test_protectclass.py b/src/zope/security/tests/test_protectclass.py index 16999e5..c1cdc09 100644 --- a/src/zope/security/tests/test_protectclass.py +++ b/src/zope/security/tests/test_protectclass.py @@ -14,6 +14,7 @@ """Test handler for 'protectClass' directive """ import unittest + from zope.security.interfaces import PUBLIC_PERMISSION_NAME as zope_Public @@ -101,8 +102,8 @@ class Test_protectLikeUnto(unittest.TestCase): def test_w_existing_like_unto_checker_wo_existing_checker(self): from zope.security.checker import Checker from zope.security.checker import CheckerPublic - from zope.security.checker import defineChecker from zope.security.checker import _checkers + from zope.security.checker import defineChecker permission = object() foo_checker = Checker({'bar': CheckerPublic}, {'bar': permission}) defineChecker(Foo, foo_checker) @@ -116,8 +117,8 @@ class Test_protectLikeUnto(unittest.TestCase): def test_w_existing_like_unto_checker_w_existing_checker(self): from zope.security.checker import Checker from zope.security.checker import CheckerPublic - from zope.security.checker import defineChecker from zope.security.checker import _checkers + from zope.security.checker import defineChecker permission1, permission2 = object(), object() foo_checker = Checker({'bar': CheckerPublic}, {'bar': permission2}) defineChecker(Foo, foo_checker) @@ -142,6 +143,7 @@ class Bar(Foo): def test_suite(): return unittest.TestSuite(( unittest.defaultTestLoader.loadTestsFromTestCase(Test_protectName), - unittest.defaultTestLoader.loadTestsFromTestCase(Test_protectSetAttribute), + unittest.defaultTestLoader.loadTestsFromTestCase( + Test_protectSetAttribute), unittest.defaultTestLoader.loadTestsFromTestCase(Test_protectLikeUnto), )) diff --git a/src/zope/security/tests/test_proxy.py b/src/zope/security/tests/test_proxy.py index d646f54..3570cad 100644 --- a/src/zope/security/tests/test_proxy.py +++ b/src/zope/security/tests/test_proxy.py @@ -15,7 +15,8 @@ """ import unittest -from zope.security._compat import PYTHON2, PURE_PYTHON +from zope.security._compat import PURE_PYTHON +from zope.security._compat import PYTHON2 def _skip_if_not_Py2(testfunc): @@ -189,8 +190,8 @@ class AbstractProxyTestBase(object): self.assertEqual(str(proxy), str(target)) def test___str___checker_forbids_str(self): - from zope.security.interfaces import ForbiddenAttribute from zope.security._compat import _BUILTINS + from zope.security.interfaces import ForbiddenAttribute from zope.security.proxy import _fmt_address target = object() checker = DummyChecker(ForbiddenAttribute) @@ -222,8 +223,8 @@ class AbstractProxyTestBase(object): self.assertEqual(repr(proxy), repr(target)) def test___repr___checker_forbids_str(self): - from zope.security.interfaces import ForbiddenAttribute from zope.security._compat import _BUILTINS + from zope.security.interfaces import ForbiddenAttribute from zope.security.proxy import _fmt_address target = object() checker = DummyChecker(ForbiddenAttribute) @@ -1583,7 +1584,9 @@ class ProxyPyTests(AbstractProxyTestBase, self.assertIs(checker, sub.get_checker()) def test_ctor_w_checker(self): - from zope.security.proxy import getObjectPy, getCheckerPy + from zope.security.proxy import getCheckerPy + from zope.security.proxy import getObjectPy + # Can't access '_wrapped' / '_checker' in C version target = object() checker = object() @@ -2161,6 +2164,7 @@ class ProxyFactoryTests(unittest.TestCase): # This used to work on Python 2, but fail on Python 3. # See https://github.com/zopefoundation/zope.interface/issues/141 from zope.interface import Interface + from zope.security.proxy import ProxyFactory class IFoo(Interface): @@ -2253,7 +2257,9 @@ class LocationProxySecurityCheckerTests(unittest.TestCase): # Regression test for a problem introduced in 3.8.1 and fixed in # 3.8.3. For details see change log. import sys + from zope.location.location import LocationProxy + import zope.security try: from importlib import reload as _reload diff --git a/src/zope/security/tests/test_simpleinteraction.py b/src/zope/security/tests/test_simpleinteraction.py index 3135027..b5b5c4a 100644 --- a/src/zope/security/tests/test_simpleinteraction.py +++ b/src/zope/security/tests/test_simpleinteraction.py @@ -27,6 +27,7 @@ class TestInteraction(unittest.TestCase): def test(self): from zope.interface.verify import verifyObject + from zope.security.interfaces import IInteraction from zope.security.simplepolicies import ParanoidSecurityPolicy interaction = ParanoidSecurityPolicy() @@ -61,6 +62,7 @@ class TestInteraction(unittest.TestCase): def testCreateInteraction(self): from zope.interface.verify import verifyObject + from zope.security.interfaces import IInteraction from zope.security.simplepolicies import ParanoidSecurityPolicy i1 = ParanoidSecurityPolicy() diff --git a/src/zope/security/tests/test_simplepolicies.py b/src/zope/security/tests/test_simplepolicies.py index fcbc8de..e55d0e3 100644 --- a/src/zope/security/tests/test_simplepolicies.py +++ b/src/zope/security/tests/test_simplepolicies.py @@ -24,11 +24,13 @@ class ConformsToIInteraction(object): def test_class_conforms_to_IInteraction(self): from zope.interface.verify import verifyClass + from zope.security.interfaces import IInteraction verifyClass(IInteraction, self._getTargetClass()) def test_instance_conforms_to_IInteraction(self): from zope.interface.verify import verifyObject + from zope.security.interfaces import IInteraction verifyObject(IInteraction, self._makeOne()) diff --git a/src/zope/security/tests/test_zcml.py b/src/zope/security/tests/test_zcml.py index 0cf9616..db04952 100644 --- a/src/zope/security/tests/test_zcml.py +++ b/src/zope/security/tests/test_zcml.py @@ -12,6 +12,7 @@ # ############################################################################## import unittest + from zope.security.interfaces import PUBLIC_PERMISSION_NAME as zope_Public @@ -100,6 +101,7 @@ class Test_permission(unittest.TestCase): def test_wo_description(self): from zope.component.interface import provideInterface from zope.component.zcml import handler + from zope.security.interfaces import IPermission context = DummyZCMLContext() context.info = 'INFO' @@ -121,6 +123,7 @@ class Test_permission(unittest.TestCase): def test_w_description(self): from zope.component.interface import provideInterface from zope.component.zcml import handler + from zope.security.interfaces import IPermission context = DummyZCMLContext() context.info = 'INFO' @@ -196,5 +199,6 @@ def test_suite(): unittest.defaultTestLoader.loadTestsFromTestCase(PermissionTests), unittest.defaultTestLoader.loadTestsFromTestCase(Test_securityPolicy), unittest.defaultTestLoader.loadTestsFromTestCase(Test_permission), - unittest.defaultTestLoader.loadTestsFromTestCase(Test_redefinePermission), + unittest.defaultTestLoader.loadTestsFromTestCase( + Test_redefinePermission), )) diff --git a/src/zope/security/tests/test_zcml_functest.py b/src/zope/security/tests/test_zcml_functest.py index 2486af6..3f5991a 100644 --- a/src/zope/security/tests/test_zcml_functest.py +++ b/src/zope/security/tests/test_zcml_functest.py @@ -13,8 +13,8 @@ ############################################################################## """Directives Tests """ -import unittest import io +import unittest def configfile(s): @@ -49,6 +49,7 @@ class TestClassDirective(unittest.TestCase): def _meta(self): from zope.configuration.xmlconfig import XMLConfig + import zope.security XMLConfig('meta.zcml', zope.security)() @@ -64,6 +65,7 @@ class TestClassDirective(unittest.TestCase): def testImplements(self): from zope.component.interface import queryInterface from zope.configuration.xmlconfig import xmlconfig + from zope.security.tests.exampleclass import ExampleClass from zope.security.tests.exampleclass import IExample self._meta() @@ -84,6 +86,7 @@ class TestClassDirective(unittest.TestCase): def testMulImplements(self): from zope.component.interface import queryInterface from zope.configuration.xmlconfig import xmlconfig + from zope.security.tests.exampleclass import ExampleClass from zope.security.tests.exampleclass import IExample from zope.security.tests.exampleclass import IExample2 @@ -156,6 +159,7 @@ class TestFactorySubdirective(unittest.TestCase): def _meta(self): from zope.configuration.xmlconfig import XMLConfig + import zope.security XMLConfig('meta.zcml', zope.security)() @@ -183,8 +187,8 @@ class TestFactorySubdirective(unittest.TestCase): def testFactoryNoId(self): from zope.component import getUtility from zope.component.interfaces import IFactory - from zope.interface.interfaces import ComponentLookupError from zope.configuration.xmlconfig import xmlconfig + from zope.interface.interfaces import ComponentLookupError self._meta() f = configfile(""" <permission id="zope.Foo" title="Zope Foo Permission" /> @@ -242,13 +246,15 @@ class TestFactoryDirective(unittest.TestCase): tearDown() def meta(self): - import zope.security from zope.configuration.xmlconfig import XMLConfig + + import zope.security XMLConfig('meta.zcml', zope.security)() def testFactory(self): from zope.component import createObject from zope.configuration.xmlconfig import xmlconfig + from zope.security import proxy from zope.security.tests import exampleclass self.meta() @@ -274,6 +280,7 @@ def _pfx(name): def defineDirectives(): from zope.configuration.xmlconfig import XMLConfig from zope.configuration.xmlconfig import xmlconfig + import zope.security XMLConfig('meta.zcml', zope.security)() xmlconfig(io.StringIO(u"""<configure @@ -293,9 +300,10 @@ P2 = "zope.Paltry" class TestRequireDirective(unittest.TestCase): def setUp(self): + from zope.component.testing import setUp from zope.interface import implementer + from zope.security.tests import module - from zope.component.testing import setUp setUp() defineDirectives() @@ -344,6 +352,7 @@ class TestRequireDirective(unittest.TestCase): def test_wo_any_attributes(self): from zope.configuration.exceptions import ConfigurationError + from zope.security.tests import module declaration = ('''<class class="%s"> <require @@ -383,6 +392,7 @@ class TestRequireDirective(unittest.TestCase): def test_set_schema(self): from zope.component.interface import queryInterface + from zope.security.checker import selectChecker from zope.security.tests import module self.assertEqual(queryInterface(_pfx("S")), None) @@ -407,6 +417,7 @@ class TestRequireDirective(unittest.TestCase): def test_multiple_set_schema(self): from zope.component.interface import queryInterface + from zope.security.checker import selectChecker from zope.security.tests import module self.assertEqual(queryInterface(_pfx("S")), None) @@ -435,6 +446,7 @@ class TestRequireDirective(unittest.TestCase): def testSimpleInterface(self): from zope.component.interface import queryInterface + from zope.security.tests import module self.assertEqual(queryInterface(_pfx("I")), None) @@ -452,6 +464,7 @@ class TestRequireDirective(unittest.TestCase): def testMultipleInterface(self): from zope.component.interface import queryInterface + from zope.security.tests import module self.assertEqual(queryInterface(_pfx("I3")), None) self.assertEqual(queryInterface(_pfx("I4")), None) @@ -559,6 +572,7 @@ def apply_declaration(declaration): def make_dummy(): from zope.interface import Interface + import zope.security.zcml global IDummy @@ -587,6 +601,7 @@ class DirectivesTest(unittest.TestCase): def testRedefinePermission(self): from zope.configuration import xmlconfig + from zope.security import tests make_dummy() xmlconfig.file("redefineperms.zcml", tests) diff --git a/src/zope/security/zcml.py b/src/zope/security/zcml.py index 4e3c17c..1f48138 100644 --- a/src/zope/security/zcml.py +++ b/src/zope/security/zcml.py @@ -22,9 +22,9 @@ from zope.schema import Id from zope.schema.interfaces import IFromUnicode from zope.security._compat import implementer_if_needed -from zope.security.permission import checkPermission -from zope.security.management import setSecurityPolicy from zope.security.interfaces import PUBLIC_PERMISSION_NAME as zope_Public +from zope.security.management import setSecurityPolicy +from zope.security.permission import checkPermission @implementer_if_needed(IFromUnicode) @@ -94,9 +94,10 @@ class IPermissionDirective(Interface): def permission(_context, id, title, description=u''): + from zope.component.zcml import utility + from zope.security.interfaces import IPermission from zope.security.permission import Permission - from zope.component.zcml import utility permission = Permission(id, title, description) utility(_context, IPermission, permission, name=id) @@ -52,6 +52,8 @@ commands = basepython = python3 skip_install = true commands = + isort --check-only --diff {toxinidir}/src {toxinidir}/setup.py + flake8 src setup.py check-manifest check-python-versions deps = |