Merge pull request #1191 from ambv/content_is_bytes

Fixed #20472: response.content should be bytes on both Python 2 and 3
This commit is contained in:
Aymeric Augustin 2013-05-21 01:26:35 -07:00
commit 18856f866c
2 changed files with 26 additions and 2 deletions

View File

@ -31,13 +31,13 @@ def conditional_content_removal(request, response):
if response.streaming:
response.streaming_content = []
else:
response.content = ''
response.content = b''
response['Content-Length'] = '0'
if request.method == 'HEAD':
if response.streaming:
response.streaming_content = []
else:
response.content = ''
response.content = b''
return response

View File

@ -1,10 +1,21 @@
from __future__ import unicode_literals
import io
import gzip
from django.http import HttpRequest, HttpResponse, StreamingHttpResponse
from django.http.utils import conditional_content_removal
from django.test import TestCase
# based on Python 3.3's gzip.compress
def gzip_compress(data):
buf = io.BytesIO()
with gzip.GzipFile(fileobj=buf, mode='wb', compresslevel=0) as f:
f.write(data)
return buf.getvalue()
class HttpUtilTests(TestCase):
def test_conditional_content_removal(self):
@ -33,6 +44,19 @@ class HttpUtilTests(TestCase):
conditional_content_removal(req, res)
self.assertEqual(b''.join(res), b'')
# Issue #20472
abc = gzip_compress(b'abc')
res = HttpResponse(abc, status=304)
res['Content-Encoding'] = 'gzip'
conditional_content_removal(req, res)
self.assertEqual(res.content, b'')
res = StreamingHttpResponse([abc], status=304)
res['Content-Encoding'] = 'gzip'
conditional_content_removal(req, res)
self.assertEqual(b''.join(res), b'')
# Strip content for HEAD requests.
req.method = 'HEAD'