Validate material profile

CURA-4851
This commit is contained in:
alekseisasin 2018-01-31 14:58:44 +01:00
parent 36eded925c
commit e5c72cfdc5
3 changed files with 10 additions and 3 deletions

View file

@ -459,7 +459,7 @@ class ContainerManager(QObject):
# \return \type{Dict} dict with a 'status' key containing the string 'success' or 'error', and a 'message' key # \return \type{Dict} dict with a 'status' key containing the string 'success' or 'error', and a 'message' key
# containing a message for the user # containing a message for the user
@pyqtSlot(QUrl, result = "QVariantMap") @pyqtSlot(QUrl, result = "QVariantMap")
def importContainer(self, file_url_or_string: Union[QUrl, str]) -> Dict[str, str]: def importMaterialContainer(self, file_url_or_string: Union[QUrl, str]) -> Dict[str, str]:
if not file_url_or_string: if not file_url_or_string:
return { "status": "error", "message": "Invalid path"} return { "status": "error", "message": "Invalid path"}
@ -490,8 +490,9 @@ class ContainerManager(QObject):
container.deserialize(f.read()) container.deserialize(f.read())
except PermissionError: except PermissionError:
return { "status": "error", "message": "Permission denied when trying to read the file"} return { "status": "error", "message": "Permission denied when trying to read the file"}
except Exception as ex:
return {"status": "error", "message": str(ex)}
container.setName(container_id)
container.setDirty(True) container.setDirty(True)
self._container_registry.addContainer(container) self._container_registry.addContainer(container)

View file

@ -17,6 +17,8 @@ import UM.Dictionary
from UM.Settings.InstanceContainer import InstanceContainer from UM.Settings.InstanceContainer import InstanceContainer
from UM.Settings.ContainerRegistry import ContainerRegistry from UM.Settings.ContainerRegistry import ContainerRegistry
from .XmlMaterialValidator import XmlMaterialValidater
## Handles serializing and deserializing material containers from an XML file ## Handles serializing and deserializing material containers from an XML file
class XmlMaterialProfile(InstanceContainer): class XmlMaterialProfile(InstanceContainer):
CurrentFdmMaterialVersion = "1.3" CurrentFdmMaterialVersion = "1.3"
@ -480,6 +482,10 @@ class XmlMaterialProfile(InstanceContainer):
if "adhesion_info" not in meta_data: if "adhesion_info" not in meta_data:
meta_data["adhesion_info"] = "" meta_data["adhesion_info"] = ""
validation_message = XmlMaterialValidater.validateMaterialMetaDate(meta_data)
if validation_message is not None:
raise Exception("Not valid material profile: %s" % (validation_message))
property_values = {} property_values = {}
properties = data.iterfind("./um:properties/*", self.__namespaces) properties = data.iterfind("./um:properties/*", self.__namespaces)
for entry in properties: for entry in properties:

View file

@ -301,7 +301,7 @@ UM.ManagementPage
folder: CuraApplication.getDefaultPath("dialog_material_path") folder: CuraApplication.getDefaultPath("dialog_material_path")
onAccepted: onAccepted:
{ {
var result = Cura.ContainerManager.importContainer(fileUrl) var result = Cura.ContainerManager.importMaterialContainer(fileUrl)
messageDialog.title = catalog.i18nc("@title:window", "Import Material") messageDialog.title = catalog.i18nc("@title:window", "Import Material")
messageDialog.text = catalog.i18nc("@info:status Don't translate the XML tags <filename> or <message>!", "Could not import material <filename>%1</filename>: <message>%2</message>").arg(fileUrl).arg(result.message) messageDialog.text = catalog.i18nc("@info:status Don't translate the XML tags <filename> or <message>!", "Could not import material <filename>%1</filename>: <message>%2</message>").arg(fileUrl).arg(result.message)