Source code for pyramid.tweens
import sys
from pyramid._compat import reraise
from pyramid.httpexceptions import HTTPNotFound
def _error_handler(request, exc):
# NOTE: we do not need to delete exc_info because this function
# should never be in the call stack of the exception
exc_info = sys.exc_info()
try:
response = request.invoke_exception_view(exc_info)
except HTTPNotFound:
# re-raise the original exception as no exception views were
# able to handle the error
reraise(*exc_info)
return response
[docs]
def excview_tween_factory(handler, registry):
"""A :term:`tween` factory which produces a tween that catches an
exception raised by downstream tweens (or the main Pyramid request
handler) and, if possible, converts it into a Response using an
:term:`exception view`.
.. versionchanged:: 1.9
The ``request.response`` will be remain unchanged even if the tween
handles an exception. Previously it was deleted after handling an
exception.
Also, ``request.exception`` and ``request.exc_info`` are only set if
the tween handles an exception and returns a response otherwise they
are left at their original values.
"""
def excview_tween(request):
try:
response = handler(request)
except Exception as exc:
response = _error_handler(request, exc)
return response
return excview_tween
MAIN = 'MAIN'
INGRESS = 'INGRESS'
EXCVIEW = 'pyramid.tweens.excview_tween_factory'