Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Prevented caching of streaming responses.

The test introduced in 4b27813 accidentally passed because of a
limitation of Python < 3.3.

Refs #17758, #7581.
  • Loading branch information...
commit 1c8be95a864540d416602577d1aa03d58ba33168 1 parent 35d1cd0
@aaugustin aaugustin authored
Showing with 10 additions and 13 deletions.
  1. +1 −1  django/middleware/cache.py
  2. +9 −12 tests/regressiontests/cache/tests.py
View
2  django/middleware/cache.py
@@ -93,7 +93,7 @@ def process_response(self, request, response):
if not self._should_update_cache(request, response):
# We don't need to update the cache, just return.
return response
- if not response.status_code == 200:
+ if response.streaming or response.status_code != 200:
return response
# Try to get the timeout from the "max-age" section of the "Cache-
# Control" header before reverting to using the default cache_timeout
View
21 tests/regressiontests/cache/tests.py
@@ -1428,24 +1428,21 @@ def set_cache(request, lang, msg):
CACHE_MIDDLEWARE_SECONDS=60,
USE_ETAGS=True,
)
- def test_middleware_with_streaming_response(self):
- # cache with non empty request.GET
- request = self._get_request_cache(query_string='foo=baz&other=true')
-
- # first access, cache must return None
+ def test_middleware_doesnt_cache_streaming_response(self):
+ request = self._get_request()
get_cache_data = FetchFromCacheMiddleware().process_request(request)
- self.assertEqual(get_cache_data, None)
+ self.assertIsNone(get_cache_data)
- # pass streaming response through UpdateCacheMiddleware.
- content = 'Check for cache with QUERY_STRING and streaming content'
+ # This test passes on Python < 3.3 even without the corresponding code
+ # in UpdateCacheMiddleware, because pickling a StreamingHttpResponse
+ # fails (http://bugs.python.org/issue14288). LocMemCache silently
+ # swallows the exception and doesn't store the response in cache.
+ content = ['Check for cache with streaming content.']
response = StreamingHttpResponse(content)
UpdateCacheMiddleware().process_response(request, response)
- # second access, cache must still return None, because we can't cache
- # streaming response.
get_cache_data = FetchFromCacheMiddleware().process_request(request)
- self.assertEqual(get_cache_data, None)
-
+ self.assertIsNone(get_cache_data)
@override_settings(
CACHES={
Please sign in to comment.
Something went wrong with that request. Please try again.