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:
Jannis Leidel 2012-02-10 01:13:38 +00:00
parent c1acda6d8f
commit 7019123d21
3 changed files with 11 additions and 0 deletions

View File

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

View File

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

View File

@ -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", "{"):