From c4c9a80880813c7491abc86ad8638040c015b8d2 Mon Sep 17 00:00:00 2001 From: Chris McDonough Date: Mon, 21 Dec 2009 21:52:51 +0000 Subject: - 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. --- CHANGES.txt | 13 +++++++++++++ repoze/bfg/renderers.py | 8 ++++++++ repoze/bfg/tests/test_renderers.py | 26 ++++++++++++++++++++++++++ 3 files changed, 47 insertions(+) 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 -- cgit v1.2.3