summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris McDonough <chrism@agendaless.com>2009-01-28 05:42:41 +0000
committerChris McDonough <chrism@agendaless.com>2009-01-28 05:42:41 +0000
commit70cc2047b8bb358a8418c11ec0d39d09120ffd3c (patch)
tree99eb947cb138313a915a1611cecff0d88189e8a2
parent3bfa35586381fc808f455696837c9fe0ebc0a0ca (diff)
downloadpyramid-70cc2047b8bb358a8418c11ec0d39d09120ffd3c.tar.gz
pyramid-70cc2047b8bb358a8418c11ec0d39d09120ffd3c.tar.bz2
pyramid-70cc2047b8bb358a8418c11ec0d39d09120ffd3c.zip
Micro-optimize. _step and locatable are gone, sorry David and Malthe. On the bright side, there's nothing left to take out, so feel free to subclass now. ;-)
-rw-r--r--repoze/bfg/traversal.py40
1 files changed, 15 insertions, 25 deletions
diff --git a/repoze/bfg/traversal.py b/repoze/bfg/traversal.py
index 4f1ffb60d..4c9f5dfb2 100644
--- a/repoze/bfg/traversal.py
+++ b/repoze/bfg/traversal.py
@@ -222,12 +222,6 @@ class ModelGraphTraverser(object):
def __init__(self, root):
self.root = root
- @property
- def locatable(self):
- """ Backwards compatibility for Malthe and David, even though
- they're not supposed to be using this ;-)"""
- return ILocation.providedBy(self.root)
-
def __call__(self, environ, _marker=_marker):
try:
path = environ['PATH_INFO']
@@ -239,34 +233,30 @@ class ModelGraphTraverser(object):
except KeyError:
pass
- path = list(traversal_path(path))
- step = self._step
+ path = traversal_path(path)
ob = self.root
name = ''
locatable = ILocation.providedBy(ob)
- while path:
- segment = path.pop(0)
- segment, next = step(ob, segment, _marker)
- if next is _marker:
- name = segment
- break
+ i = 1
+ for segment in path:
+ if segment[:2] =='@@':
+ return ob, segment[2:], list(path[i:])
+ try:
+ getitem = ob.__getitem__
+ except AttributeError:
+ return ob, segment, list(path[i:])
+ try:
+ next = getitem(segment)
+ except KeyError:
+ return ob, segment, list(path[i:])
if locatable and (not ILocation.providedBy(next)):
next = LocationProxy(next, ob, segment)
ob = next
+ i += 1
- return ob, name, path
-
- def _step(self, ob, name, default):
- if name.startswith('@@'):
- return name[2:], default
- if not hasattr(ob, '__getitem__'):
- return name, default
- try:
- return name, ob[name]
- except KeyError:
- return name, default
+ return ob, '', []
class TraversalContextURL(object):
""" The IContextURL adapter used to generate URLs for a context