mirror of https://github.com/django/django.git
[py3] Fixed encoding issues in cache key generation
This commit is contained in:
parent
d774ad752d
commit
45baaabafb
|
@ -1,9 +1,9 @@
|
||||||
"Base Cache class."
|
"Base Cache class."
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
import warnings
|
import warnings
|
||||||
|
|
||||||
from django.core.exceptions import ImproperlyConfigured, DjangoRuntimeWarning
|
from django.core.exceptions import ImproperlyConfigured, DjangoRuntimeWarning
|
||||||
from django.utils.encoding import smart_bytes
|
|
||||||
from django.utils.importlib import import_module
|
from django.utils.importlib import import_module
|
||||||
|
|
||||||
class InvalidCacheBackendError(ImproperlyConfigured):
|
class InvalidCacheBackendError(ImproperlyConfigured):
|
||||||
|
@ -23,7 +23,7 @@ def default_key_func(key, key_prefix, version):
|
||||||
the `key_prefix'. KEY_FUNCTION can be used to specify an alternate
|
the `key_prefix'. KEY_FUNCTION can be used to specify an alternate
|
||||||
function with custom key making behavior.
|
function with custom key making behavior.
|
||||||
"""
|
"""
|
||||||
return ':'.join([key_prefix, str(version), smart_bytes(key)])
|
return ':'.join([key_prefix, str(version), key])
|
||||||
|
|
||||||
def get_key_func(key_func):
|
def get_key_func(key_func):
|
||||||
"""
|
"""
|
||||||
|
@ -62,7 +62,7 @@ class BaseCache(object):
|
||||||
except (ValueError, TypeError):
|
except (ValueError, TypeError):
|
||||||
self._cull_frequency = 3
|
self._cull_frequency = 3
|
||||||
|
|
||||||
self.key_prefix = smart_bytes(params.get('KEY_PREFIX', ''))
|
self.key_prefix = params.get('KEY_PREFIX', '')
|
||||||
self.version = params.get('VERSION', 1)
|
self.version = params.get('VERSION', 1)
|
||||||
self.key_func = get_key_func(params.get('KEY_FUNCTION', None))
|
self.key_func = get_key_func(params.get('KEY_FUNCTION', None))
|
||||||
|
|
||||||
|
|
|
@ -16,6 +16,7 @@ cache keys to prevent delivery of wrong content.
|
||||||
An example: i18n middleware would need to distinguish caches by the
|
An example: i18n middleware would need to distinguish caches by the
|
||||||
"Accept-language" header.
|
"Accept-language" header.
|
||||||
"""
|
"""
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
import hashlib
|
import hashlib
|
||||||
import re
|
import re
|
||||||
|
@ -170,7 +171,7 @@ def _i18n_cache_key_suffix(request, cache_key):
|
||||||
# User-defined tzinfo classes may return absolutely anything.
|
# User-defined tzinfo classes may return absolutely anything.
|
||||||
# Hence this paranoid conversion to create a valid cache key.
|
# Hence this paranoid conversion to create a valid cache key.
|
||||||
tz_name = force_text(get_current_timezone_name(), errors='ignore')
|
tz_name = force_text(get_current_timezone_name(), errors='ignore')
|
||||||
cache_key += '.%s' % tz_name.encode('ascii', 'ignore').replace(' ', '_')
|
cache_key += '.%s' % tz_name.encode('ascii', 'ignore').decode('ascii').replace(' ', '_')
|
||||||
return cache_key
|
return cache_key
|
||||||
|
|
||||||
def _generate_cache_key(request, method, headerlist, key_prefix):
|
def _generate_cache_key(request, method, headerlist, key_prefix):
|
||||||
|
|
|
@ -1308,7 +1308,7 @@ class CacheI18nTest(TestCase):
|
||||||
# This is tightly coupled to the implementation,
|
# This is tightly coupled to the implementation,
|
||||||
# but it's the most straightforward way to test the key.
|
# but it's the most straightforward way to test the key.
|
||||||
tz = force_text(timezone.get_current_timezone_name(), errors='ignore')
|
tz = force_text(timezone.get_current_timezone_name(), errors='ignore')
|
||||||
tz = tz.encode('ascii', 'ignore').replace(' ', '_')
|
tz = tz.encode('ascii', 'ignore').decode('ascii').replace(' ', '_')
|
||||||
response = HttpResponse()
|
response = HttpResponse()
|
||||||
key = learn_cache_key(request, response)
|
key = learn_cache_key(request, response)
|
||||||
self.assertIn(tz, key, "Cache keys should include the time zone name when time zones are active")
|
self.assertIn(tz, key, "Cache keys should include the time zone name when time zones are active")
|
||||||
|
@ -1320,7 +1320,7 @@ class CacheI18nTest(TestCase):
|
||||||
request = self._get_request()
|
request = self._get_request()
|
||||||
lang = translation.get_language()
|
lang = translation.get_language()
|
||||||
tz = force_text(timezone.get_current_timezone_name(), errors='ignore')
|
tz = force_text(timezone.get_current_timezone_name(), errors='ignore')
|
||||||
tz = tz.encode('ascii', 'ignore').replace(' ', '_')
|
tz = tz.encode('ascii', 'ignore').decode('ascii').replace(' ', '_')
|
||||||
response = HttpResponse()
|
response = HttpResponse()
|
||||||
key = learn_cache_key(request, response)
|
key = learn_cache_key(request, response)
|
||||||
self.assertNotIn(lang, key, "Cache keys shouldn't include the language name when i18n isn't active")
|
self.assertNotIn(lang, key, "Cache keys shouldn't include the language name when i18n isn't active")
|
||||||
|
|
Loading…
Reference in New Issue