From 5e829c9e97fe034a8777ecb2b7c4271b24e7151e Mon Sep 17 00:00:00 2001 From: Chris McDonough Date: Fri, 18 Sep 2009 22:43:40 +0000 Subject: Accept a traverser rather than a registry in _traverse. --- repoze/bfg/includes/configure.zcml | 4 ++-- repoze/bfg/router.py | 5 +++-- repoze/bfg/tests/test_traversal.py | 12 +++++------- repoze/bfg/traversal.py | 11 +++++------ 4 files changed, 15 insertions(+), 17 deletions(-) diff --git a/repoze/bfg/includes/configure.zcml b/repoze/bfg/includes/configure.zcml index 60119b2c9..9a110d143 100644 --- a/repoze/bfg/includes/configure.zcml +++ b/repoze/bfg/includes/configure.zcml @@ -7,14 +7,14 @@ diff --git a/repoze/bfg/router.py b/repoze/bfg/router.py index 49ffcbf6d..4ee0f5215 100644 --- a/repoze/bfg/router.py +++ b/repoze/bfg/router.py @@ -16,6 +16,7 @@ from repoze.bfg.interfaces import IRootFactory from repoze.bfg.interfaces import IRouter from repoze.bfg.interfaces import IRoutesMapper from repoze.bfg.interfaces import ISettings +from repoze.bfg.interfaces import ITraverserFactory from repoze.bfg.interfaces import IView from repoze.bfg.authorization import ACLAuthorizationPolicy @@ -78,8 +79,8 @@ class Router(object): request = request_factory(environ) threadlocals['request'] = request registry.has_listeners and registry.notify(NewRequest(request)) - - tdict = _traverse(root, environ, registry) + traverser = registry.getAdapter(root, ITraverserFactory) + tdict = _traverse(root, environ, traverser=traverser) if '_deprecation_warning' in tdict: warning = tdict.pop('_deprecation_warning') if not warning in self.traverser_warned: diff --git a/repoze/bfg/tests/test_traversal.py b/repoze/bfg/tests/test_traversal.py index 3041a271c..7c1acdacd 100644 --- a/repoze/bfg/tests/test_traversal.py +++ b/repoze/bfg/tests/test_traversal.py @@ -971,14 +971,12 @@ class UnderTraverseTests(unittest.TestCase): result = self._callFUT(context, None) self.assertEqual(result, {}) - def test_withregistry(self): - from zope.component import getSiteManager - registry = getSiteManager() - traverser = make_traverser({}) - self._registerTraverserFactory(traverser) + def test_with_traverser(self): + def traverser(environ): + return {'a':'1'} context = DummyContext() - result = self._callFUT(context, None, registry) - self.assertEqual(result, {}) + result = self._callFUT(context, None, traverser) + self.assertEqual(result, {'a':'1'}) def test_issixtuple(self): traverser = make_traverser((1,2,3,4,5,6)) diff --git a/repoze/bfg/traversal.py b/repoze/bfg/traversal.py index dbc9ae709..157a9aac7 100644 --- a/repoze/bfg/traversal.py +++ b/repoze/bfg/traversal.py @@ -270,15 +270,14 @@ def traverse(model, path): return _traverse(model, {'PATH_INFO':path}) -def _traverse(model, environ, registry=None): - if registry is None: +def _traverse(model, environ, traverser=None): + if traverser is None: traverser = ITraverserFactory(model) - else: - # for speed - traverser = registry.getAdapter(model, ITraverserFactory) + result = traverser(environ) - deprecation_warning = None + if result.__class__ is not dict: # isinstance slightly slower + deprecation_warning = None try: # b/w compat for 6-arg returning ITraversers (0.7.1 til 0.8a7) ctx, view_name, subpath, traversed, vroot, vroot_path = result -- cgit v1.2.3