Merge pull request #405 from taigaio/more-efficient-json-export-generation
Json export generation in a more efficient wayremotes/origin/enhancement/email-actions
commit
72486a3a06
|
@ -80,13 +80,7 @@ class JSONRenderer(BaseRenderer):
|
|||
# See: http://www.ietf.org/rfc/rfc4627.txt
|
||||
# Also: http://lucumr.pocoo.org/2013/7/19/application-mimetypes-and-encodings/
|
||||
|
||||
def render(self, data, accepted_media_type=None, renderer_context=None):
|
||||
"""
|
||||
Render `data` into JSON.
|
||||
"""
|
||||
if data is None:
|
||||
return bytes()
|
||||
|
||||
def _get_indent(self, accepted_media_type, renderer_context):
|
||||
# If "indent" is provided in the context, then pretty print the result.
|
||||
# E.g. If we"re being called by the BrowsableAPIRenderer.
|
||||
renderer_context = renderer_context or {}
|
||||
|
@ -102,6 +96,17 @@ class JSONRenderer(BaseRenderer):
|
|||
except (ValueError, TypeError):
|
||||
indent = None
|
||||
|
||||
return indent
|
||||
|
||||
def render(self, data, accepted_media_type=None, renderer_context=None):
|
||||
"""
|
||||
Render `data` into JSON.
|
||||
"""
|
||||
if data is None:
|
||||
return bytes()
|
||||
|
||||
indent = self._get_indent(accepted_media_type, renderer_context)
|
||||
|
||||
ret = json.dumps(data, cls=self.encoder_class,
|
||||
indent=indent, ensure_ascii=self.ensure_ascii)
|
||||
|
||||
|
@ -113,6 +118,18 @@ class JSONRenderer(BaseRenderer):
|
|||
return bytes(ret.encode("utf-8"))
|
||||
return ret
|
||||
|
||||
def render_to_file(self, data, outputfile, accepted_media_type=None, renderer_context=None):
|
||||
"""
|
||||
Render `data` into a file with JSON format.
|
||||
"""
|
||||
if data is None:
|
||||
return bytes()
|
||||
|
||||
indent = self._get_indent(accepted_media_type, renderer_context)
|
||||
|
||||
ret = json.dump(data, outputfile, cls=self.encoder_class,
|
||||
indent=indent, ensure_ascii=self.ensure_ascii)
|
||||
|
||||
|
||||
class UnicodeJSONRenderer(JSONRenderer):
|
||||
ensure_ascii = False
|
||||
|
@ -610,4 +627,3 @@ class MultiPartRenderer(BaseRenderer):
|
|||
|
||||
def render(self, data, accepted_media_type=None, renderer_context=None):
|
||||
return encode_multipart(self.BOUNDARY, data)
|
||||
|
||||
|
|
|
@ -35,4 +35,5 @@ class Command(BaseCommand):
|
|||
raise CommandError('Project "%s" does not exist' % project_slug)
|
||||
|
||||
data = project_to_dict(project)
|
||||
print(self.renderer.render(data, renderer_context=self.renderer_context).decode('utf-8'))
|
||||
with open('%s.json'%(project_slug), 'w') as outfile:
|
||||
self.renderer.render_to_file(data, outfile, renderer_context=self.renderer_context)
|
||||
|
|
Loading…
Reference in New Issue