summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris McDonough <chrism@agendaless.com>2008-07-12 10:42:23 +0000
committerChris McDonough <chrism@agendaless.com>2008-07-12 10:42:23 +0000
commit8823e22b7caf3ef72aefaccec9e33f21bb37018c (patch)
tree17ea401c33cef31d335c930b9020f614a4173c3f
parent44f05b7b5cb8b00a1d89a7d798c0a399e0c3a7f6 (diff)
downloadpyramid-8823e22b7caf3ef72aefaccec9e33f21bb37018c.tar.gz
pyramid-8823e22b7caf3ef72aefaccec9e33f21bb37018c.tar.bz2
pyramid-8823e22b7caf3ef72aefaccec9e33f21bb37018c.zip
Add explicit viewname logic.
-rw-r--r--repoze/bfg/tests/test_traversal.py18
-rw-r--r--repoze/bfg/traversal.py10
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