diff options
| author | Chris McDonough <chrism@plope.com> | 2011-07-23 01:11:41 -0400 |
|---|---|---|
| committer | Chris McDonough <chrism@plope.com> | 2011-07-23 01:11:41 -0400 |
| commit | 070bfdbaa6f3cffbda3a0bfe86534e24ea01142c (patch) | |
| tree | 076f9d9c1824945a81993374d6f8ce8e5ab054db | |
| parent | 16b93e024e4c16e5684186fa34be2485de1e96ee (diff) | |
| download | pyramid-070bfdbaa6f3cffbda3a0bfe86534e24ea01142c.tar.gz pyramid-070bfdbaa6f3cffbda3a0bfe86534e24ea01142c.tar.bz2 pyramid-070bfdbaa6f3cffbda3a0bfe86534e24ea01142c.zip | |
first cut
| -rw-r--r-- | pyramid/request.py | 14 | ||||
| -rw-r--r-- | pyramid/router.py | 8 |
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)) |
