Fixed #10240 -- Restored YAML serialization with Decimal objects that broke with r9823. Thanks Alex Gaynor for the report.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@9825 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
e5cd43e588
commit
e4e964510c
|
@ -7,10 +7,21 @@ Requires PyYaml (http://pyyaml.org/), but that's checked for in __init__.
|
||||||
from StringIO import StringIO
|
from StringIO import StringIO
|
||||||
import yaml
|
import yaml
|
||||||
|
|
||||||
|
try:
|
||||||
|
import decimal
|
||||||
|
except ImportError:
|
||||||
|
from django.utils import _decimal as decimal # Python 2.3 fallback
|
||||||
|
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.core.serializers.python import Serializer as PythonSerializer
|
from django.core.serializers.python import Serializer as PythonSerializer
|
||||||
from django.core.serializers.python import Deserializer as PythonDeserializer
|
from django.core.serializers.python import Deserializer as PythonDeserializer
|
||||||
|
|
||||||
|
class DjangoSafeDumper(yaml.SafeDumper):
|
||||||
|
def represent_decimal(self, data):
|
||||||
|
return self.represent_scalar('tag:yaml.org,2002:str', str(data))
|
||||||
|
|
||||||
|
DjangoSafeDumper.add_representer(decimal.Decimal, DjangoSafeDumper.represent_decimal)
|
||||||
|
|
||||||
class Serializer(PythonSerializer):
|
class Serializer(PythonSerializer):
|
||||||
"""
|
"""
|
||||||
Convert a queryset to YAML.
|
Convert a queryset to YAML.
|
||||||
|
@ -33,7 +44,7 @@ class Serializer(PythonSerializer):
|
||||||
def end_serialization(self):
|
def end_serialization(self):
|
||||||
self.options.pop('stream', None)
|
self.options.pop('stream', None)
|
||||||
self.options.pop('fields', None)
|
self.options.pop('fields', None)
|
||||||
yaml.safe_dump(self.objects, self.stream, **self.options)
|
yaml.dump(self.objects, self.stream, Dumper=DjangoSafeDumper, **self.options)
|
||||||
|
|
||||||
def getvalue(self):
|
def getvalue(self):
|
||||||
return self.stream.getvalue()
|
return self.stream.getvalue()
|
||||||
|
|
Loading…
Reference in New Issue