summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris McDonough <chrism@plope.com>2015-04-06 06:08:43 -0400
committerChris McDonough <chrism@plope.com>2015-04-06 06:08:43 -0400
commit8491964f35f5a3327751eb9dc42c9d6f128c9c22 (patch)
treeecdeac94ac9e57b64a1be1c478b32d33bcd3ad34
parenteb3ac8e33b0fe516fb6cf8d27061eff6dec1afc2 (diff)
downloadpyramid-8491964f35f5a3327751eb9dc42c9d6f128c9c22.tar.gz
pyramid-8491964f35f5a3327751eb9dc42c9d6f128c9c22.tar.bz2
pyramid-8491964f35f5a3327751eb9dc42c9d6f128c9c22.zip
convert render_view_to_response to use _call_view
-rw-r--r--pyramid/request.py1
-rw-r--r--pyramid/testing.py3
-rw-r--r--pyramid/tests/test_config/test_init.py4
-rw-r--r--pyramid/tests/test_config/test_views.py7
-rw-r--r--pyramid/tests/test_view.py9
-rw-r--r--pyramid/view.py59
6 files changed, 54 insertions, 29 deletions
diff --git a/pyramid/request.py b/pyramid/request.py
index 3cbe5d9e3..13b8cd339 100644
--- a/pyramid/request.py
+++ b/pyramid/request.py
@@ -182,6 +182,7 @@ class Request(
exc_info = None
matchdict = None
matched_route = None
+ request_iface = IRequest
ResponseClass = Response
diff --git a/pyramid/testing.py b/pyramid/testing.py
index 667e6af4e..772914f3b 100644
--- a/pyramid/testing.py
+++ b/pyramid/testing.py
@@ -21,7 +21,7 @@ from pyramid.compat import (
from pyramid.config import Configurator
from pyramid.decorator import reify
from pyramid.path import caller_package
-from pyramid.response import Response, _get_response_factory
+from pyramid.response import _get_response_factory
from pyramid.registry import Registry
from pyramid.security import (
@@ -327,6 +327,7 @@ class DummyRequest(
charset = 'UTF-8'
script_name = ''
_registry = None
+ request_iface = IRequest
def __init__(self, params=None, environ=None, headers=None, path='/',
cookies=None, post=None, **kw):
diff --git a/pyramid/tests/test_config/test_init.py b/pyramid/tests/test_config/test_init.py
index ec58e2466..de199d079 100644
--- a/pyramid/tests/test_config/test_init.py
+++ b/pyramid/tests/test_config/test_init.py
@@ -1,5 +1,4 @@
import unittest
-import warnings
import os
@@ -16,6 +15,8 @@ from pyramid.tests.test_config import DummyContext
from pyramid.exceptions import ConfigurationExecutionError
from pyramid.exceptions import ConfigurationConflictError
+from pyramid.interfaces import IRequest
+
class ConfiguratorTests(unittest.TestCase):
def _makeOne(self, *arg, **kw):
from pyramid.config import Configurator
@@ -1845,6 +1846,7 @@ class TestGlobalRegistriesIntegration(unittest.TestCase):
class DummyRequest:
subpath = ()
matchdict = None
+ request_iface = IRequest
def __init__(self, environ=None):
if environ is None:
environ = {}
diff --git a/pyramid/tests/test_config/test_views.py b/pyramid/tests/test_config/test_views.py
index 706d7ff77..b4ad357ff 100644
--- a/pyramid/tests/test_config/test_views.py
+++ b/pyramid/tests/test_config/test_views.py
@@ -4131,7 +4131,11 @@ class DummyRegistry:
self.settings = {}
from zope.interface import implementer
-from pyramid.interfaces import IResponse
+from pyramid.interfaces import (
+ IResponse,
+ IRequest,
+ )
+
@implementer(IResponse)
class DummyResponse(object):
content_type = None
@@ -4141,6 +4145,7 @@ class DummyResponse(object):
class DummyRequest:
subpath = ()
matchdict = None
+ request_iface = IRequest
def __init__(self, environ=None):
if environ is None:
diff --git a/pyramid/tests/test_view.py b/pyramid/tests/test_view.py
index 309fd47e2..ff73a93ab 100644
--- a/pyramid/tests/test_view.py
+++ b/pyramid/tests/test_view.py
@@ -5,6 +5,8 @@ from zope.interface import implementer
from pyramid import testing
+from pyramid.interfaces import IRequest
+
class BaseTest(object):
def setUp(self):
self.config = testing.setUp()
@@ -13,7 +15,6 @@ class BaseTest(object):
testing.tearDown()
def _registerView(self, reg, app, name):
- from pyramid.interfaces import IRequest
from pyramid.interfaces import IViewClassifier
for_ = (IViewClassifier, IRequest, IContext)
from pyramid.interfaces import IView
@@ -32,14 +33,11 @@ class BaseTest(object):
return environ
def _makeRequest(self, **environ):
- from pyramid.interfaces import IRequest
- from zope.interface import directlyProvides
- from webob import Request
+ from pyramid.request import Request
from pyramid.registry import Registry
environ = self._makeEnviron(**environ)
request = Request(environ)
request.registry = Registry()
- directlyProvides(request, IRequest)
return request
def _makeContext(self):
@@ -676,6 +674,7 @@ def make_view(response):
class DummyRequest:
exception = None
+ request_iface = IRequest
def __init__(self, environ=None):
if environ is None:
diff --git a/pyramid/view.py b/pyramid/view.py
index 8565cd875..1ea4e3b47 100644
--- a/pyramid/view.py
+++ b/pyramid/view.py
@@ -11,10 +11,7 @@ from pyramid.interfaces import (
IViewClassifier,
)
-from pyramid.compat import (
- map_,
- decode_path_info,
- )
+from pyramid.compat import decode_path_info
from pyramid.exceptions import PredicateMismatch
@@ -45,24 +42,24 @@ def render_view_to_response(context, request, name='', secure=True):
disallowed.
If ``secure`` is ``False``, no permission checking is done."""
- provides = [IViewClassifier] + map_(providedBy, (request, context))
- try:
- reg = request.registry
- except AttributeError:
- reg = get_current_registry()
- view = reg.adapters.lookup(provides, IView, name=name)
- if view is None:
- return None
- if not secure:
- # the view will have a __call_permissive__ attribute if it's
- # secured; otherwise it won't.
- view = getattr(view, '__call_permissive__', view)
+ registry = getattr(request, 'registry', None)
+ if registry is None:
+ registry = get_current_registry()
+
+ context_iface = providedBy(context)
+
+ response = _call_view(
+ registry,
+ request,
+ context,
+ context_iface,
+ name,
+ secure = secure,
+ )
+
+ return response # NB: might be None
- # if this view is secured, it will raise a Forbidden
- # appropriately if the executing user does not have the proper
- # permission
- return view(context, request)
def render_view_to_iterable(context, request, name='', secure=True):
""" Call the :term:`view callable` configured with a :term:`view
@@ -447,9 +444,17 @@ def _find_views(registry, request_iface, context_iface, view_name):
# hits in steady state.
with registry._lock:
cache[(request_iface, context_iface, view_name)] = views
+
return views
-def _call_view(registry, request, context, context_iface, view_name):
+def _call_view(
+ registry,
+ request,
+ context,
+ context_iface,
+ view_name,
+ secure=True,
+ ):
view_callables = _find_views(
registry,
request.request_iface,
@@ -463,6 +468,18 @@ def _call_view(registry, request, context, context_iface, view_name):
for view_callable in view_callables:
# look for views that meet the predicate criteria
try:
+ if not secure:
+ # the view will have a __call_permissive__ attribute if it's
+ # secured; otherwise it won't.
+ view_callable = getattr(
+ view_callable,
+ '__call_permissive__',
+ view_callable
+ )
+
+ # if this view is secured, it will raise a Forbidden
+ # appropriately if the executing user does not have the proper
+ # permission
response = view_callable(context, request)
return response
except PredicateMismatch as _pme: