added ensure_ascii flag to JSONRenderer. UnicodeJSONRenderer now simply turns this to false

This commit is contained in:
Ben Lapid 2013-04-14 00:40:22 +03:00
parent 78e572f9bf
commit 94c9e82f4f

View File

@ -48,6 +48,7 @@ class JSONRenderer(BaseRenderer):
media_type = 'application/json' media_type = 'application/json'
format = 'json' format = 'json'
encoder_class = encoders.JSONEncoder encoder_class = encoders.JSONEncoder
ensure_ascii = True
def render(self, data, accepted_media_type=None, renderer_context=None): def render(self, data, accepted_media_type=None, renderer_context=None):
""" """
@ -71,7 +72,7 @@ class JSONRenderer(BaseRenderer):
except (ValueError, TypeError): except (ValueError, TypeError):
indent = None indent = None
return json.dumps(data, cls=self.encoder_class, indent=indent) return json.dumps(data, cls=self.encoder_class, indent=indent, ensure_ascii=self.ensure_ascii)
class JSONPRenderer(JSONRenderer): class JSONPRenderer(JSONRenderer):
@ -546,34 +547,4 @@ class BrowsableAPIUnicodeRenderer(BrowsableAPIRenderer):
class UnicodeJSONRenderer(BaseRenderer): class UnicodeJSONRenderer(BaseRenderer):
""" ensure_ascii = False
Renderer which serializes to json.
"""
media_type = 'application/json'
format = 'json'
encoder_class = encoders.JSONEncoder
def render(self, data, accepted_media_type=None, renderer_context=None):
"""
Render `obj` into json.
"""
if data is None:
return ''
# If 'indent' is provided in the context, then pretty print the result.
# E.g. If we're being called by the BrowseableAPIRenderer.
renderer_context = renderer_context or {}
indent = renderer_context.get('indent', None)
if accepted_media_type:
# If the media type looks like 'application/json; indent=4',
# then pretty print the result.
base_media_type, params = parse_header(accepted_media_type.encode('ascii'))
indent = params.get('indent', indent)
try:
indent = max(min(int(indent), 8), 0)
except (ValueError, TypeError):
indent = None
return json.dumps(data, cls=self.encoder_class, indent=indent, ensure_ascii=False)