From 4f2c76e462d8db59ca362cdf6687a7aa2505b617 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Wed, 12 Apr 2017 15:25:15 +0200 Subject: [PATCH 1/2] Update a profile when deserializing it CURA-3540 --- .../XmlMaterialProfile/XmlMaterialProfile.py | 28 +++++++++++++++++-- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/plugins/XmlMaterialProfile/XmlMaterialProfile.py b/plugins/XmlMaterialProfile/XmlMaterialProfile.py index 7dc565ce26..76a33ce8e3 100644 --- a/plugins/XmlMaterialProfile/XmlMaterialProfile.py +++ b/plugins/XmlMaterialProfile/XmlMaterialProfile.py @@ -11,7 +11,7 @@ from UM.Util import parseBool from cura.CuraApplication import CuraApplication import UM.Dictionary -from UM.Settings.InstanceContainer import InstanceContainer +from UM.Settings.InstanceContainer import InstanceContainer, InvalidInstanceError from UM.Settings.ContainerRegistry import ContainerRegistry ## Handles serializing and deserializing material containers from an XML file @@ -369,8 +369,30 @@ class XmlMaterialProfile(InstanceContainer): self._dirty = False self._path = "" + def getConfigurationType(self) -> str: + return "material" # FIXME: not sure if this is correct + + def getVersionFromSerialized(self, serialized: str) -> int: + version = None + data = ET.fromstring(serialized) + metadata = data.iterfind("./um:metadata/*", self.__namespaces) + for entry in metadata: + tag_name = _tag_without_namespace(entry) + if tag_name == "version": + try: + version = int(entry.text) + except Exception as e: + raise InvalidInstanceError("Invalid version string '%s': %s" % (entry.text, e)) + break + if version is None: + raise InvalidInstanceError("Missing version in metadata") + return version + ## Overridden from InstanceContainer def deserialize(self, serialized): + # update the serialized data first + from UM.Settings.Interfaces import ContainerInterface + serialized = ContainerInterface.deserialize(self, serialized) data = ET.fromstring(serialized) # Reset previous metadata @@ -405,10 +427,10 @@ class XmlMaterialProfile(InstanceContainer): continue meta_data[tag_name] = entry.text - if not "description" in meta_data: + if "description" not in meta_data: meta_data["description"] = "" - if not "adhesion_info" in meta_data: + if "adhesion_info" not in meta_data: meta_data["adhesion_info"] = "" property_values = {} From b3f60c461b047c669e63a861339faf748f3bfe60 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Fri, 14 Apr 2017 15:40:15 +0200 Subject: [PATCH 2/2] Fix type hinting and function name for upgrade profile CURA-3540 --- plugins/XmlMaterialProfile/XmlMaterialProfile.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/plugins/XmlMaterialProfile/XmlMaterialProfile.py b/plugins/XmlMaterialProfile/XmlMaterialProfile.py index 76a33ce8e3..1e1ea7ce59 100644 --- a/plugins/XmlMaterialProfile/XmlMaterialProfile.py +++ b/plugins/XmlMaterialProfile/XmlMaterialProfile.py @@ -3,6 +3,7 @@ import copy import io +from typing import Optional import xml.etree.ElementTree as ET from UM.Resources import Resources @@ -369,10 +370,10 @@ class XmlMaterialProfile(InstanceContainer): self._dirty = False self._path = "" - def getConfigurationType(self) -> str: - return "material" # FIXME: not sure if this is correct + def getConfigurationTypeFromSerialized(self, serialized: str) -> Optional[str]: + return "material" - def getVersionFromSerialized(self, serialized: str) -> int: + def getVersionFromSerialized(self, serialized: str) -> Optional[int]: version = None data = ET.fromstring(serialized) metadata = data.iterfind("./um:metadata/*", self.__namespaces)