From 160f01439dc3e0d865b2e77bb4a9a7c9e7a16c1a Mon Sep 17 00:00:00 2001 From: Chris McDonough Date: Sun, 20 Sep 2009 02:54:46 +0000 Subject: - Speed: do not register an ITraverserFactory in configure.zcml; instead rely on queryAdapter and a manual default to ModelGraphTraverser. - Speed: do not register an IContextURL in configure.zcml; instead rely on queryAdapter and a manual default to TraversalContextURL. - General speed microimprovements for helloworld benchmark: replace try/excepts with statements which use 'in' keyword. --- repoze/bfg/router.py | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'repoze/bfg/router.py') diff --git a/repoze/bfg/router.py b/repoze/bfg/router.py index 4ee0f5215..f9ecd427d 100644 --- a/repoze/bfg/router.py +++ b/repoze/bfg/router.py @@ -31,6 +31,7 @@ from repoze.bfg.security import Unauthorized from repoze.bfg.settings import Settings from repoze.bfg.settings import get_options from repoze.bfg.threadlocal import manager +from repoze.bfg.traversal import ModelGraphTraverser from repoze.bfg.traversal import _traverse from repoze.bfg.urldispatch import RoutesRootFactory from repoze.bfg.view import NotFound @@ -79,7 +80,9 @@ class Router(object): request = request_factory(environ) threadlocals['request'] = request registry.has_listeners and registry.notify(NewRequest(request)) - traverser = registry.getAdapter(root, ITraverserFactory) + traverser = registry.queryAdapter(root, ITraverserFactory) + if traverser is None: + traverser = ModelGraphTraverser(root) tdict = _traverse(root, environ, traverser=traverser) if '_deprecation_warning' in tdict: warning = tdict.pop('_deprecation_warning') @@ -94,8 +97,11 @@ class Router(object): # bottleneck; since we're sure we're using a # webob.Request, we can go around its back and set stuff # into the environ directly - attrs = environ.setdefault('webob.adhoc_attrs', {}) - attrs.update(tdict) + if 'webob.adhoc_attrs' in environ: + attrs = environ.setdefault('webob.adhoc_attrs', {}) + attrs.update(tdict) + else: + environ['webob.adhoc_attrs'] = tdict def respond(response, view_name): registry.has_listeners and registry.notify( @@ -111,7 +117,6 @@ class Router(object): provides = map(providedBy, (context, request)) view_callable = registry.adapters.lookup( provides, IView, name=view_name, default=None) - if view_callable is None: if self.debug_notfound: -- cgit v1.2.3