def test_createMachine(application, container_registry, definition_container, global_variant, material_instance_container, quality_container, quality_changes_container): variant_manager = MagicMock(name = "Variant Manager") quality_manager = MagicMock(name = "Quality Manager") global_variant_node = MagicMock( name = "global variant node") global_variant_node.getContainer = MagicMock(return_value = global_variant) variant_manager.getDefaultVariantNode = MagicMock(return_value = global_variant_node) quality_group = QualityGroup(name = "zomg", quality_type = "normal") quality_group.node_for_global = MagicMock(name = "Node for global") quality_group.node_for_global.getContainer = MagicMock(return_value = quality_container) quality_manager.getQualityGroups = MagicMock(return_value = {"normal": quality_group}) application.getContainerRegistry = MagicMock(return_value=container_registry) application.getVariantManager = MagicMock(return_value = variant_manager) application.getQualityManager = MagicMock(return_value = quality_manager) application.empty_material_container = material_instance_container application.empty_quality_container = quality_container application.empty_quality_changes_container = quality_changes_container metadata = definition_container.getMetaData() metadata["machine_extruder_trains"] = {} metadata["preferred_quality_type"] = "normal" container_registry.addContainer(definition_container) with patch("cura.CuraApplication.CuraApplication.getInstance", MagicMock(return_value=application)): machine = CuraStackBuilder.createMachine("Whatever", "Test Definition") assert machine.quality == quality_container assert machine.definition == definition_container assert machine.variant == global_variant
def getQualityGroups(self, variant_names: List[str], material_bases: List[str], extruder_enabled: List[bool]) -> Dict[str, QualityGroup]: """Get the available quality groups for this machine. This returns all quality groups, regardless of whether they are available to the combination of extruders or not. On the resulting quality groups, the is_available property is set to indicate whether the quality group can be selected according to the combination of extruders in the parameters. :param variant_names: The names of the variants loaded in each extruder. :param material_bases: The base file names of the materials loaded in each extruder. :param extruder_enabled: Whether or not the extruders are enabled. This allows the function to set the is_available properly. :return: For each available quality type, a QualityGroup instance. """ if len(variant_names) != len(material_bases) or len(variant_names) != len(extruder_enabled): Logger.log("e", "The number of extruders in the list of variants (" + str(len(variant_names)) + ") is not equal to the number of extruders in the list of materials (" + str(len(material_bases)) + ") or the list of enabled extruders (" + str(len(extruder_enabled)) + ").") return {} # For each extruder, find which quality profiles are available. Later we'll intersect the quality types. qualities_per_type_per_extruder = [{}] * len(variant_names) # type: List[Dict[str, QualityNode]] for extruder_nr, variant_name in enumerate(variant_names): if not extruder_enabled[extruder_nr]: continue # No qualities are available in this extruder. It'll get skipped when calculating the available quality types. material_base = material_bases[extruder_nr] if variant_name not in self.variants or material_base not in self.variants[variant_name].materials: # The printer has no variant/material-specific quality profiles. Use the global quality profiles. qualities_per_type_per_extruder[extruder_nr] = self.global_qualities else: # Use the actually specialised quality profiles. qualities_per_type_per_extruder[extruder_nr] = {node.quality_type: node for node in self.variants[variant_name].materials[material_base].qualities.values()} # Create the quality group for each available type. quality_groups = {} for quality_type, global_quality_node in self.global_qualities.items(): if not global_quality_node.container: Logger.log("w", "Node {0} doesn't have a container.".format(global_quality_node.container_id)) continue quality_groups[quality_type] = QualityGroup(name = global_quality_node.getMetaDataEntry("name", "Unnamed profile"), quality_type = quality_type) quality_groups[quality_type].node_for_global = global_quality_node for extruder_position, qualities_per_type in enumerate(qualities_per_type_per_extruder): if quality_type in qualities_per_type: quality_groups[quality_type].setExtruderNode(extruder_position, qualities_per_type[quality_type]) available_quality_types = set(quality_groups.keys()) for extruder_nr, qualities_per_type in enumerate(qualities_per_type_per_extruder): if not extruder_enabled[extruder_nr]: continue available_quality_types.intersection_update(qualities_per_type.keys()) for quality_type in available_quality_types: quality_groups[quality_type].is_available = True return quality_groups
def test_createMachine(application, container_registry, definition_container, global_variant, material_instance_container, quality_container, intent_container, quality_changes_container): variant_manager = MagicMock(name="Variant Manager") quality_manager = MagicMock(name="Quality Manager") global_variant_node = MagicMock(name="global variant node") global_variant_node.container = global_variant variant_manager.getDefaultVariantNode = MagicMock( return_value=global_variant_node) quality_group = QualityGroup(name="zomg", quality_type="normal") quality_group.node_for_global = MagicMock(name="Node for global") quality_group.node_for_global.container = quality_container quality_manager.getQualityGroups = MagicMock( return_value={"normal": quality_group}) application.getContainerRegistry = MagicMock( return_value=container_registry) application.empty_material_container = material_instance_container application.empty_quality_container = quality_container application.empty_intent_container = intent_container application.empty_quality_changes_container = quality_changes_container application.empty_variant_container = global_variant metadata = definition_container.getMetaData() metadata["machine_extruder_trains"] = {} metadata["preferred_quality_type"] = "normal" container_registry.addContainer(definition_container) quality_node = MagicMock() machine_node = MagicMock() machine_node.preferredGlobalQuality = MagicMock(return_value=quality_node) quality_node.container = quality_container # Patch out the creation of MachineNodes since that isn't under test (and would require quite a bit of extra setup) with patch("cura.Machines.ContainerTree.MachineNode", MagicMock(return_value=machine_node)): with patch("cura.CuraApplication.CuraApplication.getInstance", MagicMock(return_value=application)): machine = CuraStackBuilder.createMachine("Whatever", "Test Definition") assert machine.quality == quality_container assert machine.definition == definition_container assert machine.variant == global_variant
def test_createMachine(application, container_registry, definition_container, global_variant, material_instance_container, quality_container, quality_changes_container): variant_manager = MagicMock(name="Variant Manager") quality_manager = MagicMock(name="Quality Manager") global_variant_node = MagicMock(name="global variant node") global_variant_node.getContainer = MagicMock(return_value=global_variant) variant_manager.getDefaultVariantNode = MagicMock( return_value=global_variant_node) quality_group = QualityGroup(name="zomg", quality_type="normal") quality_group.node_for_global = MagicMock(name="Node for global") quality_group.node_for_global.getContainer = MagicMock( return_value=quality_container) quality_manager.getQualityGroups = MagicMock( return_value={"normal": quality_group}) application.getContainerRegistry = MagicMock( return_value=container_registry) application.getVariantManager = MagicMock(return_value=variant_manager) application.getQualityManager = MagicMock(return_value=quality_manager) application.empty_material_container = material_instance_container application.empty_quality_container = quality_container application.empty_quality_changes_container = quality_changes_container metadata = definition_container.getMetaData() metadata["machine_extruder_trains"] = {} metadata["preferred_quality_type"] = "normal" container_registry.addContainer(definition_container) with patch("cura.CuraApplication.CuraApplication.getInstance", MagicMock(return_value=application)): machine = CuraStackBuilder.createMachine("Whatever", "Test Definition") assert machine.quality == quality_container assert machine.definition == definition_container assert machine.variant == global_variant
def getQualityGroups(self, variant_names: List[str], material_bases: List[str], extruder_enabled: List[bool]) -> Dict[str, QualityGroup]: if len(variant_names) != len(material_bases) or len(variant_names) != len(extruder_enabled): Logger.log("e", "The number of extruders in the list of variants (" + str(len(variant_names)) + ") is not equal to the number of extruders in the list of materials (" + str(len(material_bases)) + ") or the list of enabled extruders (" + str(len(extruder_enabled)) + ").") return {} # For each extruder, find which quality profiles are available. Later we'll intersect the quality types. qualities_per_type_per_extruder = [{}] * len(variant_names) # type: List[Dict[str, QualityNode]] for extruder_nr, variant_name in enumerate(variant_names): if not extruder_enabled[extruder_nr]: continue # No qualities are available in this extruder. It'll get skipped when calculating the available quality types. material_base = material_bases[extruder_nr] if variant_name not in self.variants or material_base not in self.variants[variant_name].materials: # The printer has no variant/material-specific quality profiles. Use the global quality profiles. qualities_per_type_per_extruder[extruder_nr] = self.global_qualities else: # Use the actually specialised quality profiles. qualities_per_type_per_extruder[extruder_nr] = {node.quality_type: node for node in self.variants[variant_name].materials[material_base].qualities.values()} # Create the quality group for each available type. quality_groups = {} for quality_type, global_quality_node in self.global_qualities.items(): if not global_quality_node.container: Logger.log("w", "Node {0} doesn't have a container.".format(global_quality_node.container_id)) continue quality_groups[quality_type] = QualityGroup(name = global_quality_node.getMetaDataEntry("name", "Unnamed profile"), quality_type = quality_type) quality_groups[quality_type].node_for_global = global_quality_node for extruder, qualities_per_type in enumerate(qualities_per_type_per_extruder): if quality_type in qualities_per_type: quality_groups[quality_type].nodes_for_extruders[extruder] = qualities_per_type[quality_type] available_quality_types = set(quality_groups.keys()) for extruder_nr, qualities_per_type in enumerate(qualities_per_type_per_extruder): if not extruder_enabled[extruder_nr]: continue available_quality_types.intersection_update(qualities_per_type.keys()) for quality_type in available_quality_types: quality_groups[quality_type].is_available = True return quality_groups
import pytest from typing import Any, Dict, List from cura.Settings.IntentManager import IntentManager from cura.Machines.QualityGroup import QualityGroup from tests.Settings.MockContainer import MockContainer mocked_intent_metadata = [ {"id": "um3_aa4_pla_smooth_normal", "GUID": "abcxyz", "definition": "ultimaker3", "variant": "AA 0.4", "material_id": "generic_pla", "intent_category": "smooth", "quality_type": "normal"}, {"id": "um3_aa4_pla_strong_abnorm", "GUID": "defqrs", "definition": "ultimaker3", "variant": "AA 0.4", "material_id": "generic_pla", "intent_category": "strong", "quality_type": "abnorm"}] # type:List[Dict[str, str]] mocked_qualitygroup_metadata = { "normal": QualityGroup("um3_aa4_pla_normal", "normal"), "abnorm": QualityGroup("um3_aa4_pla_abnorm", "abnorm")} # type: Dict[str, QualityGroup] @pytest.fixture def mock_container_tree() -> MagicMock: container_tree = MagicMock() container_tree.getCurrentQualityGroups = MagicMock(return_value = mocked_qualitygroup_metadata) container_tree.machines = { "ultimaker3": MagicMock( variants = { "AA 0.4": MagicMock( materials = { "generic_pla": MagicMock( qualities = { "um3_aa4_pla_normal": MagicMock( quality_type = "normal",