mirror of https://github.com/django/django.git
Prevented caching of streaming responses.
The test introduced in 4b278131
accidentally passed because of a
limitation of Python < 3.3.
Refs #17758, #7581.
This commit is contained in:
parent
35d1cd0b28
commit
1c8be95a86
|
@ -93,7 +93,7 @@ class UpdateCacheMiddleware(object):
|
|||
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
|
||||
|
|
|
@ -1428,24 +1428,21 @@ class CacheI18nTest(TestCase):
|
|||
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={
|
||||
|
|
Loading…
Reference in New Issue