Author: jezdez
Date: 2012-02-09 10:57:13 -0800 (Thu, 09 Feb 2012)
New Revision: 17471

Modified:
   django/trunk/django/middleware/gzip.py
   django/trunk/tests/regressiontests/middleware/tests.py
Log:
Fixed #16035 -- Appended the Etag response header if the GZipMiddleware is in 
use to follow RFC2616 better. Thanks, ext and dracos2.

Modified: django/trunk/django/middleware/gzip.py
===================================================================
--- django/trunk/django/middleware/gzip.py      2012-02-09 18:57:06 UTC (rev 
17470)
+++ django/trunk/django/middleware/gzip.py      2012-02-09 18:57:13 UTC (rev 
17471)
@@ -37,6 +37,9 @@
         if len(compressed_content) >= len(response.content):
             return response
 
+        if response.has_header('ETag'):
+            response['ETag'] = re.sub('"$', ';gzip"', response['ETag'])
+
         response.content = compressed_content
         response['Content-Encoding'] = 'gzip'
         response['Content-Length'] = str(len(response.content))

Modified: django/trunk/tests/regressiontests/middleware/tests.py
===================================================================
--- django/trunk/tests/regressiontests/middleware/tests.py      2012-02-09 
18:57:06 UTC (rev 17470)
+++ django/trunk/tests/regressiontests/middleware/tests.py      2012-02-09 
18:57:13 UTC (rev 17471)
@@ -13,9 +13,9 @@
 from django.middleware.common import CommonMiddleware
 from django.middleware.http import ConditionalGetMiddleware
 from django.middleware.gzip import GZipMiddleware
-from django.test import TestCase
+from django.test import TestCase, RequestFactory
+from django.test.utils import override_settings
 
-
 class CommonMiddlewareTest(TestCase):
     def setUp(self):
         self.append_slash = settings.APPEND_SLASH
@@ -582,3 +582,32 @@
         r = GZipMiddleware().process_response(self.req, self.resp)
         self.assertEqual(r.content, self.uncompressible_string)
         self.assertEqual(r.get('Content-Encoding'), None)
+
+
+@override_settings(USE_ETAGS=True)
+class ETagGZipMiddlewareTest(TestCase):
+    """
+    Tests if the ETag middleware behaves correctly with GZip middleware.
+    """
+    compressible_string = 'a' * 500
+
+    def setUp(self):
+        self.rf = RequestFactory()
+
+    def test_compress_response(self):
+        """
+        Tests that ETag is changed after gzip compression is performed.
+        """
+        request = self.rf.get('/', HTTP_ACCEPT_ENCODING='gzip, deflate')
+        response = GZipMiddleware().process_response(request,
+            CommonMiddleware().process_response(request,
+                HttpResponse(self.compressible_string)))
+        gzip_etag = response.get('ETag')
+
+        request = self.rf.get('/', HTTP_ACCEPT_ENCODING='')
+        response = GZipMiddleware().process_response(request,
+            CommonMiddleware().process_response(request,
+                HttpResponse(self.compressible_string)))
+        nogzip_etag = response.get('ETag')
+
+        self.assertNotEqual(gzip_etag, nogzip_etag)

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/django-updates?hl=en.

Reply via email to