Browse Source

Fix 'getQualityChangesGroups' now gives a list issues.

part of CURA-6600
Remco Burema 5 years ago
parent
commit
d5a8b2640f

+ 3 - 3
cura/Machines/Models/QualityManagementModel.py

@@ -44,11 +44,11 @@ class QualityManagementModel(ListModel):
             return
 
         quality_group_dict = ContainerTree.getInstance().getCurrentQualityGroups()
-        quality_changes_group_dict = self._quality_manager.getQualityChangesGroups(global_stack)
+        quality_changes_group_list = self._quality_manager.getQualityChangesGroups(global_stack)
 
         available_quality_types = set(quality_type for quality_type, quality_group in quality_group_dict.items()
                                       if quality_group.is_available)
-        if not available_quality_types and not quality_changes_group_dict:
+        if not available_quality_types and not quality_changes_group_list:
             # Nothing to show
             self.setItems([])
             return
@@ -69,7 +69,7 @@ class QualityManagementModel(ListModel):
 
         # Create quality_changes group items
         quality_changes_item_list = []
-        for quality_changes_group in quality_changes_group_dict.values():
+        for quality_changes_group in quality_changes_group_list:
             quality_group = quality_group_dict.get(quality_changes_group.quality_type)
             item = {"name": quality_changes_group.name,
                     "is_read_only": False,

+ 3 - 2
cura/Machines/QualityManager.py

@@ -1,7 +1,7 @@
 # Copyright (c) 2019 Ultimaker B.V.
 # Cura is released under the terms of the LGPLv3 or higher.
 
-from typing import TYPE_CHECKING, Optional, Dict
+from typing import TYPE_CHECKING, Optional, Dict, List
 
 from PyQt5.QtCore import QObject, pyqtSignal, pyqtSlot
 
@@ -14,6 +14,7 @@ import cura.CuraApplication
 from cura.Settings.ExtruderStack import ExtruderStack
 
 from cura.Machines.ContainerTree import ContainerTree  # The implementation that replaces this manager, to keep the deprecated interface working.
+from .QualityChangesGroup import QualityChangesGroup
 from .QualityGroup import QualityGroup
 from .QualityNode import QualityNode
 
@@ -75,7 +76,7 @@ class QualityManager(QObject):
             return
 
     # Returns a dict of "custom profile name" -> QualityChangesGroup
-    def getQualityChangesGroups(self, machine: "GlobalStack") -> dict:
+    def getQualityChangesGroups(self, machine: "GlobalStack") -> List[QualityChangesGroup]:
         variant_names = [extruder.variant.getName() for extruder in machine.extruders.values()]
         material_bases = [extruder.material.getMetaDataEntry("base_file") for extruder in machine.extruders.values()]
         extruder_enabled = [extruder.isEnabled for extruder in machine.extruders.values()]

+ 3 - 3
plugins/3MFReader/ThreeMFWorkspaceReader.py

@@ -1003,11 +1003,11 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
                 global_stack.setMetaDataEntry(key, value)
 
         if self._quality_changes_to_apply:
-            quality_changes_group_dict = quality_manager.getQualityChangesGroups(global_stack)
-            if self._quality_changes_to_apply not in quality_changes_group_dict:
+            quality_changes_group_list = quality_manager.getQualityChangesGroups(global_stack)
+            quality_changes_group = next((qcg for qcg in quality_changes_group_list if qcg.name == self._quality_changes_to_apply), None)
+            if not quality_changes_group:
                 Logger.log("e", "Could not find quality_changes [%s]", self._quality_changes_to_apply)
                 return
-            quality_changes_group = quality_changes_group_dict[self._quality_changes_to_apply]
             machine_manager.setQualityChangesGroup(quality_changes_group, no_dialog = True)
         else:
             self._quality_type_to_apply = self._quality_type_to_apply.lower()

+ 1 - 1
tests/TestQualityManager.py

@@ -61,7 +61,7 @@ def test_getQualityChangesGroup(quality_mocked_application):
     manager = QualityManager(quality_mocked_application)
     manager.initialize()
 
-    assert "herp" in manager.getQualityChangesGroups(mocked_stack)
+    assert "herp" in [qcg.name for qcg in manager.getQualityChangesGroups(mocked_stack)]
 
 
 @pytest.mark.skip("Doesn't work on remote")