diff --git a/cura/Settings/CuraContainerRegistry.py b/cura/Settings/CuraContainerRegistry.py index 295d843fd7..6130019f4d 100644 --- a/cura/Settings/CuraContainerRegistry.py +++ b/cura/Settings/CuraContainerRegistry.py @@ -32,6 +32,10 @@ from cura.Machines.ContainerTree import ContainerTree from cura.ReaderWriters.ProfileReader import NoProfileException, ProfileReader from UM.i18n import i18nCatalog +from .DatabaseHandlers.IntentDatabaseHandler import IntentDatabaseHandler +from .DatabaseHandlers.QualityDatabaseHandler import QualityDatabaseHandler +from .DatabaseHandlers.VariantDatabaseHandler import VariantDatabaseHandler + catalog = i18nCatalog("cura") @@ -44,6 +48,10 @@ class CuraContainerRegistry(ContainerRegistry): # is added, we check to see if an extruder stack needs to be added. self.containerAdded.connect(self._onContainerAdded) + self._database_handlers["variant"] = VariantDatabaseHandler() + self._database_handlers["quality"] = QualityDatabaseHandler() + self._database_handlers["intent"] = IntentDatabaseHandler() + @override(ContainerRegistry) def addContainer(self, container: ContainerInterface) -> bool: """Overridden from ContainerRegistry diff --git a/cura/Settings/DatabaseHandlers/IntentDatabaseHandler.py b/cura/Settings/DatabaseHandlers/IntentDatabaseHandler.py new file mode 100644 index 0000000000..cd6c662591 --- /dev/null +++ b/cura/Settings/DatabaseHandlers/IntentDatabaseHandler.py @@ -0,0 +1,25 @@ +# Copyright (c) 2021 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +from UM.Settings.SQLQueryFactory import SQLQueryFactory +from UM.Settings.DatabaseContainerMetadataController import DatabaseMetadataContainerController +from UM.Settings.InstanceContainer import InstanceContainer + + +class IntentDatabaseHandler(DatabaseMetadataContainerController): + """The Database handler for Intent containers""" + + def __init__(self) -> None: + super().__init__(SQLQueryFactory(table = "intent", + fields = { + "id": "text", + "name": "text", + "quality_type": "text", + "intent_category": "text", + "variant": "text", + "definition": "text", + "material": "text", + "version": "text", + "setting_version": "text" + })) + self._container_type = InstanceContainer diff --git a/cura/Settings/DatabaseHandlers/QualityDatabaseHandler.py b/cura/Settings/DatabaseHandlers/QualityDatabaseHandler.py new file mode 100644 index 0000000000..477bb56465 --- /dev/null +++ b/cura/Settings/DatabaseHandlers/QualityDatabaseHandler.py @@ -0,0 +1,38 @@ +# Copyright (c) 2021 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +from UM.Settings.SQLQueryFactory import SQLQueryFactory, metadata_type +from UM.Settings.DatabaseContainerMetadataController import DatabaseMetadataContainerController +from UM.Settings.InstanceContainer import InstanceContainer + + +class QualityDatabaseHandler(DatabaseMetadataContainerController): + """The Database handler for Quality containers""" + + def __init__(self): + super().__init__(SQLQueryFactory(table = "quality", + fields = { + "id": "text", + "name": "text", + "quality_type": "text", + "material": "text", + "variant": "text", + "global_quality": "bool", + "definition": "text", + "version": "text", + "setting_version": "text" + })) + self._container_type = InstanceContainer + + def groomMetadata(self, metadata: metadata_type) -> metadata_type: + """ + Ensures that the metadata is in the order of the field keys and has the right size. + if the metadata doesn't contains a key which is stored in the DB it will add it as + an empty string. Key, value pairs that are not stored in the DB are dropped. + If the `global_quality` isn't set it well default to 'False' + + :param metadata: The container metadata + """ + if "global_quality" not in metadata: + metadata["global_quality"] = "False" + return super().groomMetadata(metadata) diff --git a/cura/Settings/DatabaseHandlers/VariantDatabaseHandler.py b/cura/Settings/DatabaseHandlers/VariantDatabaseHandler.py new file mode 100644 index 0000000000..4b1deae356 --- /dev/null +++ b/cura/Settings/DatabaseHandlers/VariantDatabaseHandler.py @@ -0,0 +1,22 @@ +# Copyright (c) 2021 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +from UM.Settings.SQLQueryFactory import SQLQueryFactory +from UM.Settings.DatabaseContainerMetadataController import DatabaseMetadataContainerController +from UM.Settings.InstanceContainer import InstanceContainer + + +class VariantDatabaseHandler(DatabaseMetadataContainerController): + """The Database handler for Variant containers""" + + def __init__(self): + super().__init__(SQLQueryFactory(table = "variant", + fields = { + "id": "text", + "name": "text", + "hardware_type": "text", + "definition": "text", + "version": "text", + "setting_version": "text" + })) + self._container_type = InstanceContainer diff --git a/cura/Settings/DatabaseHandlers/__init__.py b/cura/Settings/DatabaseHandlers/__init__.py new file mode 100644 index 0000000000..e69de29bb2