Fixed the exception handling when deserializing via generators on Python 2.5 that was introduced in r17469. Also only test the YAML serializer if PyYAML is installed.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@17487 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
c1acda6d8f
commit
7019123d21
|
@ -40,6 +40,8 @@ def Deserializer(stream_or_string, **options):
|
||||||
try:
|
try:
|
||||||
for obj in PythonDeserializer(simplejson.load(stream), **options):
|
for obj in PythonDeserializer(simplejson.load(stream), **options):
|
||||||
yield obj
|
yield obj
|
||||||
|
except GeneratorExit:
|
||||||
|
raise
|
||||||
except Exception, e:
|
except Exception, e:
|
||||||
# Map to deserializer error
|
# Map to deserializer error
|
||||||
raise DeserializationError(e)
|
raise DeserializationError(e)
|
||||||
|
|
|
@ -55,6 +55,8 @@ def Deserializer(stream_or_string, **options):
|
||||||
try:
|
try:
|
||||||
for obj in PythonDeserializer(yaml.safe_load(stream), **options):
|
for obj in PythonDeserializer(yaml.safe_load(stream), **options):
|
||||||
yield obj
|
yield obj
|
||||||
|
except GeneratorExit:
|
||||||
|
raise
|
||||||
except Exception, e:
|
except Exception, e:
|
||||||
# Map to deserializer error
|
# Map to deserializer error
|
||||||
raise DeserializationError(e)
|
raise DeserializationError(e)
|
||||||
|
|
|
@ -17,12 +17,18 @@ try:
|
||||||
except ImportError:
|
except ImportError:
|
||||||
from StringIO import StringIO
|
from StringIO import StringIO
|
||||||
|
|
||||||
|
try:
|
||||||
|
import yaml
|
||||||
|
except ImportError:
|
||||||
|
yaml = None
|
||||||
|
|
||||||
from django.core import serializers
|
from django.core import serializers
|
||||||
from django.core.serializers import SerializerDoesNotExist
|
from django.core.serializers import SerializerDoesNotExist
|
||||||
from django.core.serializers.base import DeserializationError
|
from django.core.serializers.base import DeserializationError
|
||||||
from django.db import connection, models
|
from django.db import connection, models
|
||||||
from django.test import TestCase
|
from django.test import TestCase
|
||||||
from django.utils.functional import curry
|
from django.utils.functional import curry
|
||||||
|
from django.utils.unittest import skipUnless
|
||||||
|
|
||||||
from .models import (BooleanData, CharData, DateData, DateTimeData, EmailData,
|
from .models import (BooleanData, CharData, DateData, DateTimeData, EmailData,
|
||||||
FileData, FilePathData, DecimalData, FloatData, IntegerData, IPAddressData,
|
FileData, FilePathData, DecimalData, FloatData, IntegerData, IPAddressData,
|
||||||
|
@ -396,6 +402,7 @@ class SerializerTests(TestCase):
|
||||||
for obj in serializers.deserialize("json", """[{"pk":1}"""):
|
for obj in serializers.deserialize("json", """[{"pk":1}"""):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
@skipUnless(yaml, "PyYAML not installed")
|
||||||
def test_yaml_deserializer_exception(self):
|
def test_yaml_deserializer_exception(self):
|
||||||
with self.assertRaises(DeserializationError):
|
with self.assertRaises(DeserializationError):
|
||||||
for obj in serializers.deserialize("yaml", "{"):
|
for obj in serializers.deserialize("yaml", "{"):
|
||||||
|
|
Loading…
Reference in New Issue