Fixed #11970 -- Wrapped the exception happening during deserialization in DeserializationError exceptions. Thanks, Claude Paroz.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@17469 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
75a9c8a5ef
commit
49288f8388
|
@ -6,6 +6,7 @@ import datetime
|
||||||
import decimal
|
import decimal
|
||||||
from StringIO import StringIO
|
from StringIO import StringIO
|
||||||
|
|
||||||
|
from django.core.serializers.base import DeserializationError
|
||||||
from django.core.serializers.python import Serializer as PythonSerializer
|
from django.core.serializers.python import Serializer as PythonSerializer
|
||||||
from django.core.serializers.python import Deserializer as PythonDeserializer
|
from django.core.serializers.python import Deserializer as PythonDeserializer
|
||||||
from django.utils import simplejson
|
from django.utils import simplejson
|
||||||
|
@ -27,6 +28,7 @@ class Serializer(PythonSerializer):
|
||||||
if callable(getattr(self.stream, 'getvalue', None)):
|
if callable(getattr(self.stream, 'getvalue', None)):
|
||||||
return self.stream.getvalue()
|
return self.stream.getvalue()
|
||||||
|
|
||||||
|
|
||||||
def Deserializer(stream_or_string, **options):
|
def Deserializer(stream_or_string, **options):
|
||||||
"""
|
"""
|
||||||
Deserialize a stream or string of JSON data.
|
Deserialize a stream or string of JSON data.
|
||||||
|
@ -35,8 +37,13 @@ def Deserializer(stream_or_string, **options):
|
||||||
stream = StringIO(stream_or_string)
|
stream = StringIO(stream_or_string)
|
||||||
else:
|
else:
|
||||||
stream = stream_or_string
|
stream = stream_or_string
|
||||||
|
try:
|
||||||
for obj in PythonDeserializer(simplejson.load(stream), **options):
|
for obj in PythonDeserializer(simplejson.load(stream), **options):
|
||||||
yield obj
|
yield obj
|
||||||
|
except Exception, e:
|
||||||
|
# Map to deserializer error
|
||||||
|
raise DeserializationError(e)
|
||||||
|
|
||||||
|
|
||||||
class DjangoJSONEncoder(simplejson.JSONEncoder):
|
class DjangoJSONEncoder(simplejson.JSONEncoder):
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -9,6 +9,7 @@ import decimal
|
||||||
import yaml
|
import yaml
|
||||||
|
|
||||||
from django.db import models
|
from django.db import models
|
||||||
|
from django.core.serializers.base import DeserializationError
|
||||||
from django.core.serializers.python import Serializer as PythonSerializer
|
from django.core.serializers.python import Serializer as PythonSerializer
|
||||||
from django.core.serializers.python import Deserializer as PythonDeserializer
|
from django.core.serializers.python import Deserializer as PythonDeserializer
|
||||||
|
|
||||||
|
@ -51,6 +52,9 @@ def Deserializer(stream_or_string, **options):
|
||||||
stream = StringIO(stream_or_string)
|
stream = StringIO(stream_or_string)
|
||||||
else:
|
else:
|
||||||
stream = stream_or_string
|
stream = stream_or_string
|
||||||
|
try:
|
||||||
for obj in PythonDeserializer(yaml.safe_load(stream), **options):
|
for obj in PythonDeserializer(yaml.safe_load(stream), **options):
|
||||||
yield obj
|
yield obj
|
||||||
|
except Exception, e:
|
||||||
|
# Map to deserializer error
|
||||||
|
raise DeserializationError(e)
|
||||||
|
|
|
@ -19,6 +19,7 @@ except ImportError:
|
||||||
|
|
||||||
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.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
|
||||||
|
@ -390,6 +391,17 @@ class SerializerTests(TestCase):
|
||||||
with self.assertRaises(SerializerDoesNotExist):
|
with self.assertRaises(SerializerDoesNotExist):
|
||||||
serializers.get_deserializer("nonsense")
|
serializers.get_deserializer("nonsense")
|
||||||
|
|
||||||
|
def test_json_deserializer_exception(self):
|
||||||
|
with self.assertRaises(DeserializationError):
|
||||||
|
for obj in serializers.deserialize("json", """[{"pk":1}"""):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def test_yaml_deserializer_exception(self):
|
||||||
|
with self.assertRaises(DeserializationError):
|
||||||
|
for obj in serializers.deserialize("yaml", "{"):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
def serializerTest(format, self):
|
def serializerTest(format, self):
|
||||||
|
|
||||||
# Create all the objects defined in the test data
|
# Create all the objects defined in the test data
|
||||||
|
|
Loading…
Reference in New Issue