summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris McDonough <chrism@agendaless.com>2009-10-26 13:38:21 +0000
committerChris McDonough <chrism@agendaless.com>2009-10-26 13:38:21 +0000
commit0a0ffe0b01e81e2fd55e92a818187d3b3b294605 (patch)
tree2a5b77b435e343847ed24644c150599b69296916
parent0d13f6596c2cf38a611183e01a7f73173d5d6faa (diff)
downloadpyramid-0a0ffe0b01e81e2fd55e92a818187d3b3b294605.tar.gz
pyramid-0a0ffe0b01e81e2fd55e92a818187d3b3b294605.tar.bz2
pyramid-0a0ffe0b01e81e2fd55e92a818187d3b3b294605.zip
Revert 6873, as it introduces an unnecessary providedBy for each request in the 99% case, and its behavior can be emulated by returning a root object that implements some interface and registering a traverser for that interface.
-rw-r--r--CHANGES.txt4
-rw-r--r--docs/narr/hooks.rst3
-rw-r--r--repoze/bfg/tests/test_router.py40
-rw-r--r--repoze/bfg/traversal.py9
4 files changed, 6 insertions, 50 deletions
diff --git a/CHANGES.txt b/CHANGES.txt
index b112a996a..b4c04304e 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -4,10 +4,6 @@ Next release
Features
--------
-- The root factory may now return an object which implements
- ``ITraverser`` directly. In this case, no adaptation is done before
- traversal.
-
- Add ``path_info`` view configuration predicate.
- ``paster bfgshell`` now supports IPython if it's available for
diff --git a/docs/narr/hooks.rst b/docs/narr/hooks.rst
index 6babeace0..d2020af0d 100644
--- a/docs/narr/hooks.rst
+++ b/docs/narr/hooks.rst
@@ -278,9 +278,6 @@ when the application :term:`root factory` returned an instance of the
``myapp.models.MyRoot`` object. Otherwise it would use the default
:mod:`repoze.bfg` traverser to do traversal.
-Note that the root object may itself implement ``ITraverser`` in which
-case adaptation is skipped.
-
Example implementations of alternate traversers can be found "in the
wild" within `repoze.bfg.traversalwrapper
<http://pypi.python.org/pypi/repoze.bfg.traversalwrapper>`_ and
diff --git a/repoze/bfg/tests/test_router.py b/repoze/bfg/tests/test_router.py
index 6c0497653..13a5bd11a 100644
--- a/repoze/bfg/tests/test_router.py
+++ b/repoze/bfg/tests/test_router.py
@@ -28,9 +28,10 @@ class TestRouter(unittest.TestCase):
settings.update(kw)
self.registry.registerUtility(settings, ISettings)
- def _makeTraverserFactory(self, context, view_name='', subpath=None,
+ def _registerTraverserFactory(self, context, view_name='', subpath=None,
traversed=None, virtual_root=None,
virtual_root_path=None, **kw):
+ from repoze.bfg.interfaces import ITraverser
if virtual_root is None:
virtual_root = context
@@ -41,13 +42,8 @@ class TestRouter(unittest.TestCase):
if virtual_root_path is None:
virtual_root_path = []
- from zope.interface import implements
- from repoze.bfg.interfaces import ITraverser
-
class DummyTraverserFactory:
- implements(ITraverser)
-
- def __init__(self, root=None):
+ def __init__(self, root):
self.root = root
def __call__(self, path):
@@ -61,11 +57,6 @@ class TestRouter(unittest.TestCase):
kw.update(values)
return kw
- return DummyTraverserFactory
-
- def _registerTraverserFactory(self, *args, **kwargs):
- DummyTraverserFactory = self._makeTraverserFactory(*args, **kwargs)
- from repoze.bfg.interfaces import ITraverser
self.registry.registerAdapter(DummyTraverserFactory, (None,),
ITraverser, name='')
@@ -156,31 +147,6 @@ class TestRouter(unittest.TestCase):
self.failIf('debug_notfound' in result[0])
self.assertEqual(len(logger.messages), 0)
- def test_call_traverser_model(self):
- environ = self._makeEnviron()
- from zope.interface import Interface
- class IContext(Interface):
- pass
- context = DummyContext()
- from zope.interface import directlyProvides
- directlyProvides(context, IContext)
- RootFactory = self._makeTraverserFactory(context, view_name='def')
- root = RootFactory()
- self._registerRootFactory(root)
- from repoze.bfg.interfaces import IRequest
- response = DummyResponse()
- response.app_iter = ['Hello world']
- view = DummyView(response)
- self._registerView(view, 'def', IContext, IRequest)
- logger = self._registerLogger()
- router = self._makeOne()
- start_response = DummyStartResponse()
- result = router(environ, start_response)
- self.assertEqual(result, ['Hello world'])
- headers = start_response.headers
- status = start_response.status
- self.assertEqual(status, '200 OK')
-
def test_has_webob_adhoc_attrs(self):
environ = self._makeEnviron()
environ['webob.adhoc_attrs'] = {}
diff --git a/repoze/bfg/traversal.py b/repoze/bfg/traversal.py
index 580225566..11e5ca806 100644
--- a/repoze/bfg/traversal.py
+++ b/repoze/bfg/traversal.py
@@ -273,12 +273,9 @@ def traverse(model, path):
return _traverse(model, {'PATH_INFO':path})
def _traverse(model, environ):
- if ITraverser.providedBy(model):
- traverser = model
- else:
- traverser = queryAdapter(model, ITraverser)
- if traverser is None:
- traverser = ModelGraphTraverser(model)
+ traverser = queryAdapter(model, ITraverser)
+ if traverser is None:
+ traverser = ModelGraphTraverser(model)
result = traverser(environ)
return result