1
0
mirror of https://github.com/django/django.git synced 2025-07-19 00:59:17 +00:00

[1.0.X] Fixed #10240 -- Restored YAML serialization with Decimal objects that broke with r9823. Thanks Alex Gaynor for the report.

Backport of r9825 from trunk.

git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.0.X@9826 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Brian Rosner 2009-02-12 02:55:32 +00:00
parent 5db8dc3573
commit 8a89cf9d18

View File

@ -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()