From 281a7a8661f00e7a5ff61f3a8eda5cbe92665421 Mon Sep 17 00:00:00 2001 From: Chris McDonough Date: Tue, 22 Jul 2008 06:40:52 +0000 Subject: Provide the entire environment to the traverser (in anticipation of having e.g. Routes traverser). --- repoze/bfg/router.py | 3 +-- repoze/bfg/tests/test_traversal.py | 23 +++++++++++++++++------ repoze/bfg/traversal.py | 5 +++-- 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 = '' -- cgit v1.2.3