Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Fixed #11970 -- Wrapped the exception happening during deserializatio…

…n in DeserializationError exceptions. Thanks, Claude Paroz.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@17469 bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information...
commit 49288f838809d797fa7b8b2e6a2cb2f65d6cf8bd 1 parent 75a9c8a
@jezdez jezdez authored
View
11 django/core/serializers/json.py
@@ -6,6 +6,7 @@
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 @@ def getvalue(self):
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
- for obj in PythonDeserializer(simplejson.load(stream), **options):
- yield obj
+ 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):
"""
View
10 django/core/serializers/pyyaml.py
@@ -9,6 +9,7 @@
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
- for obj in PythonDeserializer(yaml.safe_load(stream), **options):
- yield obj
-
+ try:
+ for obj in PythonDeserializer(yaml.safe_load(stream), **options):
+ yield obj
+ except Exception, e:
+ # Map to deserializer error
+ raise DeserializationError(e)
View
12 tests/regressiontests/serializers_regress/tests.py
@@ -19,6 +19,7 @@
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 @@ def test_get_unkown_deserializer(self):
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
Please sign in to comment.
Something went wrong with that request. Please try again.