summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris McDonough <chrism@agendaless.com>2009-09-24 03:14:08 +0000
committerChris McDonough <chrism@agendaless.com>2009-09-24 03:14:08 +0000
commit88f7890531b751f5fd6b30ff54c011e026087e04 (patch)
treeba3e2f6c687558b483ec7abad5418f38ffc68d78
parent4876519b264827bee40385d4992d826c03f5eb92 (diff)
downloadpyramid-88f7890531b751f5fd6b30ff54c011e026087e04.tar.gz
pyramid-88f7890531b751f5fd6b30ff54c011e026087e04.tar.bz2
pyramid-88f7890531b751f5fd6b30ff54c011e026087e04.zip
- Minor speedup of ``repoze.bfg.router.Router.__call__``.
-rw-r--r--CHANGES.txt2
-rw-r--r--repoze/bfg/router.py54
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,