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
|
||||
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 Deserializer as PythonDeserializer
|
||||
from django.utils import simplejson
|
||||
|
@ -27,6 +28,7 @@ class Serializer(PythonSerializer):
|
|||
if callable(getattr(self.stream, 'getvalue', None)):
|
||||
return self.stream.getvalue()
|
||||
|
||||
|
||||
def Deserializer(stream_or_string, **options):
|
||||
"""
|
||||
Deserialize a stream or string of JSON data.
|
||||
|
@ -35,8 +37,13 @@ def Deserializer(stream_or_string, **options):
|
|||
stream = StringIO(stream_or_string)
|
||||
else:
|
||||
stream = stream_or_string
|
||||
try:
|
||||
for obj in PythonDeserializer(simplejson.load(stream), **options):
|
||||
yield obj
|
||||
except Exception, e:
|
||||
# Map to deserializer error
|
||||
raise DeserializationError(e)
|
||||
|
||||
|
||||
class DjangoJSONEncoder(simplejson.JSONEncoder):
|
||||
"""
|
||||
|
|
|
@ -9,6 +9,7 @@ import decimal
|
|||
import yaml
|
||||
|
||||
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 Deserializer as PythonDeserializer
|
||||
|
||||
|
@ -51,6 +52,9 @@ def Deserializer(stream_or_string, **options):
|
|||
stream = StringIO(stream_or_string)
|
||||
else:
|
||||
stream = stream_or_string
|
||||
try:
|
||||
for obj in PythonDeserializer(yaml.safe_load(stream), **options):
|
||||
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.serializers import SerializerDoesNotExist
|
||||
from django.core.serializers.base import DeserializationError
|
||||
from django.db import connection, models
|
||||
from django.test import TestCase
|
||||
from django.utils.functional import curry
|
||||
|
@ -390,6 +391,17 @@ class SerializerTests(TestCase):
|
|||
with self.assertRaises(SerializerDoesNotExist):
|
||||
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):
|
||||
|
||||
# Create all the objects defined in the test data
|
||||
|
|
Loading…
Reference in New Issue