﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
17861	Static files cache_key should handle spaces in filenames	milosu	nobody	"trying migrate my project to the Django 1.4c1, I get the following errors when running the storagefiles_tests test case:

{{{
======================================================================
ERROR: test_cache_invalidation (regressiontests.staticfiles_tests.tests.TestCollectionCachedStorage)
----------------------------------------------------------------------
Traceback (most recent call last):
  File ""C:\Python26\Lib\site-packages\django_versions\Django-1.4c1\tests\regressiontests\staticfiles_tests\tests.py"", lin
e 118, in setUp
    self.run_collectstatic()
  File ""C:\Python26\Lib\site-packages\django_versions\Django-1.4c1\tests\regressiontests\staticfiles_tests\tests.py"", lin
e 129, in run_collectstatic
    ignore_patterns=['*.ignoreme'], **kwargs)
  File ""C:\Python26\lib\site-packages\django_versions\Django-1.4c1\django\core\management\__init__.py"", line 150, in call
_command
    return klass.execute(*args, **defaults)
  File ""C:\Python26\lib\site-packages\django_versions\Django-1.4c1\django\core\management\base.py"", line 232, in execute
    output = self.handle(*args, **options)
  File ""C:\Python26\lib\site-packages\django_versions\Django-1.4c1\django\core\management\base.py"", line 371, in handle
    return self.handle_noargs(**options)
  File ""C:\Python26\lib\site-packages\django_versions\Django-1.4c1\django\contrib\staticfiles\management\commands\collect
static.py"", line 163, in handle_noargs
    collected = self.collect()
  File ""C:\Python26\lib\site-packages\django_versions\Django-1.4c1\django\contrib\staticfiles\management\commands\collect
static.py"", line 120, in collect
    for original_path, processed_path, processed in processor:
  File ""C:\Python26\lib\site-packages\django_versions\Django-1.4c1\django\contrib\staticfiles\storage.py"", line 192, in p
ost_process
    self.cache.delete_many([self.cache_key(path) for path in paths])
  File ""C:\Python26\lib\site-packages\django_versions\Django-1.4c1\django\core\cache\backends\memcached.py"", line 123, in delete_many
    self._cache.delete_multi(map(l, keys))
  File ""build\bdist.win32\egg\memcache.py"", line 336, in delete_multi
    server_keys, prefixed_to_orig_key = self._map_and_prefix_keys(keys, key_prefix)
  File ""build\bdist.win32\egg\memcache.py"", line 585, in _map_and_prefix_keys
    self.check_key(str_orig_key, key_extra_len=key_extra_len)
  File ""build\bdist.win32\egg\memcache.py"", line 958, in check_key
    ""Control characters not allowed"")
MemcachedKeyCharacterError: Control characters not allowed

}}}

After a bit of digging, the root cause is a file which filename contains spaces,

e.g. in my case there is a file:

django/contrib/admin/static/admin/filebrowser/uploadify/Uploadify v2.1.0 Manual.pdf

The above test case is failing while trying to use the following cache key:

u'staticfiles:cache:admin\\filebrowser\\uploadify\\Uploadify v2.1.0 Manual.pdf'

This cache key is invalid under Memcached that I'm running.

Patch attached."	Bug	closed	contrib.staticfiles	1.4-beta-1	Release blocker	fixed			Accepted	1	0	0	0	0	0
