Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Fixed a bug introduced in [6891]: the "safe" YAML serializer can't ha…

…ndle time types out of the box. I've worked around the bug by coercing times to strings,

which is far from perfect. However, it's better than a Python-specific "!!python/time" type which would break interoperability (which was the goal of switching to the safe mode in the first place).


git-svn-id: http://code.djangoproject.com/svn/django/trunk@6893 bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information...
commit 5684bdc3a4c6d7f8551ff18d8c7cdbd4294175c8 1 parent b65fce6
@jacobian jacobian authored
Showing with 14 additions and 0 deletions.
  1. +14 −0 django/core/serializers/pyyaml.py
View
14 django/core/serializers/pyyaml.py
@@ -5,6 +5,7 @@
"""
import datetime
+from django.db import models
from django.core.serializers.python import Serializer as PythonSerializer
from django.core.serializers.python import Deserializer as PythonDeserializer
try:
@@ -17,6 +18,19 @@ class Serializer(PythonSerializer):
"""
Convert a queryset to YAML.
"""
+
+ def handle_field(self, obj, field):
+ # A nasty special case: base YAML doesn't support serialization of time
+ # types (as opposed to dates or datetimes, which it does support). Since
+ # we want to use the "safe" serializer for better interoperability, we
+ # need to do something with those pesky times. Converting 'em to strings
+ # isn't perfect, but it's better than a "!!python/time" type which would
+ # halt deserialization under any other language.
+ if isinstance(field, models.TimeField) and getattr(obj, field.name) is not None:
+ self._current[field.name] = str(getattr(obj, field.name))
+ else:
+ super(Serializer, self).handle_field(obj, field)
+
def end_serialization(self):
self.options.pop('stream', None)
self.options.pop('fields', None)
Please sign in to comment.
Something went wrong with that request. Please try again.