diff options
| author | Chris McDonough <chrism@agendaless.com> | 2009-12-21 21:52:51 +0000 |
|---|---|---|
| committer | Chris McDonough <chrism@agendaless.com> | 2009-12-21 21:52:51 +0000 |
| commit | c4c9a80880813c7491abc86ad8638040c015b8d2 (patch) | |
| tree | 0f2c58da91aec1d35ff3cd3d4b131340150b1ad0 | |
| parent | cc4505096f64e3d3d8c7791208459a2f12fe8f97 (diff) | |
| download | pyramid-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.txt | 13 | ||||
| -rw-r--r-- | repoze/bfg/renderers.py | 8 | ||||
| -rw-r--r-- | repoze/bfg/tests/test_renderers.py | 26 |
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 |
