summaryrefslogtreecommitdiff
path: root/pyramid/router.py
diff options
context:
space:
mode:
Diffstat (limited to 'pyramid/router.py')
-rw-r--r--pyramid/router.py44
1 files changed, 12 insertions, 32 deletions
diff --git a/pyramid/router.py b/pyramid/router.py
index ba4f85b18..4054ef52e 100644
--- a/pyramid/router.py
+++ b/pyramid/router.py
@@ -13,8 +13,6 @@ from pyramid.interfaces import (
IRequestFactory,
IRoutesMapper,
ITraverser,
- IView,
- IViewClassifier,
ITweens,
)
@@ -24,9 +22,10 @@ from pyramid.events import (
NewResponse,
)
-from pyramid.exceptions import PredicateMismatch
from pyramid.httpexceptions import HTTPNotFound
from pyramid.request import Request
+from pyramid.view import _call_view
+from pyramid.request import apply_request_extensions
from pyramid.threadlocal import manager
from pyramid.traversal import (
@@ -138,12 +137,15 @@ class Router(object):
# find a view callable
context_iface = providedBy(context)
- view_callable = adapters.lookup(
- (IViewClassifier, request.request_iface, context_iface),
- IView, name=view_name, default=None)
+ response = _call_view(
+ registry,
+ request,
+ context,
+ context_iface,
+ view_name
+ )
- # invoke the view callable
- if view_callable is None:
+ if response is None:
if self.debug_notfound:
msg = (
'debug_notfound of url %s; path_info: %r, '
@@ -158,28 +160,7 @@ class Router(object):
else:
msg = request.path_info
raise HTTPNotFound(msg)
- else:
- try:
- response = view_callable(context, request)
- except PredicateMismatch:
- # look for other views that meet the predicate
- # criteria
- for iface in context_iface.__sro__[1:]:
- previous_view_callable = view_callable
- view_callable = adapters.lookup(
- (IViewClassifier, request.request_iface, iface),
- IView, name=view_name, default=None)
- # intermediate bases may lookup same view_callable
- if view_callable is previous_view_callable:
- continue
- if view_callable is not None:
- try:
- response = view_callable(context, request)
- break
- except PredicateMismatch:
- pass
- else:
- raise
+
return response
def invoke_subrequest(self, request, use_tweens=False):
@@ -213,7 +194,7 @@ class Router(object):
try:
extensions = self.request_extensions
if extensions is not None:
- request._set_extensions(extensions)
+ apply_request_extensions(request, extensions=extensions)
response = handle_request(request)
if request.response_callbacks:
@@ -241,4 +222,3 @@ class Router(object):
request = self.request_factory(environ)
response = self.invoke_subrequest(request, use_tweens=True)
return response(request.environ, start_response)
-