summaryrefslogtreecommitdiff
path: root/django/core
diff options
context:
space:
mode:
authorBrian Rosner <brosner@gmail.com>2009-02-12 02:54:39 +0000
committerBrian Rosner <brosner@gmail.com>2009-02-12 02:54:39 +0000
commite4e964510c917dc668929e9cb6eb0fe0f6d4a576 (patch)
treea2b36767a227c8cd5404a7787ad2df3c865189d0 /django/core
parente5cd43e5884ec5860cb7f421b6f84eda93e70b3b (diff)
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
Diffstat (limited to 'django/core')
-rw-r--r--django/core/serializers/pyyaml.py13
1 files changed, 12 insertions, 1 deletions
diff --git a/django/core/serializers/pyyaml.py b/django/core/serializers/pyyaml.py
index ac77166a2f..34f8118d38 100644
--- a/django/core/serializers/pyyaml.py
+++ b/django/core/serializers/pyyaml.py
@@ -7,10 +7,21 @@ Requires PyYaml (http://pyyaml.org/), but that's checked for in __init__.
from StringIO import StringIO
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.core.serializers.python import Serializer as PythonSerializer
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):
"""
Convert a queryset to YAML.
@@ -33,7 +44,7 @@ class Serializer(PythonSerializer):
def end_serialization(self):
self.options.pop('stream', 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):
return self.stream.getvalue()