summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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