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.
This commit is contained in:
Ghostkeeper 2021-05-18 17:19:06 +02:00
parent 6f5c3a0c4c
commit a00b21a802
No known key found for this signature in database
GPG key ID: D2A8871EE34EC59A

View file

@ -103,20 +103,24 @@ class VersionUpgrade49to410(VersionUpgrade):
parser.read_string(serialized) parser.read_string(serialized)
# Update setting version number. # Update setting version number.
if "metadata" not in parser:
parser["metadata"] = {}
parser["metadata"]["setting_version"] = "17" 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 # 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. # 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: if old_definition in self._renamed_profiles:
parser["general"]["definition"] = self._renamed_profiles[old_definition] 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. # 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: for possible_printer in self._quality_changes_to_two_trees_base:
if os.path.basename(filename).startswith(possible_printer + "_"): if os.path.basename(filename).startswith(possible_printer + "_"):
parser["general"]["definition"] = "two_trees_base" 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 break
result = io.StringIO() result = io.StringIO()
@ -130,6 +134,8 @@ class VersionUpgrade49to410(VersionUpgrade):
parser.read_string(serialized) parser.read_string(serialized)
# Update setting version number. # Update setting version number.
if "metadata" not in parser:
parser["metadata"] = {}
parser["metadata"]["setting_version"] = "17" parser["metadata"]["setting_version"] = "17"
# Change renamed profiles. # Change renamed profiles.