summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris McDonough <chrism@agendaless.com>2009-12-21 21:52:51 +0000
committerChris McDonough <chrism@agendaless.com>2009-12-21 21:52:51 +0000
commitc4c9a80880813c7491abc86ad8638040c015b8d2 (patch)
tree0f2c58da91aec1d35ff3cd3d4b131340150b1ad0
parentcc4505096f64e3d3d8c7791208459a2f12fe8f97 (diff)
downloadpyramid-c4c9a80880813c7491abc86ad8638040c015b8d2.tar.gz
pyramid-c4c9a80880813c7491abc86ad8638040c015b8d2.tar.bz2
pyramid-c4c9a80880813c7491abc86ad8638040c015b8d2.zip
- The ``json`` renderer failed to set the response content type to
``application/json``. It now does, by setting ``request.response_content_type`` unless this attribute is already set. - The ``string`` renderer failed to set the response content type to ``text/plain``. It now does, by setting ``request.response_content_type`` unless this attribute is already set.
-rw-r--r--CHANGES.txt13
-rw-r--r--repoze/bfg/renderers.py8
-rw-r--r--repoze/bfg/tests/test_renderers.py26
3 files changed, 47 insertions, 0 deletions
diff --git a/CHANGES.txt b/CHANGES.txt
index 00f73fb4b..62fa20e4b 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -6,6 +6,19 @@ Features
- Add a ``**kw`` arg to the ``Configurator.add_settings`` API.
+Bug Fixes
+---------
+
+- The ``json`` renderer failed to set the response content type to
+ ``application/json``. It now does, by setting
+ ``request.response_content_type`` unless this attribute is already
+ set.
+
+- The ``string`` renderer failed to set the response content type to
+ ``text/plain``. It now does, by setting
+ ``request.response_content_type`` unless this attribute is already
+ set.
+
1.2a7 (2009-12-20)
==================
diff --git a/repoze/bfg/renderers.py b/repoze/bfg/renderers.py
index cb01de30c..e937bd2a1 100644
--- a/repoze/bfg/renderers.py
+++ b/repoze/bfg/renderers.py
@@ -12,6 +12,10 @@ from repoze.bfg.threadlocal import get_current_registry
def json_renderer_factory(name):
def _render(value, system):
+ request = system.get('request')
+ if request is not None:
+ if not hasattr(request, 'response_content_type'):
+ request.response_content_type = 'application/json'
return json.dumps(value)
return _render
@@ -19,6 +23,10 @@ def string_renderer_factory(name):
def _render(value, system):
if not isinstance(value, basestring):
value = str(value)
+ request = system.get('request')
+ if request is not None:
+ if not hasattr(request, 'response_content_type'):
+ request.response_content_type = 'text/plain'
return value
return _render
diff --git a/repoze/bfg/tests/test_renderers.py b/repoze/bfg/tests/test_renderers.py
index 687f47906..1f4df3556 100644
--- a/repoze/bfg/tests/test_renderers.py
+++ b/repoze/bfg/tests/test_renderers.py
@@ -150,6 +150,19 @@ class Test_json_renderer_factory(unittest.TestCase):
result = renderer({'a':1}, {})
self.assertEqual(result, '{"a": 1}')
+ def test_with_request_content_type_notset(self):
+ request = testing.DummyRequest()
+ renderer = self._callFUT(None)
+ renderer({'a':1}, {'request':request})
+ self.assertEqual(request.response_content_type, 'application/json')
+
+ def test_with_request_content_type_set(self):
+ request = testing.DummyRequest()
+ request.response_content_type = 'text/mishmash'
+ renderer = self._callFUT(None)
+ renderer({'a':1}, {'request':request})
+ self.assertEqual(request.response_content_type, 'text/mishmash')
+
class Test_string_renderer_factory(unittest.TestCase):
def _callFUT(self, name):
from repoze.bfg.renderers import string_renderer_factory
@@ -173,6 +186,19 @@ class Test_string_renderer_factory(unittest.TestCase):
result = renderer(value, {})
self.assertEqual(result, 'None')
+ def test_with_request_content_type_notset(self):
+ request = testing.DummyRequest()
+ renderer = self._callFUT(None)
+ renderer(None, {'request':request})
+ self.assertEqual(request.response_content_type, 'text/plain')
+
+ def test_with_request_content_type_set(self):
+ request = testing.DummyRequest()
+ request.response_content_type = 'text/mishmash'
+ renderer = self._callFUT(None)
+ renderer(None, {'request':request})
+ self.assertEqual(request.response_content_type, 'text/mishmash')
+
class DummyFactory:
def __init__(self, renderer):
self.renderer = renderer