Fixed loading compressed files

This commit is contained in:
Sybren A. Stüvel 2018-02-23 13:52:47 +01:00
parent b42a090f32
commit 67751d9a3e
3 changed files with 12 additions and 1 deletions

View File

@ -72,12 +72,13 @@ class BlendFile:
self.is_compressed = False self.is_compressed = False
self.raw_filepath = path self.raw_filepath = path
self.fileobj = fileobj self.fileobj = fileobj
elif magic == GZIP_MAGIC: elif magic[:2] == GZIP_MAGIC:
self.is_compressed = True self.is_compressed = True
log.debug("compressed blendfile detected: %s", path) log.debug("compressed blendfile detected: %s", path)
# Decompress to a temporary file. # Decompress to a temporary file.
tmpfile = tempfile.NamedTemporaryFile() tmpfile = tempfile.NamedTemporaryFile()
fileobj.seek(0, os.SEEK_SET)
with gzip.GzipFile(fileobj=fileobj, mode=mode) as gzfile: with gzip.GzipFile(fileobj=fileobj, mode=mode) as gzfile:
magic = gzfile.read(len(BLENDFILE_MAGIC)) magic = gzfile.read(len(BLENDFILE_MAGIC))
if magic != BLENDFILE_MAGIC: if magic != BLENDFILE_MAGIC:

Binary file not shown.

View File

@ -196,3 +196,13 @@ class PointerTest(AbstractBlendFileTest):
seq.refine_type_from_index(sdna_idx_sequence) seq.refine_type_from_index(sdna_idx_sequence)
self.assertEqual(b'SQBlack', seq[b'name']) self.assertEqual(b'SQBlack', seq[b'name'])
self.assertEqual(28, seq[b'type']) 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)