Michael Merickel
2017-06-18 75c30dfe18b26ca04efae2acbe35052fa0d93ed6
pyramid/router.py
@@ -1,3 +1,4 @@
import sys
from zope.interface import (
    implementer,
    providedBy,
@@ -24,6 +25,7 @@
    BeforeTraversal,
    )
from pyramid.compat import reraise
from pyramid.httpexceptions import HTTPNotFound
from pyramid.request import Request
from pyramid.view import _call_view
@@ -190,13 +192,21 @@
        """
        request.registry = self.registry
        request.invoke_subrequest = self.invoke_subrequest
        return self.invoke_request(
            request,
            _use_tweens=use_tweens,
            _apply_extensions=True,
        )
        extensions = self.request_extensions
        if extensions is not None:
            apply_request_extensions(request, extensions=extensions)
        return self.invoke_request(request, _use_tweens=use_tweens)
    def make_request(self, environ):
        """
        Configure a request object for use by the router.
        The request is created using the configured
        :class:`pyramid.interfaces.IRequestFactory` and will have any
        configured request methods / properties added that were set by
        :meth:`pyramid.config.Configurator.add_request_method`.
        """
        request = self.request_factory(environ)
        request.registry = self.registry
        request.invoke_subrequest = self.invoke_subrequest
@@ -205,8 +215,12 @@
            apply_request_extensions(request, extensions=extensions)
        return request
    def invoke_request(self, request,
                       _use_tweens=True, _apply_extensions=False):
    def invoke_request(self, request, _use_tweens=True):
        """
        Execute a request through the request processing pipeline and
        return the generated response.
        """
        registry = self.registry
        has_listeners = self.registry.has_listeners
        notify = self.registry.notify
@@ -222,9 +236,6 @@
        try:
            try:
                extensions = self.request_extensions
                if _apply_extensions and extensions is not None:
                    apply_request_extensions(request, extensions=extensions)
                response = handle_request(request)
                if request.response_callbacks:
@@ -252,7 +263,15 @@
        response = self.execution_policy(environ, self)
        return response(environ, start_response)
def default_execution_policy(environ, router):
    request = router.make_request(environ)
    return router.invoke_request(request)
    try:
        return router.invoke_request(request)
    except Exception:
        exc_info = sys.exc_info()
        try:
            return request.invoke_exception_view(exc_info)
        except HTTPNotFound:
            reraise(*exc_info)
        finally:
            del exc_info  # avoid local ref cycle