From 4876519b264827bee40385d4992d826c03f5eb92 Mon Sep 17 00:00:00 2001 From: Chris McDonough Date: Thu, 24 Sep 2009 02:50:36 +0000 Subject: - Sped up ``repoze.bfg.traversal.ModelGraphTraverser:__call__`` slightly. --- CHANGES.txt | 3 +++ repoze/bfg/traversal.py | 51 +++++++++++++++++++++++++++---------------------- 2 files changed, 31 insertions(+), 23 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index 749c5c081..80b93ad6d 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -25,6 +25,9 @@ Features - Speed up ``repoze.bfg.url.route_url`` slightly. +- Sped up ``repoze.bfg.traversal.ModelGraphTraverser:__call__`` + slightly. + Internal -------- diff --git a/repoze/bfg/traversal.py b/repoze/bfg/traversal.py index 01a5b9321..0e87a0d37 100644 --- a/repoze/bfg/traversal.py +++ b/repoze/bfg/traversal.py @@ -256,7 +256,8 @@ def traverse(model, path): each element in the ``virtual_root_path`` will be Unicode as opposed to a string, and will be URL-decoded. """ - if hasattr(path, '__iter__'): # it's a tuple or some other iterable + + if hasattr(path, '__iter__'): # the traverser factory expects PATH_INFO to be a string, not # unicode and it expects path segments to be utf-8 and # urlencoded (it's the same traverser which accepts PATH_INFO @@ -510,7 +511,8 @@ class ModelGraphTraverser(object): vpath = path vroot_idx = -1 - ob = vroot = self.root + root = self.root + ob = vroot = root if vpath == '/' or (not vpath): # prevent a call to traversal_path if we know it's going @@ -524,39 +526,42 @@ class ModelGraphTraverser(object): vpath_tuple = traversal_path(vpath) for segment in vpath_tuple: if segment[:2] =='@@': - return dict(context=ob, view_name=segment[2:], - subpath=vpath_tuple[i+1:], - traversed=vpath_tuple[:vroot_idx+i+1], - virtual_root=vroot, - virtual_root_path=vroot_tuple, - root=self.root) + return {'context':ob, + 'view_name':segment[2:], + 'subpath':vpath_tuple[i+1:], + 'traversed':vpath_tuple[:vroot_idx+i+1], + 'virtual_root':vroot, + 'virtual_root_path':vroot_tuple, + 'root':root} try: getitem = ob.__getitem__ except AttributeError: - return dict(context=ob, view_name=segment, - subpath=vpath_tuple[i+1:], - traversed=vpath_tuple[:vroot_idx+i+1], - virtual_root=vroot, - virtual_root_path=vroot_tuple, - root=self.root) + return {'context':ob, + 'view_name':segment, + 'subpath':vpath_tuple[i+1:], + 'traversed':vpath_tuple[:vroot_idx+i+1], + 'virtual_root':vroot, + 'virtual_root_path':vroot_tuple, + 'root':root} try: next = getitem(segment) except KeyError: - return dict(context=ob, view_name=segment, - subpath=vpath_tuple[i+1:], - traversed=vpath_tuple[:vroot_idx+i+1], - virtual_root=vroot, - virtual_root_path=vroot_tuple, - root=self.root) + return {'context':ob, + 'view_name':segment, + 'subpath':vpath_tuple[i+1:], + 'traversed':vpath_tuple[:vroot_idx+i+1], + 'virtual_root':vroot, + 'virtual_root_path':vroot_tuple, + 'root':root} if i == vroot_idx: vroot = next ob = next i += 1 - return dict(context=ob, view_name=u'', subpath=subpath, - traversed=vpath_tuple, virtual_root=vroot, - virtual_root_path=vroot_tuple, root=self.root) + return {'context':ob, 'view_name':u'', 'subpath':subpath, + 'traversed':vpath_tuple, 'virtual_root':vroot, + 'virtual_root_path':vroot_tuple, 'root':root} class TraversalContextURL(object): """ The IContextURL adapter used to generate URLs for a context -- cgit v1.2.3