Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Fixed #20472: response.content should be bytes on both Python 2 and 3

  • Loading branch information...
commit 0594fed9ffd6cf6e10475488934cb02d9263829e 1 parent 4ba1c2e
Łukasz Langa ambv authored
Showing with 26 additions and 2 deletions.
  1. +2 −2 django/http/utils.py
  2. +24 −0 tests/http_utils/tests.py
4 django/http/utils.py
View
@@ -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
24 tests/http_utils/tests.py
View
@@ -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 @@ 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'
Please sign in to comment.
Something went wrong with that request. Please try again.