Browse Source

Catch file writing errors while writing files in the archive

Seems really rare to me, but our users get every possible error some day.

Fixes Sentry issue CURA-ZW.
Ghostkeeper 4 years ago
parent
commit
c7bbc139f7
1 changed files with 13 additions and 9 deletions
  1. 13 9
      plugins/3MFWriter/ThreeMFWorkspaceWriter.py

+ 13 - 9
plugins/3MFWriter/ThreeMFWorkspaceWriter.py

@@ -127,15 +127,19 @@ class ThreeMFWorkspaceWriter(WorkspaceWriter):
 
         file_name = "Cura/%s.%s" % (container.getId(), file_suffix)
 
-        if file_name in archive.namelist():
-            return  # File was already saved, no need to do it again. Uranium guarantees unique ID's, so this should hold.
+        try:
+            if file_name in archive.namelist():
+                return  # File was already saved, no need to do it again. Uranium guarantees unique ID's, so this should hold.
 
-        file_in_archive = zipfile.ZipInfo(file_name)
-        # For some reason we have to set the compress type of each file as well (it doesn't keep the type of the entire archive)
-        file_in_archive.compress_type = zipfile.ZIP_DEFLATED
+            file_in_archive = zipfile.ZipInfo(file_name)
+            # For some reason we have to set the compress type of each file as well (it doesn't keep the type of the entire archive)
+            file_in_archive.compress_type = zipfile.ZIP_DEFLATED
 
-        # Do not include the network authentication keys
-        ignore_keys = {"network_authentication_id", "network_authentication_key", "octoprint_api_key"}
-        serialized_data = container.serialize(ignored_metadata_keys = ignore_keys)
+            # Do not include the network authentication keys
+            ignore_keys = {"network_authentication_id", "network_authentication_key", "octoprint_api_key"}
+            serialized_data = container.serialize(ignored_metadata_keys = ignore_keys)
 
-        archive.writestr(file_in_archive, serialized_data)
+            archive.writestr(file_in_archive, serialized_data)
+        except (FileNotFoundError, EnvironmentError):
+            Logger.error("File became inaccessible while writing to it: {archive_filename}".format(archive_filename = archive.fp.name))
+            return