Commit 86dcac46 authored by David Evans's avatar David Evans Committed by Tim Graham
Browse files

Fixed #22315 -- str/bytes mismatch in staticfiles

Previously, `ManifestFilesMixin.read_manifest` failed in Python 3
because `json.loads` accepts `str` not `bytes`.
parent e3c4205b
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -292,7 +292,7 @@ class ManifestFilesMixin(HashedFilesMixin):
    def read_manifest(self):
        try:
            with self.open(self.manifest_name) as manifest:
                return manifest.read()
                return manifest.read().decode('utf-8')
        except IOError:
            return None

@@ -319,7 +319,8 @@ class ManifestFilesMixin(HashedFilesMixin):
        payload = {'paths': self.hashed_files, 'version': self.manifest_version}
        if self.exists(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):
+5 −0
Original line number Diff line number Diff line
@@ -662,6 +662,11 @@ class TestCollectionManifestStorage(TestHashedFiles, BaseCollectionTestCase,
                      storage.staticfiles_storage.manifest_version,
                      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
@override_settings(**dict(