Fixed #15197 -- Fixed yaml serialization into HttpResponse

Thanks fourga38 for the report and hirokiky at gmail.com for the
initial patch.
This commit is contained in:
Claude Paroz 2012-06-28 16:28:25 +02:00
parent 4f53e77f07
commit 26cb227cfe
3 changed files with 15 additions and 11 deletions

View File

@ -52,9 +52,8 @@ class Serializer(PythonSerializer):
self._current = None
def getvalue(self):
# overwrite PythonSerializer.getvalue() with base Serializer.getvalue()
if callable(getattr(self.stream, 'getvalue', None)):
return self.stream.getvalue()
# Grand-parent super
return super(PythonSerializer, self).getvalue()
def Deserializer(stream_or_string, **options):

View File

@ -44,7 +44,8 @@ class Serializer(PythonSerializer):
yaml.dump(self.objects, self.stream, Dumper=DjangoSafeDumper, **self.options)
def getvalue(self):
return self.stream.getvalue()
# Grand-parent super
return super(PythonSerializer, self).getvalue()
def Deserializer(stream_or_string, **options):
"""

View File

@ -21,6 +21,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.http import HttpResponse
from django.test import TestCase
from django.utils.functional import curry
from django.utils.unittest import skipUnless
@ -501,15 +502,18 @@ def streamTest(format, self):
obj.save_base(raw=True)
# Serialize the test database to a stream
stream = BytesIO()
serializers.serialize(format, [obj], indent=2, stream=stream)
for stream in (BytesIO(), HttpResponse()):
serializers.serialize(format, [obj], indent=2, stream=stream)
# Serialize normally for a comparison
string_data = serializers.serialize(format, [obj], indent=2)
# Serialize normally for a comparison
string_data = serializers.serialize(format, [obj], indent=2)
# Check that the two are the same
self.assertEqual(string_data, stream.getvalue())
stream.close()
# Check that the two are the same
if isinstance(stream, BytesIO):
self.assertEqual(string_data, stream.getvalue())
else:
self.assertEqual(string_data, stream.content)
stream.close()
for format in serializers.get_serializer_formats():
setattr(SerializerTests, 'test_' + format + '_serializer', curry(serializerTest, format))