summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Madden <jason+github@nextthought.com>2018-09-27 05:58:53 -0500
committerGitHub <noreply@github.com>2018-09-27 05:58:53 -0500
commit4083b7bfe2315fd988a5943c9f6237782edb7903 (patch)
tree5223ebc00fcd05ebf46a1f0d55e5a128fa78a270
parent722d905d52436799f10e5781f56d2e2628703a63 (diff)
parent23f7ab3b1b3c948a9d1d1e897ad51016accd4d42 (diff)
downloadzope-configuration-4083b7bfe2315fd988a5943c9f6237782edb7903.tar.gz
Merge pull request #42 from zopefoundation/issue41
Fix multiple leading dots in GlobalObject/Interface.
-rw-r--r--CHANGES.rst4
-rw-r--r--src/zope/configuration/fields.py2
-rw-r--r--src/zope/configuration/tests/test_fields.py15
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