diff options
| author | Chris McDonough <chrism@agendaless.com> | 2009-09-24 03:14:08 +0000 |
|---|---|---|
| committer | Chris McDonough <chrism@agendaless.com> | 2009-09-24 03:14:08 +0000 |
| commit | 88f7890531b751f5fd6b30ff54c011e026087e04 (patch) | |
| tree | ba3e2f6c687558b483ec7abad5418f38ffc68d78 | |
| parent | 4876519b264827bee40385d4992d826c03f5eb92 (diff) | |
| download | pyramid-88f7890531b751f5fd6b30ff54c011e026087e04.tar.gz pyramid-88f7890531b751f5fd6b30ff54c011e026087e04.tar.bz2 pyramid-88f7890531b751f5fd6b30ff54c011e026087e04.zip | |
- Minor speedup of ``repoze.bfg.router.Router.__call__``.
| -rw-r--r-- | CHANGES.txt | 2 | ||||
| -rw-r--r-- | 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), - '<INotFoundView>') - - 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, |
