From 88f7890531b751f5fd6b30ff54c011e026087e04 Mon Sep 17 00:00:00 2001 From: Chris McDonough Date: Thu, 24 Sep 2009 03:14:08 +0000 Subject: - Minor speedup of ``repoze.bfg.router.Router.__call__``. --- CHANGES.txt | 2 ++ repoze/bfg/router.py | 54 ++++++++++++++++++++++++---------------------------- 2 files changed, 27 insertions(+), 29 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index 80b93ad6d..347d0292f 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -28,6 +28,8 @@ Features - Sped up ``repoze.bfg.traversal.ModelGraphTraverser:__call__`` slightly. +- Minor speedup of ``repoze.bfg.router.Router.__call__``. + Internal -------- diff --git a/repoze/bfg/router.py b/repoze/bfg/router.py index 4d44647be..ec6c5969a 100644 --- a/repoze/bfg/router.py +++ b/repoze/bfg/router.py @@ -69,9 +69,9 @@ class Router(object): """ registry = self.registry logger = self.logger - + manager = self.threadlocal_manager threadlocals = {'registry':registry, 'request':None} - self.threadlocal_manager.push(threadlocals) + manager.push(threadlocals) try: root = self.root_factory(environ) @@ -97,17 +97,6 @@ class Router(object): else: environ['webob.adhoc_attrs'] = tdict - def respond(response, view_name): - registry.has_listeners and registry.notify( - NewResponse(response)) - try: - start_response(response.status, response.headerlist) - return response.app_iter - except AttributeError: - raise ValueError( - 'Non-response object returned from view named %s ' - '(and no renderer): %r' % (view_name, response)) - provides = map(providedBy, (context, request)) view_callable = registry.adapters.lookup( provides, IView, name=view_name, default=None) @@ -125,26 +114,33 @@ class Router(object): else: msg = request.path_info environ['repoze.bfg.message'] = msg - return respond(self.notfound_view(context, request), - '') - - try: - response = view_callable(context, request) - except Unauthorized, why: - msg = why[0] - environ = getattr(request, 'environ', {}) - environ['repoze.bfg.message'] = msg - response = self.forbidden_view(context, request) - except NotFound, why: - msg = why[0] - environ = getattr(request, 'environ', {}) - environ['repoze.bfg.message'] = msg response = self.notfound_view(context, request) + else: + try: + response = view_callable(context, request) + except Unauthorized, why: + msg = why[0] + environ = getattr(request, 'environ', {}) + environ['repoze.bfg.message'] = msg + response = self.forbidden_view(context, request) + except NotFound, why: + msg = why[0] + environ = getattr(request, 'environ', {}) + environ['repoze.bfg.message'] = msg + response = self.notfound_view(context, request) + + registry.has_listeners and registry.notify(NewResponse(response)) - return respond(response, view_name) + try: + start_response(response.status, response.headerlist) + return response.app_iter + except AttributeError: + raise ValueError( + 'Non-response object returned from view named %s ' + '(and no renderer): %r' % (view_name, response)) finally: - self.threadlocal_manager.pop() + manager.pop() def make_app(root_factory, package=None, filename='configure.zcml', authentication_policy=None, authorization_policy=None, -- cgit v1.2.3