summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris McDonough <chrism@plope.com>2011-07-23 01:11:41 -0400
committerChris McDonough <chrism@plope.com>2011-07-23 01:11:41 -0400
commit070bfdbaa6f3cffbda3a0bfe86534e24ea01142c (patch)
tree076f9d9c1824945a81993374d6f8ce8e5ab054db
parent16b93e024e4c16e5684186fa34be2485de1e96ee (diff)
downloadpyramid-070bfdbaa6f3cffbda3a0bfe86534e24ea01142c.tar.gz
pyramid-070bfdbaa6f3cffbda3a0bfe86534e24ea01142c.tar.bz2
pyramid-070bfdbaa6f3cffbda3a0bfe86534e24ea01142c.zip
first cut
-rw-r--r--pyramid/request.py14
-rw-r--r--pyramid/router.py8
2 files changed, 22 insertions, 0 deletions
diff --git a/pyramid/request.py b/pyramid/request.py
index 8df204681..605b4b061 100644
--- a/pyramid/request.py
+++ b/pyramid/request.py
@@ -203,6 +203,7 @@ class Request(BaseRequest, DeprecatedRequestMethods):
implements(IRequest)
response_callbacks = ()
finished_callbacks = ()
+ view_wrappers = ()
exception = None
matchdict = None
matched_route = None
@@ -212,6 +213,19 @@ class Request(BaseRequest, DeprecatedRequestMethods):
""" Template context (for Pylons apps) """
return TemplateContext()
+ def add_view_wrapper(self, wrapper):
+ """ Add a view wrapper """
+ wrappers = self.view_wrappers
+ if not wrappers:
+ wrappers = []
+ wrappers.append(wrapper)
+ self.view_wrappers = wrappers
+
+ def _wrap_view(self, view, is_exc_view=False):
+ for wrapper in self.view_wrappers:
+ view = wrapper(view, is_exc_view)
+ return view
+
def add_response_callback(self, callback):
"""
Add a callback to the set of callbacks to be called by the
diff --git a/pyramid/router.py b/pyramid/router.py
index 0a92b5cd5..b11ebc7eb 100644
--- a/pyramid/router.py
+++ b/pyramid/router.py
@@ -141,6 +141,11 @@ class Router(object):
(IViewClassifier, request_iface, context_iface),
IView, name=view_name, default=None)
+ # if there were any view wrappers set on the current
+ # request, use them to wrap the view
+ if request.view_wrappers:
+ view_callable = request._wrap_view(view_callable)
+
# invoke the view callable
if view_callable is None:
if self.debug_notfound:
@@ -178,6 +183,9 @@ class Router(object):
if view_callable is None:
raise
+ if request.view_wrappers:
+ view_callable = request._wrap_view(view_callable, True)
+
response = view_callable(why, request)
has_listeners and notify(NewResponse(request, response))