summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris McDonough <chrism@agendaless.com>2009-09-18 22:43:40 +0000
committerChris McDonough <chrism@agendaless.com>2009-09-18 22:43:40 +0000
commit5e829c9e97fe034a8777ecb2b7c4271b24e7151e (patch)
tree35d74e66534d1bbbcd7f90401080a3b94ea792b6
parent189420475f39638765cee8352b8fa393202c6991 (diff)
downloadpyramid-5e829c9e97fe034a8777ecb2b7c4271b24e7151e.tar.gz
pyramid-5e829c9e97fe034a8777ecb2b7c4271b24e7151e.tar.bz2
pyramid-5e829c9e97fe034a8777ecb2b7c4271b24e7151e.zip
Accept a traverser rather than a registry in _traverse.
-rw-r--r--repoze/bfg/includes/configure.zcml4
-rw-r--r--repoze/bfg/router.py5
-rw-r--r--repoze/bfg/tests/test_traversal.py12
-rw-r--r--repoze/bfg/traversal.py11
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 @@
<include file="meta.zcml" />
<adapter
- factory="repoze.bfg.traversal.ModelGraphTraverser"
provides="repoze.bfg.interfaces.ITraverserFactory"
+ factory="repoze.bfg.traversal.ModelGraphTraverser"
for="*"
/>
<adapter
- factory="repoze.bfg.traversal.TraversalContextURL"
provides="repoze.bfg.interfaces.IContextURL"
+ factory="repoze.bfg.traversal.TraversalContextURL"
for="* repoze.bfg.interfaces.IRequest"
/>
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