1
+ # Copyright (c) 2018 Ultimaker B.V.
2
+ # Cura is released under the terms of the LGPLv3 or higher.
3
+
4
+ from collections import OrderedDict
1
5
from typing import Optional
2
6
3
7
from UM .Logger import Logger
4
8
from UM .Settings .ContainerRegistry import ContainerRegistry
5
- from UM .Settings .InstanceContainer import InstanceContainer
6
9
7
10
from cura .Machines .ContainerNode import ContainerNode
8
11
from cura .Settings .GlobalStack import GlobalStack
@@ -35,7 +38,7 @@ class VariantManager:
35
38
def __init__ (self , container_registry ):
36
39
self ._container_registry = container_registry # type: ContainerRegistry
37
40
38
- self ._machine_to_variant_dict_map = {} # <machine_type> -> <variant_dict>
41
+ self ._machine_to_variant_dict_map = dict () # <machine_type> -> <variant_dict>
39
42
40
43
self ._exclude_variant_id_list = ["empty_variant" ]
41
44
@@ -44,6 +47,8 @@ def __init__(self, container_registry):
44
47
# - initializing the variant lookup table based on the metadata in ContainerRegistry.
45
48
#
46
49
def initialize (self ):
50
+ self ._machine_to_variant_dict_map = OrderedDict ()
51
+
47
52
# Cache all variants from the container registry to a variant map for better searching and organization.
48
53
variant_metadata_list = self ._container_registry .findContainersMetadata (type = "variant" )
49
54
for variant_metadata in variant_metadata_list :
@@ -54,13 +59,12 @@ def initialize(self):
54
59
variant_name = variant_metadata ["name" ]
55
60
variant_definition = variant_metadata ["definition" ]
56
61
if variant_definition not in self ._machine_to_variant_dict_map :
57
- self ._machine_to_variant_dict_map [variant_definition ] = {}
58
- # for variant_type in ALL_VARIANT_TYPES:
59
- # self._machine_to_variant_dict_map[variant_definition][variant_type] = {}
62
+ self ._machine_to_variant_dict_map [variant_definition ] = OrderedDict ()
63
+ for variant_type in ALL_VARIANT_TYPES :
64
+ self ._machine_to_variant_dict_map [variant_definition ][variant_type ] = dict ()
60
65
61
66
variant_type = variant_metadata ["hardware_type" ]
62
- #variant_dict = self._machine_to_variant_dict_map[variant_definition][variant_type]
63
- variant_dict = self ._machine_to_variant_dict_map [variant_definition ]
67
+ variant_dict = self ._machine_to_variant_dict_map [variant_definition ][variant_type ]
64
68
if variant_name in variant_dict :
65
69
# ERROR: duplicated variant name.
66
70
raise RuntimeError ("Found duplicated variant name [%s], type [%s] for machine [%s]" %
@@ -72,10 +76,11 @@ def initialize(self):
72
76
# Gets the variant InstanceContainer with the given information.
73
77
# Almost the same as getVariantMetadata() except that this returns an InstanceContainer if present.
74
78
#
75
- def getVariantNode (self , machine_type_name : str , variant_name : str ,
76
- variant_type : Optional [str ] = None ) -> Optional ["InstanceContainer" ]:
77
- return self ._machine_to_variant_dict_map [machine_type_name ].get (variant_name )
78
-
79
- def getVariantNodes (self , machine : "GlobalStack" ):
80
- machine_type_name = machine .definition .getId ()
81
- return self ._machine_to_variant_dict_map .get (machine_type_name )
79
+ def getVariantNode (self , machine_definition_id : str , variant_name : str ,
80
+ variant_type : Optional [str ] = VariantType .NOZZLE ) -> Optional ["ContainerNode" ]:
81
+ return self ._machine_to_variant_dict_map [machine_definition_id ].get (variant_type , {}).get (variant_name )
82
+
83
+ def getVariantNodes (self , machine : "GlobalStack" ,
84
+ variant_type : Optional [str ] = VariantType .NOZZLE ) -> dict :
85
+ machine_definition_id = machine .definition .getId ()
86
+ return self ._machine_to_variant_dict_map [machine_definition_id ].get (variant_type , {})
0 commit comments