summaryrefslogtreecommitdiff
path: root/repoze/bfg/router.py
diff options
context:
space:
mode:
Diffstat (limited to 'repoze/bfg/router.py')
-rw-r--r--repoze/bfg/router.py117
1 files changed, 62 insertions, 55 deletions
diff --git a/repoze/bfg/router.py b/repoze/bfg/router.py
index 622a8870b..ffbd853dc 100644
--- a/repoze/bfg/router.py
+++ b/repoze/bfg/router.py
@@ -48,62 +48,69 @@ class Router(object):
'view' code based on registrations within the application
registry; call ``start_response`` and return an iterable.
"""
- registry_manager.set(self.registry)
- request = Request(environ)
- directlyProvides(request, IRequest)
- dispatch(NewRequest(request))
-
- root_factory = getUtility(IRootFactory)
- root = root_factory(environ)
- traverser = getAdapter(root, ITraverserFactory)
- context, view_name, subpath = traverser(environ)
-
- request.root = root
- request.context = context
- request.view_name = view_name
- request.subpath = subpath
-
- permitted = view_execution_permitted(context, request, view_name)
-
- settings = queryUtility(ISettings)
- debug_authorization = settings and settings.debug_authorization
-
- if debug_authorization:
- logger = queryUtility(ILogger, 'repoze.bfg.debug')
- logger and logger.debug(
- 'debug_authorization of url %s (view name %r against context '
- '%r): %s' % (request.url, view_name, context, permitted.msg)
- )
- if not permitted:
+ registry_manager.push(self.registry)
+
+ try:
+ request = Request(environ)
+ directlyProvides(request, IRequest)
+ dispatch(NewRequest(request))
+
+ root_factory = getUtility(IRootFactory)
+ root = root_factory(environ)
+ traverser = getAdapter(root, ITraverserFactory)
+ context, view_name, subpath = traverser(environ)
+
+ request.root = root
+ request.context = context
+ request.view_name = view_name
+ request.subpath = subpath
+
+ permitted = view_execution_permitted(context, request, view_name)
+
+ settings = queryUtility(ISettings)
+ debug_authorization = settings and settings.debug_authorization
+
if debug_authorization:
- msg = permitted.msg
- else:
- msg = 'Unauthorized: failed security policy check'
- app = HTTPUnauthorized(escape(msg))
- return app(environ, start_response)
-
- response = render_view_to_response(context, request, view_name,
- secure=False)
-
- if response is None:
- debug_notfound = settings and settings.debug_notfound
- if debug_notfound:
logger = queryUtility(ILogger, 'repoze.bfg.debug')
- msg = (
- 'debug_notfound of url %s; path_info: %r, context: %r, '
- 'view_name: %r, subpath: %r' % (
- request.url, request.path_info, context, view_name, subpath)
+ logger and logger.debug(
+ 'debug_authorization of url %s (view name %r against '
+ 'context %r): %s' % (
+ request.url, view_name, context, permitted.msg)
)
- logger and logger.debug(msg)
- else:
- msg = request.url
- app = HTTPNotFound(escape(msg))
- return app(environ, start_response)
-
- dispatch(NewResponse(response))
-
- start_response(response.status, response.headerlist)
- return response.app_iter
+ if not permitted:
+ if debug_authorization:
+ msg = permitted.msg
+ else:
+ msg = 'Unauthorized: failed security policy check'
+ app = HTTPUnauthorized(escape(msg))
+ return app(environ, start_response)
+
+ response = render_view_to_response(context, request, view_name,
+ secure=False)
+
+ if response is None:
+ debug_notfound = settings and settings.debug_notfound
+ if debug_notfound:
+ logger = queryUtility(ILogger, 'repoze.bfg.debug')
+ msg = (
+ 'debug_notfound of url %s; path_info: %r, context: %r, '
+ 'view_name: %r, subpath: %r' % (
+ request.url, request.path_info, context, view_name,
+ subpath)
+ )
+ logger and logger.debug(msg)
+ else:
+ msg = request.url
+ app = HTTPNotFound(escape(msg))
+ return app(environ, start_response)
+
+ dispatch(NewResponse(response))
+
+ start_response(response.status, response.headerlist)
+ return response.app_iter
+
+ finally:
+ registry_manager.pop()
def make_app(root_factory, package=None, filename='configure.zcml',
options=None):
@@ -130,10 +137,10 @@ def make_app(root_factory, package=None, filename='configure.zcml',
app = Router(registry)
try:
- registry_manager.set(registry)
+ registry_manager.push(registry)
dispatch(WSGIApplicationCreatedEvent(app))
finally:
- registry_manager.clear()
+ registry_manager.pop()
return app