[Repoze-checkins] r1297 - in repoze.bfg/trunk/repoze/bfg: . tests

Chris McDonough chrism at agendaless.com
Sat Jul 12 06:42:24 EDT 2008


Author: Chris McDonough <chrism at agendaless.com>
Date: Sat Jul 12 06:42:23 2008
New Revision: 1297

Log:
Add explicit viewname logic.


Modified:
   repoze.bfg/trunk/repoze/bfg/tests/test_traversal.py
   repoze.bfg/trunk/repoze/bfg/traversal.py

Modified: repoze.bfg/trunk/repoze/bfg/tests/test_traversal.py
==============================================================================
--- repoze.bfg/trunk/repoze/bfg/tests/test_traversal.py	(original)
+++ repoze.bfg/trunk/repoze/bfg/tests/test_traversal.py	Sat Jul 12 06:42:23 2008
@@ -28,7 +28,7 @@
         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 @@
         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 @@
         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 @@
 
     def __call__(self, environ, name):
         try:
-            return self.context[name]
+            return name, self.context[name]
         except KeyError:
-            return None
+            return name, None

Modified: repoze.bfg/trunk/repoze/bfg/traversal.py
==============================================================================
--- repoze.bfg/trunk/repoze/bfg/traversal.py	(original)
+++ repoze.bfg/trunk/repoze/bfg/traversal.py	Sat Jul 12 06:42:23 2008
@@ -23,12 +23,14 @@
     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 @@
 
         while path:
             segment = path.pop(0)
-            next = step(ob, segment, _marker)
+            segment, next = step(ob, segment, _marker)
             if next is _marker:
                 name = segment
                 break


More information about the Repoze-checkins mailing list