From 66b2825a667f9aa9618005d2a5875383a3658f4f Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 9 Jun 2021 17:08:57 +0200 Subject: [PATCH] Fix writing bytes to string-stream Don't open the file first. We can let the zipfile module handle that. Contributes to issue CURA-8055. --- .../Models/MaterialManagementModel.py | 21 +++++++++---------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/cura/Machines/Models/MaterialManagementModel.py b/cura/Machines/Models/MaterialManagementModel.py index 243560bf50..01ffb9eeb3 100644 --- a/cura/Machines/Models/MaterialManagementModel.py +++ b/cura/Machines/Models/MaterialManagementModel.py @@ -298,14 +298,13 @@ class MaterialManagementModel(QObject): def exportAll(self, file_path: QUrl) -> None: registry = CuraContainerRegistry.getInstance() - with open(file_path.toLocalFile(), "w") as stream: - archive = zipfile.ZipFile(stream, "w", compression = zipfile.ZIP_DEFLATED) - for metadata in registry.findInstanceContainersMetadata(type = "material"): - if metadata["base_file"] != metadata["id"]: # Only process base files. - continue - if metadata["id"] == "empty_material": # Don't export the empty material. - continue - material = registry.findContainers(id = metadata["id"])[0] - suffix = registry.getMimeTypeForContainer(type(material)).preferredSuffix - filename = metadata["id"] + "." + suffix - archive.writestr(filename, material.serialize()) + archive = zipfile.ZipFile(file_path.toLocalFile(), "w") + for metadata in registry.findInstanceContainersMetadata(type = "material"): + if metadata["base_file"] != metadata["id"]: # Only process base files. + continue + if metadata["id"] == "empty_material": # Don't export the empty material. + continue + material = registry.findContainers(id = metadata["id"])[0] + suffix = registry.getMimeTypeForContainer(type(material)).preferredSuffix + filename = metadata["id"] + "." + suffix + archive.writestr(filename, material.serialize())