From 8823e22b7caf3ef72aefaccec9e33f21bb37018c Mon Sep 17 00:00:00 2001 From: Chris McDonough Date: Sat, 12 Jul 2008 10:42:23 +0000 Subject: Add explicit viewname logic. --- repoze/bfg/tests/test_traversal.py | 18 +++++++++++++----- repoze/bfg/traversal.py | 10 ++++++---- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/repoze/bfg/tests/test_traversal.py b/repoze/bfg/tests/test_traversal.py index 115086b8b..b5a2e746d 100644 --- a/repoze/bfg/tests/test_traversal.py +++ b/repoze/bfg/tests/test_traversal.py @@ -28,7 +28,7 @@ class SplitPathTests(unittest.TestCase): self.assertEqual(f('/foo/space%20thing/bar'), ['foo', 'space thing', 'bar']) -class NaivePolicyTests(unittest.TestCase, PlacelessSetup): +class NaivePublishTraverserTests(unittest.TestCase, PlacelessSetup): def setUp(self): PlacelessSetup.setUp(self) @@ -40,8 +40,6 @@ class NaivePolicyTests(unittest.TestCase, PlacelessSetup): return NaivePublishTraverser def _makeOne(self, *arg, **kw): - import zope.component - gsm = zope.component.getGlobalSiteManager() klass = self._getTargetClass() return klass(*arg, **kw) @@ -94,6 +92,16 @@ class NaivePolicyTests(unittest.TestCase, PlacelessSetup): self.assertEqual(name, 'bar') self.assertEqual(subpath, ['baz', 'buz']) + def test_call_with_explicit_viewname(self): + foo = DummyContext() + request = DummyRequest() + root = DummyContext(foo) + policy = self._makeOne(root, request) + ctx, name, subpath = policy('/@@foo') + self.assertEqual(ctx, root) + self.assertEqual(name, 'foo') + self.assertEqual(subpath, []) + class DummyContext: def __init__(self, next=None): self.next = next @@ -112,6 +120,6 @@ class DummyTraverser: def __call__(self, environ, name): try: - return self.context[name] + return name, self.context[name] except KeyError: - return None + return name, None diff --git a/repoze/bfg/traversal.py b/repoze/bfg/traversal.py index 9380b2a0a..521044d5e 100644 --- a/repoze/bfg/traversal.py +++ b/repoze/bfg/traversal.py @@ -23,12 +23,14 @@ def split_path(path): return clean def step(ob, name, default): + if name.startswith('@@'): + return name[2:], default if not hasattr(ob, '__getitem__'): - return default + return name, default try: - return ob[name] + return name, ob[name] except KeyError: - return default + return name, default _marker = () @@ -47,7 +49,7 @@ class NaivePublishTraverser: while path: segment = path.pop(0) - next = step(ob, segment, _marker) + segment, next = step(ob, segment, _marker) if next is _marker: name = segment break -- cgit v1.2.3