diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py index ff7e30b7a9..b8656565a8 100755 --- a/cura/CuraApplication.py +++ b/cura/CuraApplication.py @@ -307,7 +307,7 @@ class CuraApplication(QtApplication): super().initialize() self.__sendCommandToSingleInstance() - self.__initializeSettingDefinitionsAndFunctions() + self._initializeSettingDefinitionsAndFunctions() self.__addAllResourcesAndContainerResources() self.__addAllEmptyContainers() self.__setLatestResouceVersionsForVersionUpgrade() @@ -338,7 +338,7 @@ class CuraApplication(QtApplication): # Adds custom property types, settings types, and extra operators (functions) that need to be registered in # SettingDefinition and SettingFunction. - def __initializeSettingDefinitionsAndFunctions(self): + def _initializeSettingDefinitionsAndFunctions(self): self._cura_formula_functions = CuraFormulaFunctions(self) # Need to do this before ContainerRegistry tries to load the machines diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPE_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPE_Draft_Print.inst.cfg index fdd8bd6d39..52f22f807f 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPE_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPE_Draft_Print.inst.cfg @@ -28,7 +28,6 @@ wall_thickness = 1 infill_pattern = triangles speed_infill = =math.ceil(speed_print * 50 / 60) -prime_tower_purge_volume = 1 material_bed_temperature_layer_0 = 90 default_material_bed_temperature = 80 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPE_Fast_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPE_Fast_Print.inst.cfg index e40a6422db..117a9e0273 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPE_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPE_Fast_Print.inst.cfg @@ -26,7 +26,6 @@ speed_wall_0 = =math.ceil(speed_wall * 30 / 40) infill_pattern = triangles speed_infill = =math.ceil(speed_print * 50 / 60) -prime_tower_purge_volume = 1 material_bed_temperature_layer_0 = 90 default_material_bed_temperature = 80 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPE_High_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPE_High_Quality.inst.cfg index 68d0d77fdb..d25ab9f605 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPE_High_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPE_High_Quality.inst.cfg @@ -27,7 +27,6 @@ speed_wall = =math.ceil(speed_print * 30 / 50) infill_pattern = triangles speed_infill = =math.ceil(speed_print * 40 / 50) -prime_tower_purge_volume = 1 material_bed_temperature_layer_0 = 90 default_material_bed_temperature = 80 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPE_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPE_Normal_Quality.inst.cfg index 563aa27b70..bafc867d14 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPE_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPE_Normal_Quality.inst.cfg @@ -25,7 +25,6 @@ speed_wall = =math.ceil(speed_print * 30 / 55) infill_pattern = triangles speed_infill = =math.ceil(speed_print * 45 / 55) -prime_tower_purge_volume = 1 material_bed_temperature_layer_0 = 90 default_material_bed_temperature = 80 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPE_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPE_Draft_Print.inst.cfg index a0c0890b1b..67132b67fc 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPE_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPE_Draft_Print.inst.cfg @@ -24,7 +24,6 @@ speed_topbottom = =math.ceil(speed_print * 25 / 40) speed_wall = =math.ceil(speed_print * 30 / 40) jerk_travel = 50 -prime_tower_purge_volume = 1 material_bed_temperature_layer_0 = 90 default_material_bed_temperature = 80 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPE_Superdraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPE_Superdraft_Print.inst.cfg index ca001b62ed..49e70af112 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPE_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPE_Superdraft_Print.inst.cfg @@ -25,7 +25,6 @@ speed_wall = =math.ceil(speed_print * 40 / 45) speed_wall_0 = =math.ceil(speed_wall * 30 / 40) jerk_travel = 50 -prime_tower_purge_volume = 1 material_bed_temperature_layer_0 = 90 default_material_bed_temperature = 80 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPE_Verydraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPE_Verydraft_Print.inst.cfg index ea0cd0fa83..9d781092b1 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPE_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPE_Verydraft_Print.inst.cfg @@ -24,7 +24,6 @@ speed_topbottom = =math.ceil(speed_print * 25 / 40) speed_wall = =math.ceil(speed_print * 30 / 40) jerk_travel = 50 -prime_tower_purge_volume = 1 material_bed_temperature_layer_0 = 90 default_material_bed_temperature = 80 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PP_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PP_Draft_Print.inst.cfg index 764dc75494..3569aac74b 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PP_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PP_Draft_Print.inst.cfg @@ -30,7 +30,6 @@ material_standby_temperature = 100 multiple_mesh_overlap = 0.2 prime_tower_enable = True prime_tower_flow = 100 -prime_tower_wall_thickness = =prime_tower_line_width * 2 retract_at_layer_change = False retraction_count_max = 12 retraction_extra_prime_amount = 0.5 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PP_Superdraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PP_Superdraft_Print.inst.cfg index 63a594d3e0..0e10a17210 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PP_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PP_Superdraft_Print.inst.cfg @@ -30,7 +30,6 @@ material_standby_temperature = 100 multiple_mesh_overlap = 0.2 prime_tower_enable = True prime_tower_flow = 100 -prime_tower_wall_thickness = =prime_tower_line_width * 2 retract_at_layer_change = False retraction_count_max = 12 retraction_extra_prime_amount = 0.5 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PP_Verydraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PP_Verydraft_Print.inst.cfg index 7de41de9c9..79d58f56f4 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PP_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PP_Verydraft_Print.inst.cfg @@ -29,7 +29,6 @@ material_standby_temperature = 100 multiple_mesh_overlap = 0.2 prime_tower_enable = True prime_tower_flow = 100 -prime_tower_wall_thickness = =prime_tower_line_width * 2 retract_at_layer_change = False retraction_count_max = 12 retraction_extra_prime_amount = 0.5 diff --git a/tests/Settings/TestQualities.py b/tests/Settings/TestQualities.py index b27debb962..a11ebba8c6 100644 --- a/tests/Settings/TestQualities.py +++ b/tests/Settings/TestQualities.py @@ -1,13 +1,18 @@ # Copyright (c) 2019 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. +from unittest.mock import MagicMock import pytest +from UM.Settings.DefinitionContainer import DefinitionContainer from UM.Settings.InstanceContainer import InstanceContainer import os import os.path +from UM.VersionUpgradeManager import VersionUpgradeManager +from cura.CuraApplication import CuraApplication + def collectAllQualities(): result = [] @@ -25,8 +30,21 @@ def collecAllDefinitionIds(): return result +def collectAllSettingIds(): + VersionUpgradeManager._VersionUpgradeManager__instance = VersionUpgradeManager(MagicMock()) + + application = CuraApplication() + application._initializeSettingDefinitionsAndFunctions() + + definition_container = DefinitionContainer("whatever") + with open(os.path.join(os.path.dirname(__file__), "..", "..", "resources", "definitions", "fdmprinter.def.json"), encoding="utf-8") as data: + definition_container.deserialize(data.read()) + return definition_container.getAllKeys() + + all_definition_ids = collecAllDefinitionIds() quality_filepaths = collectAllQualities() +all_setting_ids = collectAllSettingIds() ## Atempt to load all the quality types @@ -34,13 +52,27 @@ quality_filepaths = collectAllQualities() def test_validateQualityProfiles(file_name): try: with open(file_name, encoding="utf-8") as data: - json = data.read() - result = InstanceContainer._readAndValidateSerialized(json) + serialized = data.read() + result = InstanceContainer._readAndValidateSerialized(serialized) # Fairly obvious, but all the types here should be of the type quality - assert InstanceContainer.getConfigurationTypeFromSerialized(json) == "quality" + assert InstanceContainer.getConfigurationTypeFromSerialized(serialized) == "quality" # All quality profiles must be linked to an existing definition. assert result["general"]["definition"] in all_definition_ids + # We don't care what the value is, as long as it's there. + assert result["metadata"].get("quality_type", None) is not None + + # Check that all the values that we say something about are known. + if "values" in result: + quality_setting_keys = set(result["values"]) + # Prune all the comments from the values + quality_setting_keys = {key for key in quality_setting_keys if not key.startswith("#")} + + has_unknown_settings = not quality_setting_keys.issubset(all_setting_ids) + if has_unknown_settings: + print("The following setting(s) %s are defined in the quality %s, but not in fdmprinter.def.json" % ([key for key in quality_setting_keys if key not in all_setting_ids], file_name)) + assert False + except Exception as e: # File can't be read, header sections missing, whatever the case, this shouldn't happen! print("Go an Exception while reading he file [%s]: %s" % (file_name, e))