From 8e49991087b01aba5faf3fd517f2a946169b8dda Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Tue, 6 Aug 2019 17:04:29 +0200 Subject: [PATCH] Resolve circular imports Some of these are only used for the type checks. Contributes to issue CURA-6600. --- cura/Machines/ContainerTree.py | 7 +++---- cura/Machines/IntentNode.py | 8 ++++++-- cura/Machines/MaterialNode.py | 4 ++-- cura/Machines/QualityManager.py | 13 +++++++++++++ cura/Machines/QualityNode.py | 4 ++-- cura/Machines/VariantNode.py | 4 ++-- 6 files changed, 28 insertions(+), 12 deletions(-) diff --git a/cura/Machines/ContainerTree.py b/cura/Machines/ContainerTree.py index adc79b1116..14c54459a3 100644 --- a/cura/Machines/ContainerTree.py +++ b/cura/Machines/ContainerTree.py @@ -17,12 +17,11 @@ class ContainerTree: def __init__(self) -> None: self.machines = {} # type: Dict[str, MachineNode] # Mapping from definition ID to machine nodes. container_registry = ContainerRegistry.getInstance() - container_registry.allMetadataLoaded.connect(self._reloadAll) container_registry.containerAdded.connect(self._machineAdded) - self._reloadAll() + self._loadAll() - ## (Re)builds the initial container tree. - def _reloadAll(self): + ## Builds the initial container tree. + def _loadAll(self): all_stacks = ContainerRegistry.getInstance().findContainerStacks() for stack in all_stacks: definition_id = stack.definition.getId() diff --git a/cura/Machines/IntentNode.py b/cura/Machines/IntentNode.py index d6ec0f0c3f..232498536c 100644 --- a/cura/Machines/IntentNode.py +++ b/cura/Machines/IntentNode.py @@ -1,13 +1,17 @@ # Copyright (c) 2019 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. +from typing import TYPE_CHECKING + from cura.Machines.ContainerNode import ContainerNode -from cura.Machines.QualityNode import QualityNode + +if TYPE_CHECKING: + from cura.Machines.QualityNode import QualityNode ## This class represents an intent profile in the container tree. # # This class has no more subnodes. class IntentNode(ContainerNode): - def __init__(self, container_id: str, quality: QualityNode) -> None: + def __init__(self, container_id: str, quality: "QualityNode") -> None: super().__init__(container_id) self.quality = quality \ No newline at end of file diff --git a/cura/Machines/MaterialNode.py b/cura/Machines/MaterialNode.py index e61f3f363d..51dc62837a 100644 --- a/cura/Machines/MaterialNode.py +++ b/cura/Machines/MaterialNode.py @@ -7,16 +7,16 @@ from UM.Settings.ContainerRegistry import ContainerRegistry from UM.Settings.Interfaces import ContainerInterface from cura.Machines.ContainerNode import ContainerNode from cura.Machines.QualityNode import QualityNode -from cura.Machines.VariantNode import VariantNode if TYPE_CHECKING: from typing import Dict + from cura.Machines.VariantNode import VariantNode ## Represents a material in the container tree. # # Its subcontainers are quality profiles. class MaterialNode(ContainerNode): - def __init__(self, container_id, variant: VariantNode) -> None: + def __init__(self, container_id, variant: "VariantNode") -> None: super().__init__(container_id) self.variant = variant self.qualities = {} # type: Dict[str, QualityNode] # Mapping container IDs to quality profiles. diff --git a/cura/Machines/QualityManager.py b/cura/Machines/QualityManager.py index b4f8b8f679..a13b3e1f57 100644 --- a/cura/Machines/QualityManager.py +++ b/cura/Machines/QualityManager.py @@ -12,6 +12,7 @@ from UM.Settings.InstanceContainer import InstanceContainer from cura.Settings.ExtruderStack import ExtruderStack +from cura.Machines.ContainerTree import ContainerTree from .QualityGroup import QualityGroup from .QualityNode import QualityNode @@ -66,6 +67,18 @@ class QualityManager(QObject): self._update_timer.timeout.connect(self._updateMaps) def initialize(self) -> None: + container_tree = ContainerTree() + for machine_id, machine in container_tree.machines.items(): + print("--", machine_id) + for variant_name, variant in machine.variants.items(): + print("-- --", variant_name) + for material_base_file, material in variant.materials.items(): + print("-- -- --", material_base_file) + for quality_id, quality in material.qualities.items(): + print("-- -- -- --", quality_id) + for intent_id in quality.intents: + print("-- -- -- -- --", intent_id) + # Initialize the lookup tree for quality profiles with following structure: # -> -> -> # -> diff --git a/cura/Machines/QualityNode.py b/cura/Machines/QualityNode.py index ba17090e7f..5c5f1264aa 100644 --- a/cura/Machines/QualityNode.py +++ b/cura/Machines/QualityNode.py @@ -7,16 +7,16 @@ from UM.Settings.ContainerRegistry import ContainerRegistry from UM.Settings.Interfaces import ContainerInterface from cura.Machines.ContainerNode import ContainerNode from cura.Machines.IntentNode import IntentNode -from cura.Machines.MaterialNode import MaterialNode if TYPE_CHECKING: from typing import Dict + from cura.Machines.MaterialNode import MaterialNode ## Represents a material profile in the container tree. # # Its subcontainers are intent profiles. class QualityNode(ContainerNode): - def __init__(self, container_id: str, material: MaterialNode) -> None: + def __init__(self, container_id: str, material: "MaterialNode") -> None: super().__init__(container_id) self.material = material self.intents = {} # type: Dict[str, IntentNode] diff --git a/cura/Machines/VariantNode.py b/cura/Machines/VariantNode.py index 716f44d6cf..ca3bfc9624 100644 --- a/cura/Machines/VariantNode.py +++ b/cura/Machines/VariantNode.py @@ -6,11 +6,11 @@ from typing import TYPE_CHECKING from UM.Settings.ContainerRegistry import ContainerRegistry from UM.Settings.Interfaces import ContainerInterface from cura.Machines.ContainerNode import ContainerNode -from cura.Machines.MachineNode import MachineNode from cura.Machines.MaterialNode import MaterialNode if TYPE_CHECKING: from typing import Dict + from cura.Machines.MachineNode import MachineNode ## This class represents an extruder variant in the container tree. # @@ -22,7 +22,7 @@ if TYPE_CHECKING: # material diameter setting, we cannot filter them here. Filtering must be # done in the model. class VariantNode(ContainerNode): - def __init__(self, container_id: str, machine: MachineNode) -> None: + def __init__(self, container_id: str, machine: "MachineNode") -> None: super().__init__(container_id) self.machine = machine self.materials = {} # type: Dict[str, MaterialNode] # Mapping material base files to their nodes.