Resolve circular imports

Some of these are only used for the type checks.

Contributes to issue CURA-6600.
This commit is contained in:
Ghostkeeper 2019-08-06 17:04:29 +02:00
parent b05784e607
commit 8e49991087
No known key found for this signature in database
GPG Key ID: 86BEF881AE2CF276
6 changed files with 28 additions and 12 deletions

View File

@ -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()

View File

@ -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

View File

@ -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.

View File

@ -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>

View File

@ -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]

View File

@ -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.