diff options
| author | John Anderson <sontek@gmail.com> | 2014-12-26 00:30:25 -0800 |
|---|---|---|
| committer | John Anderson <sontek@gmail.com> | 2014-12-26 00:30:25 -0800 |
| commit | 88c11a8f09d6e9749a705cb62caa945c496e84e9 (patch) | |
| tree | 8d1354934a3dddcaa349b95b3479648bfb07f98d | |
| parent | 731a8e8380bbf9b41298c0417795e68899b91953 (diff) | |
| download | pyramid-88c11a8f09d6e9749a705cb62caa945c496e84e9.tar.gz pyramid-88c11a8f09d6e9749a705cb62caa945c496e84e9.tar.bz2 pyramid-88c11a8f09d6e9749a705cb62caa945c496e84e9.zip | |
Refactored how `ResponseClass` is used so it can be overridden
| -rw-r--r-- | pyramid/renderers.py | 7 | ||||
| -rw-r--r-- | pyramid/request.py | 10 | ||||
| -rw-r--r-- | pyramid/util.py | 21 |
3 files changed, 29 insertions, 9 deletions
diff --git a/pyramid/renderers.py b/pyramid/renderers.py index e647ebacf..3d5390840 100644 --- a/pyramid/renderers.py +++ b/pyramid/renderers.py @@ -10,7 +10,6 @@ from zope.interface.registry import Components from pyramid.interfaces import ( IJSONAdapter, IRendererFactory, - IResponseFactory, IRendererInfo, ) @@ -19,6 +18,8 @@ from pyramid.compat import ( text_type, ) +from pyramid.util import _get_response_factory + from pyramid.decorator import reify from pyramid.events import BeforeRender @@ -448,9 +449,7 @@ class RendererHelper(object): if response is None: # request is None or request is not a pyramid.response.Response registry = self.registry - response_factory = registry.queryUtility(IResponseFactory, - default=Response) - + response_factory = _get_response_factory(registry, request) response = response_factory() if result is not None: diff --git a/pyramid/request.py b/pyramid/request.py index bc2889310..b66b8926c 100644 --- a/pyramid/request.py +++ b/pyramid/request.py @@ -10,7 +10,6 @@ from pyramid.interfaces import ( IRequest, IResponse, ISessionFactory, - IResponseFactory, ) from pyramid.compat import ( @@ -27,7 +26,10 @@ from pyramid.security import ( AuthorizationAPIMixin, ) from pyramid.url import URLMethodsMixin -from pyramid.util import InstancePropertyMixin +from pyramid.util import ( + InstancePropertyMixin, + _get_response_factory, +) class TemplateContext(object): pass @@ -214,9 +216,7 @@ class Request( right" attributes (e.g. by calling ``request.response.set_cookie()``) within a view that uses a renderer. Mutations to this response object will be preserved in the response sent to the client.""" - registry = self.registry - response_factory = registry.queryUtility(IResponseFactory, - default=Response) + response_factory = _get_response_factory(self.registry, self) return response_factory() def is_response(self, ob): diff --git a/pyramid/util.py b/pyramid/util.py index 6de53d559..ee642164a 100644 --- a/pyramid/util.py +++ b/pyramid/util.py @@ -15,6 +15,10 @@ from pyramid.exceptions import ( CyclicDependencyError, ) +from pyramid.interfaces import ( + IResponseFactory, + ) + from pyramid.compat import ( iteritems_, is_nonstr_iter, @@ -25,6 +29,7 @@ from pyramid.compat import ( ) from pyramid.interfaces import IActionInfo +from pyramid.response import Response from pyramid.path import DottedNameResolver as _DottedNameResolver class DottedNameResolver(_DottedNameResolver): @@ -551,3 +556,19 @@ def action_method(wrapped): wrapper.__docobj__ = wrapped return wrapper +def _get_response_factory(registry, request=None): + """ Obtain a :class: `pyramid.response.Response` using the + ``request.ResponseClass`` property if available. + """ + # Request is `None` or does not have a `ResponseClass` + if hasattr(request, 'ResponseClass'): + response_class = request.ResponseClass + else: + response_class = Response + + response_factory = registry.queryUtility( + IResponseFactory, + default=response_class + ) + + return response_factory |
