summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Anderson <sontek@gmail.com>2014-12-26 00:30:25 -0800
committerJohn Anderson <sontek@gmail.com>2014-12-26 00:30:25 -0800
commit88c11a8f09d6e9749a705cb62caa945c496e84e9 (patch)
tree8d1354934a3dddcaa349b95b3479648bfb07f98d
parent731a8e8380bbf9b41298c0417795e68899b91953 (diff)
downloadpyramid-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.py7
-rw-r--r--pyramid/request.py10
-rw-r--r--pyramid/util.py21
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