Browse Source

Resolve circular imports

Some of these are only used for the type checks.

Contributes to issue CURA-6600.
Ghostkeeper 5 years ago
parent
commit
8e49991087

+ 3 - 4
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()

+ 6 - 2
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

+ 2 - 2
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.

+ 13 - 0
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:
         # <machine> -> <nozzle> -> <buildplate> -> <material>
         # <machine> -> <material>

+ 2 - 2
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]

+ 2 - 2
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.