Fixed #22315 -- str/bytes mismatch in staticfiles

Previously, `ManifestFilesMixin.read_manifest` failed in Python 3
because `json.loads` accepts `str` not `bytes`.
This commit is contained in:
David Evans 2014-03-22 21:57:01 +00:00 committed by Tim Graham
parent e3c4205b79
commit 86dcac4634
2 changed files with 8 additions and 2 deletions

View File

@ -292,7 +292,7 @@ class ManifestFilesMixin(HashedFilesMixin):
def read_manifest(self): def read_manifest(self):
try: try:
with self.open(self.manifest_name) as manifest: with self.open(self.manifest_name) as manifest:
return manifest.read() return manifest.read().decode('utf-8')
except IOError: except IOError:
return None return None
@ -319,7 +319,8 @@ class ManifestFilesMixin(HashedFilesMixin):
payload = {'paths': self.hashed_files, 'version': self.manifest_version} payload = {'paths': self.hashed_files, 'version': self.manifest_version}
if self.exists(self.manifest_name): if self.exists(self.manifest_name):
self.delete(self.manifest_name) self.delete(self.manifest_name)
self._save(self.manifest_name, ContentFile(json.dumps(payload))) contents = json.dumps(payload).encode('utf-8')
self._save(self.manifest_name, ContentFile(contents))
class _MappingCache(object): class _MappingCache(object):

View File

@ -662,6 +662,11 @@ class TestCollectionManifestStorage(TestHashedFiles, BaseCollectionTestCase,
storage.staticfiles_storage.manifest_version, storage.staticfiles_storage.manifest_version,
force_text(manifest_content)) force_text(manifest_content))
def test_parse_cache(self):
hashed_files = storage.staticfiles_storage.hashed_files
manifest = storage.staticfiles_storage.load_manifest()
self.assertEqual(hashed_files, manifest)
# 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
@override_settings(**dict( @override_settings(**dict(