From 42ba9a9f396a9e7514ece5efd45ea915cbd187a1 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Mon, 12 Aug 2019 17:13:25 +0200 Subject: [PATCH] Pre-filter qualities on other properties before filtering on material This prevents a LOT of double queries. Contributes to issue CURA-6600. --- cura/Machines/MaterialNode.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/cura/Machines/MaterialNode.py b/cura/Machines/MaterialNode.py index f9b01a2dcd..8b7946ebc8 100644 --- a/cura/Machines/MaterialNode.py +++ b/cura/Machines/MaterialNode.py @@ -36,12 +36,13 @@ class MaterialNode(ContainerNode): my_metadata = container_registry.findInstanceContainersMetadata(id = self.container_id)[0] my_material_type = my_metadata.get("material") qualities = [] + qualities_any_material = container_registry.findInstanceContainersMetadata(type = "quality", definition = self.variant.machine.quality_definition, variant = self.variant.variant_name) for material_metadata in container_registry.findInstanceContainersMetadata(type = "material", material = my_material_type): - qualities.extend(container_registry.findInstanceContainersMetadata(type = "quality", definition = self.variant.machine.quality_definition, variant = self.variant.variant_name, material = material_metadata["id"])) + qualities.extend((quality for quality in qualities_any_material if quality["material"] == material_metadata["id"])) if not qualities: # No quality profiles found. Go by GUID then. my_guid = my_metadata.get("material") for material_metadata in container_registry.findInstanceContainersMetadata(type = "material", guid = my_guid): - qualities.extend(container_registry.findInstanceContainersMetadata(type = "quality", definition = self.variant.machine.quality_definition, variant = self.variant.variant_name, material = material_metadata["id"])) + qualities.extend((quality for quality in qualities_any_material if quality["material"] == material_metadata["id"])) for quality in qualities: quality_id = quality["id"]