Favored text (StringIO) over binary content for deserialization
This is also more Python 3 compatible, as the json module in Python 3 is expecting text. Thanks Vinay Sajip for noticing it.
This commit is contained in:
parent
fd6a9d35d9
commit
5bdd0d6b6a
|
@ -8,7 +8,6 @@ from __future__ import absolute_import
|
||||||
import datetime
|
import datetime
|
||||||
import decimal
|
import decimal
|
||||||
import json
|
import json
|
||||||
from io import BytesIO
|
|
||||||
|
|
||||||
from django.core.serializers.base import DeserializationError
|
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
|
||||||
|
@ -63,13 +62,13 @@ def Deserializer(stream_or_string, **options):
|
||||||
Deserialize a stream or string of JSON data.
|
Deserialize a stream or string of JSON data.
|
||||||
"""
|
"""
|
||||||
if isinstance(stream_or_string, bytes):
|
if isinstance(stream_or_string, bytes):
|
||||||
stream = BytesIO(stream_or_string)
|
stream_or_string = stream_or_string.decode('utf-8')
|
||||||
elif isinstance(stream_or_string, unicode):
|
|
||||||
stream = BytesIO(smart_str(stream_or_string))
|
|
||||||
else:
|
|
||||||
stream = stream_or_string
|
|
||||||
try:
|
try:
|
||||||
for obj in PythonDeserializer(json.load(stream), **options):
|
if isinstance(stream_or_string, basestring):
|
||||||
|
objects = json.loads(stream_or_string)
|
||||||
|
else:
|
||||||
|
objects = json.load(stream_or_string)
|
||||||
|
for obj in PythonDeserializer(objects, **options):
|
||||||
yield obj
|
yield obj
|
||||||
except GeneratorExit:
|
except GeneratorExit:
|
||||||
raise
|
raise
|
||||||
|
|
|
@ -6,7 +6,7 @@ Requires PyYaml (http://pyyaml.org/), but that's checked for in __init__.
|
||||||
|
|
||||||
import decimal
|
import decimal
|
||||||
import yaml
|
import yaml
|
||||||
from io import BytesIO
|
from io import StringIO
|
||||||
|
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.core.serializers.base import DeserializationError
|
from django.core.serializers.base import DeserializationError
|
||||||
|
@ -51,9 +51,9 @@ def Deserializer(stream_or_string, **options):
|
||||||
Deserialize a stream or string of YAML data.
|
Deserialize a stream or string of YAML data.
|
||||||
"""
|
"""
|
||||||
if isinstance(stream_or_string, bytes):
|
if isinstance(stream_or_string, bytes):
|
||||||
stream = BytesIO(stream_or_string)
|
stream_or_string = stream_or_string.decode('utf-8')
|
||||||
if isinstance(stream_or_string, unicode):
|
if isinstance(stream_or_string, basestring):
|
||||||
stream = BytesIO(smart_str(stream_or_string))
|
stream = StringIO(stream_or_string)
|
||||||
else:
|
else:
|
||||||
stream = stream_or_string
|
stream = stream_or_string
|
||||||
try:
|
try:
|
||||||
|
|
Loading…
Reference in New Issue