summaryrefslogtreecommitdiff
path: root/repoze/bfg/traversal.py
diff options
context:
space:
mode:
authorMalthe Borch <mborch@gmail.com>2009-10-26 12:27:34 +0000
committerMalthe Borch <mborch@gmail.com>2009-10-26 12:27:34 +0000
commit0d13f6596c2cf38a611183e01a7f73173d5d6faa (patch)
tree91482267042f6403dab57816615e1e35c24b99ce /repoze/bfg/traversal.py
parent077c3c521b1a3cc3b17449f3360f2a0532d50dc7 (diff)
downloadpyramid-0d13f6596c2cf38a611183e01a7f73173d5d6faa.tar.gz
pyramid-0d13f6596c2cf38a611183e01a7f73173d5d6faa.tar.bz2
pyramid-0d13f6596c2cf38a611183e01a7f73173d5d6faa.zip
The root factory may now return an object which implements ``ITraverser`` directly. In this case, no adaptation is done before traversal. This feature is added such that a routes factory can implement its own traversal logic without establishing an artificial context only to get a hook into the traversal machinery.
Diffstat (limited to 'repoze/bfg/traversal.py')
-rw-r--r--repoze/bfg/traversal.py9
1 files changed, 6 insertions, 3 deletions
diff --git a/repoze/bfg/traversal.py b/repoze/bfg/traversal.py
index 11e5ca806..580225566 100644
--- a/repoze/bfg/traversal.py
+++ b/repoze/bfg/traversal.py
@@ -273,9 +273,12 @@ def traverse(model, path):
return _traverse(model, {'PATH_INFO':path})
def _traverse(model, environ):
- traverser = queryAdapter(model, ITraverser)
- if traverser is None:
- traverser = ModelGraphTraverser(model)
+ if ITraverser.providedBy(model):
+ traverser = model
+ else:
+ traverser = queryAdapter(model, ITraverser)
+ if traverser is None:
+ traverser = ModelGraphTraverser(model)
result = traverser(environ)
return result