diff --git a/blender_asset_tracer/blendfile/__init__.py b/blender_asset_tracer/blendfile/__init__.py index 00456c8..222a263 100644 --- a/blender_asset_tracer/blendfile/__init__.py +++ b/blender_asset_tracer/blendfile/__init__.py @@ -72,12 +72,13 @@ class BlendFile: self.is_compressed = False self.raw_filepath = path self.fileobj = fileobj - elif magic == GZIP_MAGIC: + elif magic[:2] == GZIP_MAGIC: self.is_compressed = True log.debug("compressed blendfile detected: %s", path) # Decompress to a temporary file. tmpfile = tempfile.NamedTemporaryFile() + fileobj.seek(0, os.SEEK_SET) with gzip.GzipFile(fileobj=fileobj, mode=mode) as gzfile: magic = gzfile.read(len(BLENDFILE_MAGIC)) if magic != BLENDFILE_MAGIC: diff --git a/tests/blendfiles/basic_file_compressed.blend b/tests/blendfiles/basic_file_compressed.blend new file mode 100644 index 0000000..d2fa563 Binary files /dev/null and b/tests/blendfiles/basic_file_compressed.blend differ diff --git a/tests/test_blendfile_loading.py b/tests/test_blendfile_loading.py index 2206d99..5fc4f8a 100644 --- a/tests/test_blendfile_loading.py +++ b/tests/test_blendfile_loading.py @@ -196,3 +196,13 @@ class PointerTest(AbstractBlendFileTest): seq.refine_type_from_index(sdna_idx_sequence) self.assertEqual(b'SQBlack', seq[b'name']) self.assertEqual(28, seq[b'type']) + + +class LoadCompressedTest(AbstractBlendFileTest): + def test_loading(self): + self.bf = blendfile.BlendFile(self.blendfiles / 'basic_file_compressed.blend') + self.assertTrue(self.bf.is_compressed) + + ob = self.bf.code_index[b'OB'][0] + name = ob.get((b'id', b'name')) + self.assertEqual('OBümlaut', name)