Fixed a bug introduced in [6891]: the "safe" YAML serializer can't handle 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
This commit is contained in:
parent
b65fce6595
commit
5684bdc3a4
|
@ -5,6 +5,7 @@ Requires PyYaml (http://pyyaml.org/), but that's checked for in __init__.
|
|||
"""
|
||||
|
||||
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)
|
||||
|
|
Loading…
Reference in New Issue