Browse Source

Be more robust to broken input files

We've seen from experience that people do end up with broken files, due to user-modifications and whatnot. Corrupting it further won't make things better for the user.

Contributes to issue CURA-8212.
Ghostkeeper 3 years ago
parent
commit
a00b21a802

+ 9 - 3
plugins/VersionUpgrade/VersionUpgrade49to410/VersionUpgrade49to410.py

@@ -103,20 +103,24 @@ class VersionUpgrade49to410(VersionUpgrade):
         parser.read_string(serialized)
 
         # Update setting version number.
+        if "metadata" not in parser:
+            parser["metadata"] = {}
         parser["metadata"]["setting_version"] = "17"
 
+        if "general" not in parser:
+            parser["general"] = {}
         # Certain instance containers (such as definition changes) reference to a certain definition container
         # Since a number of those changed name, we also need to update those.
-        old_definition = parser["general"]["definition"]
+        old_definition = parser.get("general", "definition", fallback = "")
         if old_definition in self._renamed_profiles:
             parser["general"]["definition"] = self._renamed_profiles[old_definition]
 
         # For quality-changes profiles made for TwoTrees Bluer printers, change the definition to the two_trees_base and make sure that the quality is something we have a profile for.
-        if parser["metadata"].get("type", "") == "quality_changes":
+        if parser.get("metadata", "type", fallback = "") == "quality_changes":
             for possible_printer in self._quality_changes_to_two_trees_base:
                 if os.path.basename(filename).startswith(possible_printer + "_"):
                     parser["general"]["definition"] = "two_trees_base"
-                    parser["metadata"]["quality_type"] = self._two_trees_bluer_quality_type_conversion.get(parser["metadata"]["quality_type"], "standard")
+                    parser["metadata"]["quality_type"] = self._two_trees_bluer_quality_type_conversion.get(parser.get("metadata", "quality_type", fallback = "fast"), "standard")
                     break
 
         result = io.StringIO()
@@ -130,6 +134,8 @@ class VersionUpgrade49to410(VersionUpgrade):
         parser.read_string(serialized)
 
         # Update setting version number.
+        if "metadata" not in parser:
+            parser["metadata"] = {}
         parser["metadata"]["setting_version"] = "17"
 
         # Change renamed profiles.