diff options
author | Jason Madden <jamadden@gmail.com> | 2018-09-26 18:23:53 -0500 |
---|---|---|
committer | Jason Madden <jamadden@gmail.com> | 2018-09-26 18:23:53 -0500 |
commit | 23f7ab3b1b3c948a9d1d1e897ad51016accd4d42 (patch) | |
tree | 5223ebc00fcd05ebf46a1f0d55e5a128fa78a270 | |
parent | 722d905d52436799f10e5781f56d2e2628703a63 (diff) | |
download | zope-configuration-issue41.tar.gz |
Fix multiple leading dots in GlobalObject/Interface.issue41
Fixes #41.
-rw-r--r-- | CHANGES.rst | 4 | ||||
-rw-r--r-- | src/zope/configuration/fields.py | 2 | ||||
-rw-r--r-- | src/zope/configuration/tests/test_fields.py | 15 |
3 files changed, 15 insertions, 6 deletions
diff --git a/CHANGES.rst b/CHANGES.rst index 1a85654..52a1426 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -4,7 +4,9 @@ Changes 4.2.2 (unreleased) ------------------ -- Nothing changed yet. +- Fix ``GlobalObject`` (and ``GlobalInterface``) no longer allowing + multiple leading dots. See `issue 41 + <https://github.com/zopefoundation/zope.configuration/issues/41>`_. 4.2.1 (2018-09-26) diff --git a/src/zope/configuration/fields.py b/src/zope/configuration/fields.py index 70527a5..1730431 100644 --- a/src/zope/configuration/fields.py +++ b/src/zope/configuration/fields.py @@ -80,7 +80,7 @@ class GlobalObject(Field): # package, but not accepted by DottedName. Take care, # though, because a single dot is valid to resolve, but # not valid to pass to DottedName (as an empty string) - to_validate = name[1:] if name.startswith('.') else name + to_validate = name.lstrip('.') if to_validate: self._DOT_VALIDATOR.validate(to_validate) except ValidationError as v: diff --git a/src/zope/configuration/tests/test_fields.py b/src/zope/configuration/tests/test_fields.py index 6964957..baa4023 100644 --- a/src/zope/configuration/tests/test_fields.py +++ b/src/zope/configuration/tests/test_fields.py @@ -95,7 +95,7 @@ class GlobalObjectTests(unittest.TestCase, _ConformsToIFromUnicode): self.assertIs(found, _target) self.assertEqual(context._resolved, 'tried') - def test_fromUnicode_w_resolve_dot(self): + def test_fromUnicode_w_resolve_dots(self): _target = object() class Context(object): _resolved = None @@ -105,9 +105,16 @@ class GlobalObjectTests(unittest.TestCase, _ConformsToIFromUnicode): go = self._makeOne() context = Context() bound = go.bind(context) - found = bound.fromUnicode('.') - self.assertIs(found, _target) - self.assertEqual(context._resolved, '.') + for name in ( + '.', + '..', + '.foo', + '..foo.bar' + ): + __traceback_info__ = name + found = bound.fromUnicode(name) + self.assertIs(found, _target) + self.assertEqual(context._resolved, name) def test_fromUnicode_w_resolve_but_validation_fails(self): from zope.schema import Text |