diff --git a/blender_asset_tracer/blendfile/__init__.py b/blender_asset_tracer/blendfile/__init__.py index 222a263..f698f32 100644 --- a/blender_asset_tracer/blendfile/__init__.py +++ b/blender_asset_tracer/blendfile/__init__.py @@ -171,7 +171,7 @@ class BlendFile: log.debug("recompressing modified blend file %s", self.raw_filepath) self.fileobj.seek(os.SEEK_SET, 0) - with gzip.open(self.filepath, 'wb') as gzfile: + with gzip.open(str(self.filepath), 'wb') as gzfile: while True: data = self.fileobj.read(FILE_BUFFER_SIZE) if not data: diff --git a/tests/blendfiles/linked_cube_compressed.blend b/tests/blendfiles/linked_cube_compressed.blend new file mode 100644 index 0000000..a55f380 Binary files /dev/null and b/tests/blendfiles/linked_cube_compressed.blend differ diff --git a/tests/test_blendfile_modification.py b/tests/test_blendfile_modification.py index a97ca0d..41da5fc 100644 --- a/tests/test_blendfile_modification.py +++ b/tests/test_blendfile_modification.py @@ -32,3 +32,33 @@ class ModifyUncompressedTest(AbstractBlendFileTest): library = self.bf.code_index[b'LI'][0] self.assertEqual(b'//basic_file.blend', library[b'filepath']) self.assertEqual(b'//basic_file.blend', library[b'name']) + + +class ModifyCompressedTest(AbstractBlendFileTest): + def setUp(self): + self.orig = self.blendfiles / 'linked_cube_compressed.blend' + self.to_modify = self.orig.with_name('linked_cube_modified.blend') + + copyfile(str(self.orig), str(self.to_modify)) # TODO: when requiring Python 3.6+, remove str() + self.bf = blendfile.BlendFile(self.to_modify, mode='r+b') + + self.assertTrue(self.bf.is_compressed) + + def tearDown(self): + if self.to_modify.exists(): + self.to_modify.unlink() + + def test_change_path(self): + library = self.bf.code_index[b'LI'][0] + + # Change it from absolute to relative. + library[b'filepath'] = b'//basic_file.blend' + library[b'name'] = b'//basic_file.blend' + + # Reload the blend file to inspect that it was written properly. + self.bf.close() + self.bf = blendfile.BlendFile(self.to_modify, mode='r+b') + + library = self.bf.code_index[b'LI'][0] + self.assertEqual(b'//basic_file.blend', library[b'filepath']) + self.assertEqual(b'//basic_file.blend', library[b'name'])