summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Madden <jamadden@gmail.com>2017-09-07 17:52:15 -0500
committerJason Madden <jamadden@gmail.com>2017-09-07 17:52:15 -0500
commitc0807b6ca629731510ae41ccbcab27570d687546 (patch)
treece768e8ec100e65869e924dbe896ee367e86f056
parentf2de4625c116085404958724468899dbe784bce6 (diff)
downloadzope-security-remove_u.tar.gz
Simplify _compat.py now that we only run on newer Pythonsremove_u
- We have u'literals' so we don't need a _u() function. For the record the Emacs replacement regex was `_u(\(['"]\)\([^)]*\)\1) -> u\1\2\1`. Amazingly, I typed that right on the first try. A few things were only used in one (test) file or function, so it was better to keep the use, if any, local and out of the "public" api: - We can use io.StringIO everywhere and it's fast. It was only imported in one file anyway. - We can just import pickle. It was only imported in one file anyway. - TEXT was only used in one test function, `type(u'')` is just as clear (especially since the usual name is `text_type`). - reload was only used in one test function, so move the definition there.
-rw-r--r--src/zope/security/_compat.py25
-rw-r--r--src/zope/security/_definitions.py7
-rw-r--r--src/zope/security/checker.py3
-rw-r--r--src/zope/security/metadirectives.py33
-rw-r--r--src/zope/security/permission.py5
-rw-r--r--src/zope/security/tests/test_checker.py13
-rw-r--r--src/zope/security/tests/test_management.py14
-rw-r--r--src/zope/security/tests/test_metaconfigure.py17
-rw-r--r--src/zope/security/tests/test_proxy.py6
-rw-r--r--src/zope/security/tests/test_zcml_functest.py36
-rw-r--r--src/zope/security/zcml.py42
11 files changed, 77 insertions, 124 deletions
diff --git a/src/zope/security/_compat.py b/src/zope/security/_compat.py
index f3e441f..6c6170f 100644
--- a/src/zope/security/_compat.py
+++ b/src/zope/security/_compat.py
@@ -22,15 +22,7 @@ py_impl = getattr(platform, 'python_implementation', lambda: None)
PYPY = py_impl() == 'PyPy'
PURE_PYTHON = os.environ.get('PURE_PYTHON', False)
-if sys.version_info[0] < 3: #pragma NO COVER
-
- from StringIO import StringIO
- import cPickle as _pickle
-
- reload = reload
-
- def _u(s):
- return unicode(s, 'unicode_escape')
+if sys.version_info[0] < 3: # pragma: no cover
CLASS_TYPES = (type, types.ClassType)
_BUILTINS = '__builtin__'
@@ -38,17 +30,7 @@ if sys.version_info[0] < 3: #pragma NO COVER
PYTHON3 = False
PYTHON2 = True
- TEXT = unicode
-
-else: #pragma NO COVER
-
- from io import StringIO
- import pickle as _pickle
-
- from imp import reload
-
- def _u(s):
- return s
+else: # pragma: no cover
CLASS_TYPES = (type,)
_BUILTINS = 'builtins'
@@ -56,6 +38,5 @@ else: #pragma NO COVER
PYTHON3 = True
PYTHON2 = False
- TEXT = str
-_BLANK = _u('')
+_BLANK = u''
diff --git a/src/zope/security/_definitions.py b/src/zope/security/_definitions.py
index a54d7a8..e4f3867 100644
--- a/src/zope/security/_definitions.py
+++ b/src/zope/security/_definitions.py
@@ -17,12 +17,11 @@ import threading
import zope.interface
from zope.security import interfaces
-from zope.security._compat import _u
thread_local = threading.local()
@zope.interface.provider(interfaces.IPrincipal)
class system_user(object):
- id = _u('zope.security.management.system_user')
- title = _u('System')
- description = _u('')
+ id = u'zope.security.management.system_user'
+ title = u'System'
+ description = u''
diff --git a/src/zope/security/checker.py b/src/zope/security/checker.py
index f870a13..d275b51 100644
--- a/src/zope/security/checker.py
+++ b/src/zope/security/checker.py
@@ -49,7 +49,6 @@ 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 _u
from zope.security.proxy import Proxy
from zope.security.proxy import getChecker
@@ -687,7 +686,7 @@ BasicTypes_examples = {
}
if PYTHON2:
- BasicTypes_examples[unicode] = _u('uabc')
+ BasicTypes_examples[unicode] = u'uabc'
BasicTypes_examples[long] = long(65536)
diff --git a/src/zope/security/metadirectives.py b/src/zope/security/metadirectives.py
index a080372..1a81658 100644
--- a/src/zope/security/metadirectives.py
+++ b/src/zope/security/metadirectives.py
@@ -25,7 +25,6 @@ from zope.interface import Interface
import zope.security.zcml
from zope.security.i18n import ZopeMessageFactory as _
from zope.security.zcml import Permission
-from zope.security._compat import _u
class IClassDirective(zope.interface.Interface):
"""Make statements about a class"""
@@ -149,8 +148,8 @@ class IModule(Interface):
"""Group security declarations about a module"""
module = GlobalObject(
- title=_u("Module"),
- description=_u("Pointer to the module object."),
+ title=u"Module",
+ description=u"Pointer to the module object.",
required=True)
@@ -163,17 +162,17 @@ class IAllow(Interface):
"""
attributes = Tokens(
- title=_u("Attributes"),
- description=_u("The attributes to provide access to."),
- value_type = PythonIdentifier(),
+ title=u"Attributes",
+ description=u"The attributes to provide access to.",
+ value_type=PythonIdentifier(),
required=False)
interface = Tokens(
- title=_u("Interface"),
- description=_u("Interfaces whos names to provide access to. Access "
- "will be provided to all of the names defined by the "
- "interface(s). Multiple interfaces can be supplied."),
- value_type = GlobalInterface(),
+ title=u"Interface",
+ description=(u"Interfaces whos names to provide access to. Access "
+ u"will be provided to all of the names defined by the "
+ u"interface(s). Multiple interfaces can be supplied."),
+ value_type=GlobalInterface(),
required=False)
@@ -182,15 +181,15 @@ class IRequire(Interface):
The given permission is required to access any names provided
directly in the attributes attribute or any names defined by
- interfaces listed in the interface attribute.
+ interfaces listed in the interface attribute.
"""
attributes = Tokens(
- title=_u("Attributes"),
- description=_u("The attributes to require permission for."),
- value_type = PythonIdentifier(),
+ title=u"Attributes",
+ description=u"The attributes to require permission for.",
+ value_type=PythonIdentifier(),
required=False)
permission = Permission(
- title=_u("Permission ID"),
- description=_u("The id of the permission to require."))
+ title=u"Permission ID",
+ description=u"The id of the permission to require.")
diff --git a/src/zope/security/permission.py b/src/zope/security/permission.py
index efacde9..8044d4d 100644
--- a/src/zope/security/permission.py
+++ b/src/zope/security/permission.py
@@ -27,7 +27,6 @@ from zope.schema.vocabulary import SimpleVocabulary
from zope.security.checker import CheckerPublic
from zope.security.interfaces import IPermission
-from zope.security._compat import _u
@implementer(IPermission)
class Permission(object):
@@ -49,7 +48,7 @@ def allPermissions(context=None):
"""Get the ids of all defined permissions
"""
for id, permission in getUtilitiesFor(IPermission, context):
- if id != _u('zope.Public'):
+ if id != u'zope.Public':
yield id
def PermissionsVocabulary(context=None):
@@ -85,7 +84,7 @@ def PermissionIdsVocabulary(context=None):
terms.append(SimpleTerm(name, name, name))
terms = sorted(terms, key=operator.attrgetter('title'))
if has_public:
- terms.insert(0, SimpleTerm(CheckerPublic, 'zope.Public', _u('Public')))
+ terms.insert(0, SimpleTerm(CheckerPublic, 'zope.Public', u'Public'))
return SimpleVocabulary(terms)
directlyProvides(PermissionIdsVocabulary, IVocabularyFactory)
diff --git a/src/zope/security/tests/test_checker.py b/src/zope/security/tests/test_checker.py
index b82799f..56a03ff 100644
--- a/src/zope/security/tests/test_checker.py
+++ b/src/zope/security/tests/test_checker.py
@@ -838,13 +838,12 @@ class _SelectCheckerBase(object):
def test_w_basic_types_NoProxy(self):
import datetime
from zope.i18nmessageid import Message
- from zope.security._compat import _u
msg = Message('msg')
for obj in [object(),
42,
3.14,
None,
- _u('text'),
+ u'text',
b'binary',
msg,
True,
@@ -966,13 +965,12 @@ class Test_defineChecker(unittest.TestCase):
return defineChecker(type_, checker)
def test_w_wrong_type(self):
- from zope.security._compat import _u
checker = object()
for obj in [object(),
42,
3.14,
None,
- _u('text'),
+ u'text',
b'binary',
True,
]:
@@ -2030,11 +2028,10 @@ class Test(unittest.TestCase):
class TestCheckerPublic(unittest.TestCase):
def test_that_pickling_CheckerPublic_retains_identity(self):
- from zope.security._compat import _pickle
+ import pickle
from zope.security.checker import CheckerPublic
- self.assertTrue(_pickle.loads(_pickle.dumps(CheckerPublic))
- is
- 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
diff --git a/src/zope/security/tests/test_management.py b/src/zope/security/tests/test_management.py
index 8eee32b..83aca7b 100644
--- a/src/zope/security/tests/test_management.py
+++ b/src/zope/security/tests/test_management.py
@@ -172,17 +172,15 @@ class Test(unittest.TestCase):
def test_system_user(self):
from zope.security.management import system_user
- from zope.security._compat import TEXT
- from zope.security._compat import _u
+
self.assertEqual(system_user.id,
- _u('zope.security.management.system_user'))
+ u'zope.security.management.system_user')
- self.assertEqual(system_user.title, _u('System'))
+ self.assertEqual(system_user.title, u'System')
for name in 'id', 'title', 'description':
- self.assertTrue(isinstance(getattr(system_user, name), TEXT))
+ self.assertIsInstance(getattr(system_user, name),
+ type(u''))
def test_suite():
- return unittest.TestSuite((
- unittest.makeSuite(Test),
- ))
+ return unittest.defaultTestLoader.loadTestsFromName(__name__)
diff --git a/src/zope/security/tests/test_metaconfigure.py b/src/zope/security/tests/test_metaconfigure.py
index 934d034..3998268 100644
--- a/src/zope/security/tests/test_metaconfigure.py
+++ b/src/zope/security/tests/test_metaconfigure.py
@@ -218,10 +218,9 @@ class ClassDirectiveTests(unittest.TestCase):
from zope.schema import Field
from zope.interface import Interface
from zope.security.protectclass import protectSetAttribute
- from zope.security._compat import _u
class IFoo(Interface):
- bar = Field(_u("Bar"))
- baz = Field(_u("Baz"))
+ bar = Field(u"Bar")
+ baz = Field(u"Baz")
context = DummyZCMLContext()
directive = self._makeOne(context, Foo)
directive.require(context, permission='testing', set_schema=[IFoo])
@@ -258,9 +257,8 @@ class ClassDirectiveTests(unittest.TestCase):
from zope.component.interface import provideInterface
from zope.schema import Field
from zope.interface import Interface
- from zope.security._compat import _u
class IFoo(Interface):
- bar = Field(_u("Bar"), readonly=True)
+ bar = Field(u"Bar", readonly=True)
context = DummyZCMLContext()
directive = self._makeOne(context, Foo)
directive.require(context, permission='testing', set_schema=[IFoo])
@@ -650,11 +648,4 @@ class DummyZCMLContext(object):
def test_suite():
- return unittest.TestSuite([
- unittest.makeSuite(Test_dottedName),
- unittest.makeSuite(ClassDirectiveTests),
- unittest.makeSuite(Test_protectModule),
- unittest.makeSuite(Test_allow),
- unittest.makeSuite(Test_allow),
- ])
-
+ return unittest.defaultTestLoader.loadTestsFromName(__name__)
diff --git a/src/zope/security/tests/test_proxy.py b/src/zope/security/tests/test_proxy.py
index ca4a8a3..62d6a83 100644
--- a/src/zope/security/tests/test_proxy.py
+++ b/src/zope/security/tests/test_proxy.py
@@ -1957,7 +1957,11 @@ class LocationProxySecurityCheckerTests(unittest.TestCase):
import sys
from zope.location.location import LocationProxy
import zope.security
- from zope.security._compat import reload
+ try:
+ from imp import reload
+ except ImportError:
+ reload = reload # Python 2
+
# This attribute is set when zope.security.decorator is imported, to
# show that it will be set too, if zope.security.proxy is imported
# we set it to a different value at first:
diff --git a/src/zope/security/tests/test_zcml_functest.py b/src/zope/security/tests/test_zcml_functest.py
index 5f79fae..b932734 100644
--- a/src/zope/security/tests/test_zcml_functest.py
+++ b/src/zope/security/tests/test_zcml_functest.py
@@ -14,24 +14,19 @@
"""Directives Tests
"""
import unittest
-
+import io
def _skip_wo_zope_configuration(testfunc):
try:
import zope.configuration.xmlconfig
except ImportError:
- from functools import update_wrapper
- def dummy(self):
- pass
- update_wrapper(dummy, testfunc)
- return dummy
+ return unittest.skip("No zope.configuration")(testfunc)
else:
return testfunc
def configfile(s):
- from zope.security._compat import StringIO
- return StringIO("""<configure
+ return io.StringIO(u"""<configure
xmlns='http://namespaces.zope.org/zope'
i18n_domain='zope'>
%s
@@ -270,11 +265,10 @@ class Context(object):
self.actions += ((discriminator, callable, args), )
def __repr__(self):
- from zope.security._compat import StringIO
import re
import pprint
atre = re.compile(' at [0-9a-fA-Fx]+')
- stream = StringIO()
+ stream = io.StringIO() if bytes is not str else io.BytesIO()
pprinter = pprint.PrettyPrinter(stream=stream, width=60)
pprinter.pprint(self.actions)
r = stream.getvalue()
@@ -339,19 +333,18 @@ def _pfx(name):
return module.__name__ + '.' + name
def defineDirectives():
- from zope.security._compat import StringIO
from zope.configuration.xmlconfig import XMLConfig
from zope.configuration.xmlconfig import xmlconfig
import zope.security
XMLConfig('meta.zcml', zope.security)()
- xmlconfig(StringIO("""<configure
+ xmlconfig(io.StringIO(u"""<configure
xmlns='http://namespaces.zope.org/zope'
i18n_domain='zope'>
<permission id="zope.Extravagant" title="extravagant" />
<permission id="zope.Paltry" title="paltry" />
</configure>"""))
-NOTSET = []
+NOTSET = ()
P1 = "zope.Extravagant"
P2 = "zope.Paltry"
@@ -655,19 +648,19 @@ class TestRequireDirective(unittest.TestCase):
def apply_declaration(declaration):
'''Apply the xmlconfig machinery.'''
- from zope.security._compat import StringIO
from zope.configuration.xmlconfig import xmlconfig
- return xmlconfig(StringIO(declaration))
+ if isinstance(declaration, bytes):
+ declaration = declaration.decode("utf-8")
+ return xmlconfig(io.StringIO(declaration))
@_skip_wo_zope_configuration
def make_dummy():
from zope.interface import Interface
import zope.security.zcml
- from zope.security._compat import _u
global IDummy
class IDummy(Interface):
- perm = zope.security.zcml.Permission(title=_u(''))
+ perm = zope.security.zcml.Permission(title=u'')
perms = []
@@ -706,11 +699,4 @@ class DirectivesTest(unittest.TestCase):
def test_suite():
-
- return unittest.TestSuite((
- unittest.makeSuite(TestClassDirective),
- unittest.makeSuite(TestFactorySubdirective),
- unittest.makeSuite(TestFactoryDirective),
- unittest.makeSuite(TestRequireDirective),
- unittest.makeSuite(DirectivesTest),
- ))
+ return unittest.defaultTestLoader.loadTestsFromName(__name__)
diff --git a/src/zope/security/zcml.py b/src/zope/security/zcml.py
index 4198405..8504321 100644
--- a/src/zope/security/zcml.py
+++ b/src/zope/security/zcml.py
@@ -24,7 +24,6 @@ from zope.schema.interfaces import IFromUnicode
from zope.security.permission import checkPermission
from zope.security.management import setSecurityPolicy
-from zope.security._compat import _u
@implementer(IFromUnicode)
class Permission(Id):
@@ -42,9 +41,9 @@ class Permission(Id):
if value != 'zope.Public':
self.context.action(
- discriminator = None,
- callable = checkPermission,
- args = (None, value),
+ discriminator=None,
+ callable=checkPermission,
+ args=(None, value),
# Delay execution till end. This is an
# optimization. We don't want to intersperse utility
@@ -53,39 +52,40 @@ class Permission(Id):
# utility definition, as extensive caches have to be
# rebuilt.
order=9999999,
- )
+ )
class ISecurityPolicyDirective(Interface):
"""Defines the security policy that will be used for Zope."""
component = GlobalObject(
- title=_u("Component"),
- description=_u("Pointer to the object that will handle the security."),
+ title=u"Component",
+ description=u"Pointer to the object that will handle the security.",
required=True)
def securityPolicy(_context, component):
_context.action(
- discriminator = 'defaultPolicy',
- callable = setSecurityPolicy,
- args = (component,) )
+ discriminator='defaultPolicy',
+ callable=setSecurityPolicy,
+ args=(component,)
+ )
class IPermissionDirective(Interface):
"""Define a new security object."""
id = Id(
- title=_u("Id"),
- description=_u("Id as which this object will be known and used."),
+ title=u"Id",
+ description=u"Id as which this object will be known and used.",
required=True)
title = MessageID(
- title=_u("Title"),
- description=_u("Provides a title for the object."),
+ title=u"Title",
+ description=u"Provides a title for the object.",
required=True)
description = MessageID(
- title=_u("Description"),
- description=_u("Provides a description for the object."),
+ title=u"Description",
+ description=u"Provides a description for the object.",
required=False)
def permission(_context, id, title, description=''):
@@ -99,13 +99,13 @@ class IRedefinePermission(Interface):
"""Define a permission to replace another permission."""
from_ = Permission(
- title=_u("Original permission"),
- description=_u("Original permission id to redefine."),
+ title=u"Original permission",
+ description=u"Original permission id to redefine.",
required=True)
to = Permission(
- title=_u("Substituted permission"),
- description=_u("Substituted permission id."),
+ title=u"Substituted permission",
+ description=u"Substituted permission id.",
required=True)
def redefinePermission(_context, from_, to):
@@ -113,6 +113,6 @@ def redefinePermission(_context, from_, to):
# check if context has any permission mappings yet
if not hasattr(_context, 'permission_mapping'):
- _context.permission_mapping={}
+ _context.permission_mapping = {}
_context.permission_mapping[from_] = to