From cd40dcb06500424ef9016913a1a89db0deed8a1f Mon Sep 17 00:00:00 2001 From: Tom Christie Date: Thu, 30 Oct 2014 16:53:12 +0000 Subject: [PATCH] Ensure json.dumps(separators=...) works on both 2.x and 3.x --- rest_framework/compat.py | 9 +++++++++ rest_framework/renderers.py | 6 ++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/rest_framework/compat.py b/rest_framework/compat.py index 4ab23a4da..0201bd830 100644 --- a/rest_framework/compat.py +++ b/rest_framework/compat.py @@ -291,6 +291,15 @@ except ImportError: oauth2_constants = None provider_now = None +# `seperators` argument to `json.dumps()` differs between 2.x and 3.x +# See: http://bugs.python.org/issue22767 +if six.PY3: + SHORT_SEPARATORS = (',', ':') + LONG_SEPARATORS = (', ', ': ') +else: + SHORT_SEPARATORS = (b',', b':') + LONG_SEPARATORS = (b', ', b': ') + # Handle lazy strings across Py2/Py3 from django.utils.functional import Promise diff --git a/rest_framework/renderers.py b/rest_framework/renderers.py index 4dfd0f498..c950b4981 100644 --- a/rest_framework/renderers.py +++ b/rest_framework/renderers.py @@ -18,7 +18,9 @@ from django.test.client import encode_multipart from django.utils import six from django.utils.xmlutils import SimplerXMLGenerator from rest_framework import exceptions, serializers, status, VERSION -from rest_framework.compat import StringIO, smart_text, yaml +from rest_framework.compat import ( + SHORT_SEPARATORS, LONG_SEPARATORS, StringIO, smart_text, yaml +) from rest_framework.exceptions import ParseError from rest_framework.settings import api_settings from rest_framework.request import is_form_media_type, override_method @@ -87,7 +89,7 @@ class JSONRenderer(BaseRenderer): renderer_context = renderer_context or {} indent = self.get_indent(accepted_media_type, renderer_context) - separators = (',', ':') if (indent is None and self.compact) else (', ', ': ') + separators = SHORT_SEPARATORS if (indent is None and self.compact) else LONG_SEPARATORS ret = json.dumps( data, cls=self.encoder_class,