diff --git a/cura/Machines/MachineNode.py b/cura/Machines/MachineNode.py index aa4db8bb8f9..67b8559b2e0 100644 --- a/cura/Machines/MachineNode.py +++ b/cura/Machines/MachineNode.py @@ -1,8 +1,9 @@ -# Copyright (c) 2019 Ultimaker B.V. +# Copyright (c) 2024 UltiMaker # Cura is released under the terms of the LGPLv3 or higher. from typing import Dict, List +from UM.Decorators import deprecated from UM.Logger import Logger from UM.Signal import Signal from UM.Util import parseBool @@ -168,13 +169,18 @@ def preferredGlobalQuality(self) -> "QualityNode": return self.global_qualities.get(self.preferred_quality_type, next(iter(self.global_qualities.values()))) - def isExcludedMaterial(self, material: MaterialNode) -> bool: + def isExcludedMaterialBaseFile(self, material_base_file: str) -> bool: """Returns whether the material should be excluded from the list of materials.""" for exclude_material in self.exclude_materials: - if exclude_material in material["id"]: + if exclude_material in material_base_file: return True return False + @deprecated("Use isExcludedMaterialBaseFile instead.", since = "5.9.0") + def isExcludedMaterial(self, material: MaterialNode) -> bool: + """Returns whether the material should be excluded from the list of materials.""" + return self.isExcludedMaterialBaseFile(material.base_file) + @UM.FlameProfiler.profile def _loadAll(self) -> None: """(Re)loads all variants under this printer.""" diff --git a/cura/Machines/VariantNode.py b/cura/Machines/VariantNode.py index b976841aa75..e037c9259dd 100644 --- a/cura/Machines/VariantNode.py +++ b/cura/Machines/VariantNode.py @@ -60,7 +60,7 @@ def _loadAll(self) -> None: materials = list(materials_per_base_file.values()) # Filter materials based on the exclude_materials property. - filtered_materials = [material for material in materials if not self.machine.isExcludedMaterial(material)] + filtered_materials = [material for material in materials if not self.machine.isExcludedMaterialBaseFile(material["id"])] for material in filtered_materials: base_file = material["base_file"] @@ -127,7 +127,7 @@ def _materialAdded(self, container: ContainerInterface) -> None: material_definition = container.getMetaDataEntry("definition") base_file = container.getMetaDataEntry("base_file") - if base_file in self.machine.exclude_materials: + if self.machine.isExcludedMaterialBaseFile(base_file): return # Material is forbidden for this printer. if base_file not in self.materials: # Completely new base file. Always better than not having a file as long as it matches our set-up. if material_definition != "fdmprinter" and material_definition != self.machine.container_id: diff --git a/tests/Machines/TestVariantNode.py b/tests/Machines/TestVariantNode.py index e15d64a4444..c84aaae36dc 100644 --- a/tests/Machines/TestVariantNode.py +++ b/tests/Machines/TestVariantNode.py @@ -46,7 +46,7 @@ def getInstanceContainerSideEffect(*args, **kwargs): def machine_node(): mocked_machine_node = MagicMock() mocked_machine_node.container_id = "machine_1" - mocked_machine_node.isExcludedMaterial = MagicMock(return_value=False) + mocked_machine_node.isExcludedMaterialBaseFile = MagicMock(return_value=False) mocked_machine_node.preferred_material = "preferred_material" return mocked_machine_node @@ -96,7 +96,7 @@ def test_variantNodeInit(container_registry, machine_node): def test_variantNodeInit_excludedMaterial(container_registry, machine_node): machine_node.exclude_materials = ["material_1"] - machine_node.isExcludedMaterial = MagicMock(side_effect=lambda material: material["id"] == "material_1") + machine_node.isExcludedMaterialBaseFile = MagicMock(side_effect=lambda material: material == "material_1") node = createVariantNode("variant_1", machine_node, container_registry) assert "material_1" not in node.materials