Ticket #5423: django_dumpdata_streamed_output_3.diff
File django_dumpdata_streamed_output_3.diff, 6.5 KB (added by , 17 years ago) |
---|
-
django/core/serializers/json.py
4 4 5 5 import datetime 6 6 from django.utils import simplejson 7 from django.utils.simplejson import decoder8 7 from django.core.serializers.python import Serializer as PythonSerializer 9 8 from django.core.serializers.python import Deserializer as PythonDeserializer 10 9 try: … … 22 21 """ 23 22 internal_use_only = False 24 23 24 def start_serialization(self): 25 self._current = None 26 self.json_kwargs = self.options.copy() 27 self.json_kwargs.pop('stream', None) 28 self.json_kwargs.pop('fields', None) 29 self.stream.write("[") 30 25 31 def end_serialization(self): 26 self.options.pop('stream', None) 27 self.options.pop('fields', None) 28 simplejson.dump(self.objects, self.stream, cls=DjangoJSONEncoder, **self.options) 32 if self.options.get("indent"): 33 self.stream.write("\n") 34 self.stream.write("]") 35 if self.options.get("indent"): 36 self.stream.write("\n") 29 37 38 def end_object(self, obj): 39 # self._current has the field data 40 if not self.first: 41 self.stream.write(",") 42 if not self.options.get("indent"): 43 self.stream.write(" ") 44 if self.options.get("indent"): 45 self.stream.write("\n") 46 simplejson.dump(self.get_dump_object(obj), self.stream, 47 cls=DjangoJSONEncoder, **self.json_kwargs) 48 self._current = None 49 30 50 def getvalue(self): 51 # overwrite PythonSerializer.getvalue() with base Serializer.getvalue() 31 52 if callable(getattr(self.stream, 'getvalue', None)): 32 53 return self.stream.getvalue() 33 54 -
django/core/serializers/base.py
36 36 self.selected_fields = options.get("fields") 37 37 38 38 self.start_serialization() 39 self.first = True 39 40 for obj in queryset: 40 41 self.start_object(obj) 41 42 for field in obj._meta.fields: … … 51 52 if self.selected_fields is None or field.attname in self.selected_fields: 52 53 self.handle_m2m_field(obj, field) 53 54 self.end_object(obj) 55 if self.first: 56 self.first = False 54 57 self.end_serialization() 55 58 return self.getvalue() 56 59 … … 59 62 Convert a field's value to a string. 60 63 """ 61 64 if isinstance(field, models.DateTimeField): 62 value = getattr(obj, field.name).strftime("%Y-%m-%d %H:%M:%S") 65 value = getattr(obj, field.name) 66 if value is None: 67 value = "" 68 else: 69 value = value.strftime("%Y-%m-%d %H:%M:%S") 63 70 elif isinstance(field, models.FileField): 64 71 value = getattr(obj, "get_%s_url" % field.name, lambda: None)() 65 72 else: -
django/core/serializers/python.py
27 27 self._current = {} 28 28 29 29 def end_object(self, obj): 30 self.objects.append({ 30 self.objects.append(self.get_dump_object(obj)) 31 self._current = None 32 33 def get_dump_object (self, obj): 34 return { 31 35 "model" : smart_unicode(obj._meta), 32 36 "pk" : smart_unicode(obj._get_pk_val(), strings_only=True), 33 37 "fields" : self._current 34 }) 35 self._current = None 38 } 36 39 37 40 def handle_field(self, obj, field): 38 self._current[field.name] = smart_unicode(getattr(obj, field.name), strings_only=True) 41 value = smart_unicode(getattr(obj, field.name), strings_only=True) 42 self._current[field.name] = value 39 43 40 44 def handle_fk_field(self, obj, field): 41 45 related = getattr(obj, field.name) -
django/core/management/commands/dumpdata.py
2 2 from django.core import serializers 3 3 4 4 from optparse import make_option 5 import sys 5 6 6 7 class Command(BaseCommand): 7 8 option_list = BaseCommand.option_list + ( … … 35 36 except KeyError: 36 37 raise CommandError("Unknown serialization format: %s" % format) 37 38 38 objects = [] 39 for app in app_list: 40 for model in get_models(app): 41 objects.extend(model._default_manager.all()) 39 def get_objects (): 40 for app in app_list: 41 for model in get_models(app): 42 for obj in model._default_manager.order_by(model._meta.pk.attname).iterator(): 43 yield obj 42 44 try: 43 return serializers.serialize(format, objects, indent=indent)45 serializers.serialize(format, get_objects(), indent=indent, stream=sys.stdout) 44 46 except Exception, e: 45 47 if show_traceback: 46 48 raise -
tests/modeltests/fixtures/models.py
81 81 82 82 # Dump the current contents of the database as a JSON fixture 83 83 >>> management.call_command('dumpdata', 'fixtures', format='json') 84 [{"pk": 3, "model": "fixtures.article", "fields": {"headline": "Time to reform copyright", "pub_date": "2006-06-16 13:00:00"}}, {"pk": 2, "model": "fixtures.article", "fields": {"headline": "Poker has no place on ESPN", "pub_date": "2006-06-16 12:00:00"}}, {"pk": 1, "model": "fixtures.article", "fields": {"headline": "Python program becomes self aware", "pub_date": "2006-06-16 11:00:00"}}]84 [{"pk": 1, "model": "fixtures.article", "fields": {"headline": "Python program becomes self aware", "pub_date": "2006-06-16 11:00:00"}}, {"pk": 2, "model": "fixtures.article", "fields": {"headline": "Poker has no place on ESPN", "pub_date": "2006-06-16 12:00:00"}}, {"pk": 3, "model": "fixtures.article", "fields": {"headline": "Time to reform copyright", "pub_date": "2006-06-16 13:00:00"}}] 85 85 """ 86 86 87 87 from django.test import TestCase