Skip to content

Commit

Permalink
Fixed #20472: response.content should be bytes on both Python 2 and 3
Browse files Browse the repository at this point in the history
  • Loading branch information
ambv committed May 20, 2013
1 parent 4ba1c2e commit 0594fed
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 2 deletions.
4 changes: 2 additions & 2 deletions django/http/utils.py
Expand Up @@ -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


Expand Down
24 changes: 24 additions & 0 deletions tests/http_utils/tests.py
@@ -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):
Expand Down Expand Up @@ -33,6 +44,19 @@ def test_conditional_content_removal(self):
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'

Expand Down

0 comments on commit 0594fed

Please sign in to comment.