mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-15 02:37:49 -06:00
More clear error handling for container deserialization
CURA-5045 - If a container cannot be deserialized in project loading, it should fail right on the spot because even if it continues, it still won't work. - In other places, at least log deserialization errors if any of them show up.
This commit is contained in:
parent
572721e20d
commit
4615c756a7
2 changed files with 12 additions and 4 deletions
|
@ -708,6 +708,7 @@ class CuraContainerRegistry(ContainerRegistry):
|
||||||
try:
|
try:
|
||||||
instance_container.deserialize(serialized, file_path)
|
instance_container.deserialize(serialized, file_path)
|
||||||
except ContainerFormatError:
|
except ContainerFormatError:
|
||||||
|
Logger.logException("e", "Unable to deserialize InstanceContainer %s", file_path)
|
||||||
continue
|
continue
|
||||||
self.addContainer(instance_container)
|
self.addContainer(instance_container)
|
||||||
break
|
break
|
||||||
|
|
|
@ -12,7 +12,6 @@ import xml.etree.ElementTree as ET
|
||||||
from UM.Workspace.WorkspaceReader import WorkspaceReader
|
from UM.Workspace.WorkspaceReader import WorkspaceReader
|
||||||
from UM.Application import Application
|
from UM.Application import Application
|
||||||
|
|
||||||
from UM.ConfigurationErrorMessage import ConfigurationErrorMessage
|
|
||||||
from UM.Logger import Logger
|
from UM.Logger import Logger
|
||||||
from UM.i18n import i18nCatalog
|
from UM.i18n import i18nCatalog
|
||||||
from UM.Signal import postponeSignals, CompressTechnique
|
from UM.Signal import postponeSignals, CompressTechnique
|
||||||
|
@ -337,7 +336,9 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
|
||||||
try:
|
try:
|
||||||
instance_container.deserialize(serialized, file_name = instance_container_file_name)
|
instance_container.deserialize(serialized, file_name = instance_container_file_name)
|
||||||
except ContainerFormatError:
|
except ContainerFormatError:
|
||||||
continue
|
Logger.logException("e", "Failed to deserialize InstanceContainer %s from project file %s",
|
||||||
|
instance_container_file_name, file_name)
|
||||||
|
return ThreeMFWorkspaceReader.PreReadResult.failed
|
||||||
if quality_changes[0] != instance_container:
|
if quality_changes[0] != instance_container:
|
||||||
quality_changes_conflict = True
|
quality_changes_conflict = True
|
||||||
elif container_type == "quality":
|
elif container_type == "quality":
|
||||||
|
@ -648,7 +649,11 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
|
||||||
definition_container.deserialize(archive.open(definition_container_file).read().decode("utf-8"),
|
definition_container.deserialize(archive.open(definition_container_file).read().decode("utf-8"),
|
||||||
file_name = definition_container_file)
|
file_name = definition_container_file)
|
||||||
except ContainerFormatError:
|
except ContainerFormatError:
|
||||||
continue #Skip this definition container file. Pretend there is none.
|
# We cannot just skip the definition file because everything else later will just break if the
|
||||||
|
# machine definition cannot be found.
|
||||||
|
Logger.logException("e", "Failed to deserialize definition file %s in project file %s",
|
||||||
|
definition_container_file, file_name)
|
||||||
|
raise
|
||||||
self._container_registry.addContainer(definition_container)
|
self._container_registry.addContainer(definition_container)
|
||||||
Job.yieldThread()
|
Job.yieldThread()
|
||||||
|
|
||||||
|
@ -691,7 +696,9 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
|
||||||
material_container.deserialize(archive.open(material_container_file).read().decode("utf-8"),
|
material_container.deserialize(archive.open(material_container_file).read().decode("utf-8"),
|
||||||
file_name = container_id + "." + self._material_container_suffix)
|
file_name = container_id + "." + self._material_container_suffix)
|
||||||
except ContainerFormatError:
|
except ContainerFormatError:
|
||||||
continue #Pretend that this material didn't exist.
|
Logger.logException("e", "Failed to deserialize material file %s in project file %s",
|
||||||
|
material_container_file, file_name)
|
||||||
|
raise
|
||||||
if need_new_name:
|
if need_new_name:
|
||||||
new_name = ContainerRegistry.getInstance().uniqueName(material_container.getName())
|
new_name = ContainerRegistry.getInstance().uniqueName(material_container.getName())
|
||||||
material_container.setName(new_name)
|
material_container.setName(new_name)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue