Fixed #17861 -- Took care of special characters when creating the staticfiles storage cache keys. Many thanks to Preston Holmes.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@17688 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
ebc6fc9354
commit
3a5f9cd1ae
|
@ -95,7 +95,7 @@ class CachedFilesMixin(object):
|
||||||
return urlunsplit(unparsed_name)
|
return urlunsplit(unparsed_name)
|
||||||
|
|
||||||
def cache_key(self, name):
|
def cache_key(self, name):
|
||||||
return u'staticfiles:cache:%s' % name
|
return u'staticfiles:%s' % hashlib.md5(smart_str(name)).hexdigest()
|
||||||
|
|
||||||
def url(self, name, force=False):
|
def url(self, name, force=False):
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -7,10 +7,12 @@ import posixpath
|
||||||
import shutil
|
import shutil
|
||||||
import sys
|
import sys
|
||||||
import tempfile
|
import tempfile
|
||||||
|
import warnings
|
||||||
from StringIO import StringIO
|
from StringIO import StringIO
|
||||||
|
|
||||||
from django.template import loader, Context
|
from django.template import loader, Context
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
from django.core.cache.backends.base import BaseCache, CacheKeyWarning
|
||||||
from django.core.exceptions import ImproperlyConfigured
|
from django.core.exceptions import ImproperlyConfigured
|
||||||
from django.core.files.storage import default_storage
|
from django.core.files.storage import default_storage
|
||||||
from django.core.management import call_command
|
from django.core.management import call_command
|
||||||
|
@ -498,6 +500,20 @@ class TestCollectionCachedStorage(BaseCollectionTestCase,
|
||||||
self.assertTrue(os.path.join('cached', 'css', 'window.css') in stats['post_processed'])
|
self.assertTrue(os.path.join('cached', 'css', 'window.css') in stats['post_processed'])
|
||||||
self.assertTrue(os.path.join('cached', 'css', 'img', 'window.png') in stats['unmodified'])
|
self.assertTrue(os.path.join('cached', 'css', 'img', 'window.png') in stats['unmodified'])
|
||||||
|
|
||||||
|
def test_cache_key_memcache_validation(self):
|
||||||
|
"""
|
||||||
|
Handle cache key creation correctly, see #17861.
|
||||||
|
"""
|
||||||
|
name = "/some crazy/long filename/ with spaces Here and ?#%#$/other/stuff/some crazy/long filename/ with spaces Here and ?#%#$/other/stuff/some crazy/long filename/ with spaces Here and ?#%#$/other/stuff/some crazy/long filename/ with spaces Here and ?#%#$/other/stuff/some crazy/long filename/ with spaces Here and ?#%#$/other/stuff/some crazy/" + chr(22) + chr(180)
|
||||||
|
cache_key = storage.staticfiles_storage.cache_key(name)
|
||||||
|
self.save_warnings_state()
|
||||||
|
cache_validator = BaseCache({})
|
||||||
|
warnings.filterwarnings('error', category=CacheKeyWarning)
|
||||||
|
cache_validator.validate_key(cache_key)
|
||||||
|
self.restore_warnings_state()
|
||||||
|
self.assertEqual(cache_key, 'staticfiles:e95bbc36387084582df2a70750d7b351')
|
||||||
|
|
||||||
|
|
||||||
# we set DEBUG to False here since the template tag wouldn't work otherwise
|
# we set DEBUG to False here since the template tag wouldn't work otherwise
|
||||||
TestCollectionCachedStorage = override_settings(**dict(TEST_SETTINGS,
|
TestCollectionCachedStorage = override_settings(**dict(TEST_SETTINGS,
|
||||||
STATICFILES_STORAGE='django.contrib.staticfiles.storage.CachedStaticFilesStorage',
|
STATICFILES_STORAGE='django.contrib.staticfiles.storage.CachedStaticFilesStorage',
|
||||||
|
|
Loading…
Reference in New Issue