summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris McDonough <chrism@agendaless.com>2008-07-22 06:40:52 +0000
committerChris McDonough <chrism@agendaless.com>2008-07-22 06:40:52 +0000
commit281a7a8661f00e7a5ff61f3a8eda5cbe92665421 (patch)
treeb155331fc89356edc77da963cda4acb517d627d9
parentc027e5b1a7e94312841c280182b8a1dbff1119d1 (diff)
downloadpyramid-281a7a8661f00e7a5ff61f3a8eda5cbe92665421.tar.gz
pyramid-281a7a8661f00e7a5ff61f3a8eda5cbe92665421.tar.bz2
pyramid-281a7a8661f00e7a5ff61f3a8eda5cbe92665421.zip
Provide the entire environment to the traverser (in anticipation of having e.g. Routes traverser).
-rw-r--r--repoze/bfg/router.py3
-rw-r--r--repoze/bfg/tests/test_traversal.py23
-rw-r--r--repoze/bfg/traversal.py5
3 files changed, 21 insertions, 10 deletions
diff --git a/repoze/bfg/router.py b/repoze/bfg/router.py
index 231a3560b..d889c15a0 100644
--- a/repoze/bfg/router.py
+++ b/repoze/bfg/router.py
@@ -29,9 +29,8 @@ class Router:
request = Request(environ)
directlyProvides(request, IRequest)
root = self.root_policy(environ)
- path = environ.get('PATH_INFO', '/')
traverser = getMultiAdapter((root, request), ITraverserFactory)
- context, name, subpath = traverser(path)
+ context, name, subpath = traverser(environ)
request.context = context
request.view_name = name
diff --git a/repoze/bfg/tests/test_traversal.py b/repoze/bfg/tests/test_traversal.py
index 659aaaa78..590a06b81 100644
--- a/repoze/bfg/tests/test_traversal.py
+++ b/repoze/bfg/tests/test_traversal.py
@@ -43,6 +43,11 @@ class ModelGraphTraverserTests(unittest.TestCase, PlacelessSetup):
klass = self._getTargetClass()
return klass(*arg, **kw)
+ def _getEnviron(self, **kw):
+ environ = {}
+ environ.update(kw)
+ return environ
+
def test_class_conforms_to_IPublishTraverser(self):
from zope.interface.verify import verifyClass
from repoze.bfg.interfaces import ITraverser
@@ -58,7 +63,8 @@ class ModelGraphTraverserTests(unittest.TestCase, PlacelessSetup):
def test_call_pathel_with_no_getitem(self):
request = DummyRequest()
policy = self._makeOne(None, request)
- ctx, name, subpath = policy('/foo/bar')
+ environ = self._getEnviron(PATH_INFO='/foo/bar')
+ ctx, name, subpath = policy(environ)
self.assertEqual(ctx, None)
self.assertEqual(name, 'foo')
self.assertEqual(subpath, ['bar'])
@@ -67,7 +73,8 @@ class ModelGraphTraverserTests(unittest.TestCase, PlacelessSetup):
root = DummyContext()
request = DummyRequest()
policy = self._makeOne(root, request)
- ctx, name, subpath = policy('')
+ environ = self._getEnviron(PATH_INFO='')
+ ctx, name, subpath = policy(environ)
self.assertEqual(ctx, root)
self.assertEqual(name, '')
self.assertEqual(subpath, [])
@@ -77,7 +84,8 @@ class ModelGraphTraverserTests(unittest.TestCase, PlacelessSetup):
root = DummyContext(foo)
request = DummyRequest()
policy = self._makeOne(root, request)
- ctx, name, subpath = policy('/foo/bar')
+ environ = self._getEnviron(PATH_INFO='/foo/bar')
+ ctx, name, subpath = policy(environ)
self.assertEqual(ctx, foo)
self.assertEqual(name, 'bar')
self.assertEqual(subpath, [])
@@ -87,7 +95,8 @@ class ModelGraphTraverserTests(unittest.TestCase, PlacelessSetup):
request = DummyRequest()
root = DummyContext(foo)
policy = self._makeOne(root, request)
- ctx, name, subpath = policy('/foo/bar/baz/buz')
+ environ = self._getEnviron(PATH_INFO='/foo/bar/baz/buz')
+ ctx, name, subpath = policy(environ)
self.assertEqual(ctx, foo)
self.assertEqual(name, 'bar')
self.assertEqual(subpath, ['baz', 'buz'])
@@ -97,7 +106,8 @@ class ModelGraphTraverserTests(unittest.TestCase, PlacelessSetup):
request = DummyRequest()
root = DummyContext(foo)
policy = self._makeOne(root, request)
- ctx, name, subpath = policy('/@@foo')
+ environ = self._getEnviron(PATH_INFO='/@@foo')
+ ctx, name, subpath = policy(environ)
self.assertEqual(ctx, root)
self.assertEqual(name, 'foo')
self.assertEqual(subpath, [])
@@ -117,7 +127,8 @@ class ModelGraphTraverserTests(unittest.TestCase, PlacelessSetup):
bar.__name__ = 'bar'
bar.__parent__ = foo
policy = self._makeOne(root, request)
- ctx, name, subpath = policy('/foo/bar/baz')
+ environ = self._getEnviron(PATH_INFO='/foo/bar/baz')
+ ctx, name, subpath = policy(environ)
self.assertEqual(ctx, baz)
self.assertEqual(name, '')
self.assertEqual(subpath, [])
diff --git a/repoze/bfg/traversal.py b/repoze/bfg/traversal.py
index 6354c28de..d0e140375 100644
--- a/repoze/bfg/traversal.py
+++ b/repoze/bfg/traversal.py
@@ -45,9 +45,10 @@ class ModelGraphTraverser(object):
self.locatable = ILocation.providedBy(root)
self.request = request
- def __call__(self, path):
- root = self.root
+ def __call__(self, environ):
+ path = environ.get('PATH_INFO', '/')
path = split_path(path)
+ root = self.root
ob = self.root
name = ''