From 823a20e8892f1d0767a8f3dd6bb50dcebd0cf709 Mon Sep 17 00:00:00 2001 From: "Kyle T. Edwards" Date: Wed, 13 Jun 2018 11:59:44 -0400 Subject: [PATCH 1/3] update Jsonrenderer Render a null response when `data=None` --- rest_framework/renderers.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/rest_framework/renderers.py b/rest_framework/renderers.py index 14a371852..880d1dc4f 100644 --- a/rest_framework/renderers.py +++ b/rest_framework/renderers.py @@ -88,9 +88,6 @@ class JSONRenderer(BaseRenderer): """ Render `data` into JSON, returning a bytestring. """ - if data is None: - return bytes() - renderer_context = renderer_context or {} indent = self.get_indent(accepted_media_type, renderer_context) From 3c90356b684220a43bbe4c5e983a313c4b3446ce Mon Sep 17 00:00:00 2001 From: "Kyle T. Edwards" Date: Wed, 13 Jun 2018 14:29:01 -0400 Subject: [PATCH 2/3] account for 204 responses, fix tests --- rest_framework/renderers.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/rest_framework/renderers.py b/rest_framework/renderers.py index 880d1dc4f..fe5f92f7c 100644 --- a/rest_framework/renderers.py +++ b/rest_framework/renderers.py @@ -88,6 +88,13 @@ class JSONRenderer(BaseRenderer): """ Render `data` into JSON, returning a bytestring. """ + response = None + if renderer_context: + response = renderer_context.get('response', None) + + if response is not None and response.status_code == 204: + return b'' + renderer_context = renderer_context or {} indent = self.get_indent(accepted_media_type, renderer_context) From 02be2b68b3cf9318c8e75bf1318bf1d7532f43b3 Mon Sep 17 00:00:00 2001 From: "Kyle T. Edwards" Date: Wed, 13 Jun 2018 14:42:37 -0400 Subject: [PATCH 3/3] test coverage for JSONRenderer --- tests/test_renderers.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/tests/test_renderers.py b/tests/test_renderers.py index 667631f29..014b38754 100644 --- a/tests/test_renderers.py +++ b/tests/test_renderers.py @@ -313,6 +313,17 @@ class JSONRendererTests(TestCase): data = json.loads(ret.decode('utf-8')) self.assertEqual(data, [[o.id, o.name]]) + def test_render_valid_json_when_data_is_none(self): + result = JSONRenderer().render(None) + self.assertEqual(result, b'null') + + def test_render_no_content_on_204_response(self): + context = { + 'response': Response(status=204), + } + result = JSONRenderer().render(None, renderer_context=context) + self.assertEqual(result, b'') + def test_render_dict_abc_obj(self): class Dict(MutableMapping): def __init__(self):