Пример #1
0
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
Пример #2
0
    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
Пример #3
0
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
Пример #4
0
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
Пример #5
0
    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
Пример #6
0
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",