From 02232f7ca67d1ee4f3ced1ba771f65eb055d0507 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Thu, 29 Sep 2016 13:56:14 +0200 Subject: [PATCH 1/4] Added loging if we could not find profile to rename CURA-2479 --- cura/Settings/ContainerManager.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/cura/Settings/ContainerManager.py b/cura/Settings/ContainerManager.py index 2ce3f1570a..6af5267e6b 100644 --- a/cura/Settings/ContainerManager.py +++ b/cura/Settings/ContainerManager.py @@ -561,9 +561,12 @@ class ContainerManager(QObject): new_name = self._container_registry.uniqueName(new_name) container_registry = self._container_registry + for container in self._getFilteredContainers(name = quality_name, type = "quality_changes"): stack_id = container.getMetaDataEntry("extruder", global_stack.getId()) container_registry.renameContainer(container.getId(), new_name, self._createUniqueId(stack_id, new_name)) + else: + UM.Logger.log("e", "Unable to rename %s, because we could not find the profile", quality_name) self._machine_manager.activeQualityChanged.emit() return True From 3d8336449f133227766507fbd7961ad021eed1b8 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Thu, 29 Sep 2016 14:07:52 +0200 Subject: [PATCH 2/4] Fixed renaming of quality_changes CURA-2479 --- cura/Settings/ContainerManager.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/cura/Settings/ContainerManager.py b/cura/Settings/ContainerManager.py index 6af5267e6b..24f452c592 100644 --- a/cura/Settings/ContainerManager.py +++ b/cura/Settings/ContainerManager.py @@ -562,10 +562,12 @@ class ContainerManager(QObject): container_registry = self._container_registry - for container in self._getFilteredContainers(name = quality_name, type = "quality_changes"): + containers_to_rename = self._container_registry.findInstanceContainers(type = "quality_changes", name = quality_name) + for container in containers_to_rename: stack_id = container.getMetaDataEntry("extruder", global_stack.getId()) container_registry.renameContainer(container.getId(), new_name, self._createUniqueId(stack_id, new_name)) - else: + + if not containers_to_rename: UM.Logger.log("e", "Unable to rename %s, because we could not find the profile", quality_name) self._machine_manager.activeQualityChanged.emit() From 03c66e6e6285f3189f980583fd8aba811f7bed3a Mon Sep 17 00:00:00 2001 From: Jack Ha Date: Thu, 29 Sep 2016 14:09:19 +0200 Subject: [PATCH 3/4] use resolveOrValue for adhesion_type. contributes to CURA-2232 --- cura/Settings/ExtruderManager.py | 8 +- cura/Settings/MachineManager.py | 15 +--- resources/definitions/fdmprinter.def.json | 90 +++++++++++------------ 3 files changed, 48 insertions(+), 65 deletions(-) diff --git a/cura/Settings/ExtruderManager.py b/cura/Settings/ExtruderManager.py index 29604abffd..24b9e01f07 100644 --- a/cura/Settings/ExtruderManager.py +++ b/cura/Settings/ExtruderManager.py @@ -143,9 +143,7 @@ class ExtruderManager(QObject): # Make sure the next stack is a stack that contains only the machine definition if not extruder_train.getNextStack(): - shallow_stack = UM.Settings.ContainerStack(machine_id + "_shallow") - shallow_stack.addContainer(machine_definition) - extruder_train.setNextStack(shallow_stack) + extruder_train.setNextStack(UM.Application.getInstance().getGlobalContainerStack()) changed = True if changed: self.extrudersChanged.emit(machine_id) @@ -264,9 +262,7 @@ class ExtruderManager(QObject): # Make sure the next stack is a stack that contains only the machine definition if not container_stack.getNextStack(): - shallow_stack = UM.Settings.ContainerStack(machine_id + "_shallow") - shallow_stack.addContainer(machine_definition) - container_stack.setNextStack(shallow_stack) + container_stack.setNextStack(UM.Application.getInstance().getGlobalContainerStack()) container_registry.addContainer(container_stack) diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index 4569e51098..f418693f7c 100644 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -245,20 +245,7 @@ class MachineManager(QObject): def _onPropertyChanged(self, key, property_name): if property_name == "value": - # If a setting is not settable per extruder, but "has enabled" or "value" relations that are settable per extruder - # we need to copy the value to global, so that the front-end displays the right settings. - if not self._active_container_stack.getProperty(key, "settable_per_extruder"): - relations = self._global_container_stack.getBottom()._getDefinition(key).relations - for relation in filter(lambda r: (r.role == "enabled" or r.role == "value") and r.type == RelationType.RequiredByTarget, relations): - # Target setting is settable per extruder - if self._active_container_stack.getProperty(relation.target.key, "settable_per_extruder"): - new_value = self._global_container_stack.getProperty(key, "value") - stacks = [stack for stack in ExtruderManager.getInstance().getMachineExtruders(self._global_container_stack.getId())] - for extruder_stack in stacks: - if extruder_stack.getProperty(key, "value") != new_value: - extruder_stack.getTop().setProperty(key, "value", new_value) - break - + # Notify UI items, such as the "changed" star in profile pull down menu. self.activeStackValueChanged.emit() if property_name == "validationState": diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index ad9211fae3..4360d4a122 100644 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -650,7 +650,7 @@ "default_value": 0.4, "type": "float", "value": "line_width", - "enabled": "adhesion_type == \"skirt\" or adhesion_type == \"brim\"", + "enabled": "resolveOrValue('adhesion_type') == 'skirt' or resolveOrValue('adhesion_type') == 'brim'", "settable_per_mesh": false, "settable_per_extruder": true }, @@ -935,7 +935,7 @@ "type": "float", "default_value": 2, "minimum_value": "0", - "value": "0 if infill_sparse_density == 0 else (infill_line_width * 100) / infill_sparse_density * (2 if infill_pattern == \"grid\" else (3 if infill_pattern == \"triangles\" or infill_pattern == \"cubic\" else (4 if infill_pattern == \"tetrahedral\" else 1)))", + "value": "0 if infill_sparse_density == 0 else (infill_line_width * 100) / infill_sparse_density * (2 if infill_pattern == 'grid' else (3 if infill_pattern == 'triangles' or infill_pattern == 'cubic' else (4 if infill_pattern == 'tetrahedral' else 1)))", "settable_per_mesh": true } } @@ -1616,7 +1616,7 @@ "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)", "maximum_value_warning": "300", "value": "speed_layer_0", - "enabled": "adhesion_type == \"skirt\" or adhesion_type == \"brim\"", + "enabled": "resolveOrValue('adhesion_type') == 'skirt' or resolveOrValue('adhesion_type') == 'brim'", "settable_per_mesh": false, "settable_per_extruder": true, "limit_to_extruder": "adhesion_extruder_nr" @@ -2141,7 +2141,7 @@ "description": "The nozzle avoids already printed parts when traveling. This option is only available when combing is enabled.", "type": "bool", "default_value": true, - "enabled": "retraction_combing != \"off\"", + "enabled": "retraction_combing != 'off'", "settable_per_mesh": false, "settable_per_extruder": true }, @@ -2155,7 +2155,7 @@ "value": "machine_nozzle_tip_outer_diameter / 2 * 1.25", "minimum_value": "0", "maximum_value_warning": "machine_nozzle_tip_outer_diameter * 5", - "enabled": "retraction_combing != \"off\" and travel_avoid_other_parts", + "enabled": "retraction_combing != 'off' and travel_avoid_other_parts", "settable_per_mesh": false, "settable_per_extruder": true } @@ -2242,7 +2242,7 @@ "unit": "mm", "type": "float", "default_value": 0.5, - "value": "0 if adhesion_type == \"raft\" else layer_height_0", + "value": "0 if resolveOrValue('adhesion_type') == 'raft' else layer_height_0", "minimum_value": "0", "maximum_value_warning": "10.0", "settable_per_mesh": false, @@ -2396,7 +2396,7 @@ "minimum_value": "0", "default_value": 2.66, "enabled": "support_enable", - "value": "(support_line_width * 100) / support_infill_rate * (2 if support_pattern == \"grid\" else (3 if support_pattern == \"triangles\" else 1))", + "value": "(support_line_width * 100) / support_infill_rate * (2 if support_pattern == 'grid' else (3 if support_pattern == 'triangles' else 1))", "limit_to_extruder": "support_infill_extruder_nr", "settable_per_mesh": false, "settable_per_extruder": true @@ -2616,7 +2616,7 @@ "type": "float", "default_value": 0.4, "minimum_value": "0", - "value": "0 if support_interface_density == 0 else (support_interface_line_width * 100) / support_interface_density * (2 if support_interface_pattern == \"grid\" else (3 if support_interface_pattern == \"triangles\" else 1))", + "value": "0 if support_interface_density == 0 else (support_interface_line_width * 100) / support_interface_density * (2 if support_interface_pattern == 'grid' else (3 if support_interface_pattern == 'triangles' else 1))", "limit_to_extruder": "support_interface_extruder_nr", "enabled": "extruderValue(support_interface_extruder_nr, 'support_interface_enable') and support_enable", "settable_per_mesh": false, @@ -2753,7 +2753,7 @@ "default_value": 1, "minimum_value": "0", "maximum_value_warning": "10", - "enabled": "adhesion_type == \"skirt\"", + "enabled": "resolveOrValue('adhesion_type') == 'skirt'", "settable_per_mesh": false, "settable_per_extruder": true, "limit_to_extruder": "adhesion_extruder_nr" @@ -2767,7 +2767,7 @@ "default_value": 3, "minimum_value_warning": "0", "maximum_value_warning": "100", - "enabled": "adhesion_type == \"skirt\"", + "enabled": "resolveOrValue('adhesion_type') == 'skirt'", "settable_per_mesh": false, "settable_per_extruder": true, "limit_to_extruder": "adhesion_extruder_nr" @@ -2782,7 +2782,7 @@ "minimum_value": "0", "minimum_value_warning": "25", "maximum_value_warning": "2500", - "enabled": "adhesion_type == \"skirt\" or adhesion_type == \"brim\"", + "enabled": "resolveOrValue('adhesion_type') == 'skirt' or resolveOrValue('adhesion_type') == 'brim'", "settable_per_mesh": false, "settable_per_extruder": true }, @@ -2795,7 +2795,7 @@ "default_value": 8.0, "minimum_value": "0.0", "maximum_value_warning": "100.0", - "enabled": "adhesion_type == \"brim\"", + "enabled": "resolveOrValue('adhesion_type') == 'brim'", "settable_per_mesh": false, "settable_per_extruder": true, "limit_to_extruder": "adhesion_extruder_nr", @@ -2810,7 +2810,7 @@ "minimum_value": "0", "maximum_value_warning": "300", "value": "math.ceil(brim_width / skirt_brim_line_width)", - "enabled": "adhesion_type == \"brim\"", + "enabled": "resolveOrValue('adhesion_type') == 'brim'", "settable_per_mesh": false, "settable_per_extruder": true, "limit_to_extruder": "adhesion_extruder_nr" @@ -2823,7 +2823,7 @@ "description": "Only print the brim on the outside of the model. This reduces the amount of brim you need to remove afterwards, while it doesn't reduce the bed adhesion that much.", "type": "bool", "default_value": true, - "enabled": "adhesion_type == \"brim\"", + "enabled": "resolveOrValue('adhesion_type') == 'brim'", "settable_per_mesh": false, "settable_per_extruder": true, "limit_to_extruder": "adhesion_extruder_nr" @@ -2837,7 +2837,7 @@ "default_value": 15, "minimum_value_warning": "0", "maximum_value_warning": "10", - "enabled": "adhesion_type == \"raft\"", + "enabled": "resolveOrValue('adhesion_type') == 'raft'", "limit_to_extruder": "adhesion_extruder_nr", "settable_per_mesh": false, "settable_per_extruder": true @@ -2851,7 +2851,7 @@ "default_value": 0.3, "minimum_value": "0", "maximum_value_warning": "1.0", - "enabled": "adhesion_type == \"raft\"", + "enabled": "resolveOrValue('adhesion_type') == 'raft'", "settable_per_mesh": false, "settable_per_extruder": true, "limit_to_extruder": "adhesion_extruder_nr" @@ -2865,7 +2865,7 @@ "value": "raft_airgap / 2", "minimum_value": "0", "maximum_value_warning": "layer_height", - "enabled": "adhesion_type == \"raft\"", + "enabled": "resolveOrValue('adhesion_type') == 'raft'", "settable_per_mesh": false, "settable_per_extruder": true, "limit_to_extruder": "adhesion_extruder_nr" @@ -2878,7 +2878,7 @@ "default_value": 2, "minimum_value": "0", "maximum_value_warning": "20", - "enabled": "adhesion_type == \"raft\"", + "enabled": "resolveOrValue('adhesion_type') == 'raft'", "settable_per_mesh": false, "settable_per_extruder": true, "limit_to_extruder": "adhesion_extruder_nr" @@ -2893,7 +2893,7 @@ "value": "layer_height", "minimum_value": "0", "maximum_value_warning": "2.0", - "enabled": "adhesion_type == \"raft\"", + "enabled": "resolveOrValue('adhesion_type') == 'raft'", "settable_per_mesh": false, "settable_per_extruder": true, "limit_to_extruder": "adhesion_extruder_nr" @@ -2908,7 +2908,7 @@ "value": "line_width", "minimum_value": "0.0001", "maximum_value_warning": "machine_nozzle_size * 2", - "enabled": "adhesion_type == \"raft\"", + "enabled": "resolveOrValue('adhesion_type') == 'raft'", "settable_per_mesh": false, "settable_per_extruder": true, "limit_to_extruder": "adhesion_extruder_nr" @@ -2922,7 +2922,7 @@ "default_value": 0.4, "minimum_value": "0.0001", "maximum_value_warning": "5.0", - "enabled": "adhesion_type == \"raft\"", + "enabled": "resolveOrValue('adhesion_type') == 'raft'", "value": "raft_surface_line_width", "settable_per_mesh": false, "settable_per_extruder": true, @@ -2938,7 +2938,7 @@ "value": "layer_height * 1.5", "minimum_value": "0", "maximum_value_warning": "5.0", - "enabled": "adhesion_type == \"raft\"", + "enabled": "resolveOrValue('adhesion_type') == 'raft'", "settable_per_mesh": false, "settable_per_extruder": true, "limit_to_extruder": "adhesion_extruder_nr" @@ -2953,7 +2953,7 @@ "value": "line_width * 2", "minimum_value": "0.0001", "maximum_value_warning": "machine_nozzle_size * 2", - "enabled": "adhesion_type == \"raft\"", + "enabled": "resolveOrValue('adhesion_type') == 'raft'", "settable_per_mesh": false, "settable_per_extruder": true, "limit_to_extruder": "adhesion_extruder_nr" @@ -2968,7 +2968,7 @@ "value": "raft_interface_line_width + 0.2", "minimum_value": "0", "maximum_value_warning": "15.0", - "enabled": "adhesion_type == \"raft\"", + "enabled": "resolveOrValue('adhesion_type') == 'raft'", "settable_per_mesh": false, "settable_per_extruder": true, "limit_to_extruder": "adhesion_extruder_nr" @@ -2983,7 +2983,7 @@ "value": "layer_height_0 * 1.2", "minimum_value": "0", "maximum_value_warning": "5.0", - "enabled": "adhesion_type == \"raft\"", + "enabled": "resolveOrValue('adhesion_type') == 'raft'", "settable_per_mesh": false, "settable_per_extruder": true, "limit_to_extruder": "adhesion_extruder_nr" @@ -2998,7 +2998,7 @@ "minimum_value": "0.0001", "value": "machine_nozzle_size * 2", "maximum_value_warning": "machine_nozzle_size * 3", - "enabled": "adhesion_type == \"raft\"", + "enabled": "resolveOrValue('adhesion_type') == 'raft'", "settable_per_mesh": false, "settable_per_extruder": true, "limit_to_extruder": "adhesion_extruder_nr" @@ -3013,7 +3013,7 @@ "value": "raft_base_line_width * 2", "minimum_value": "0.0001", "maximum_value_warning": "100", - "enabled": "adhesion_type == \"raft\"", + "enabled": "resolveOrValue('adhesion_type') == 'raft'", "settable_per_mesh": false, "settable_per_extruder": true, "limit_to_extruder": "adhesion_extruder_nr" @@ -3028,7 +3028,7 @@ "minimum_value": "0.1", "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)", "maximum_value_warning": "200", - "enabled": "adhesion_type == \"raft\"", + "enabled": "resolveOrValue('adhesion_type') == 'raft'", "value": "speed_print / 60 * 30", "settable_per_mesh": false, "settable_per_extruder": true, @@ -3045,7 +3045,7 @@ "minimum_value": "0.1", "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)", "maximum_value_warning": "100", - "enabled": "adhesion_type == \"raft\"", + "enabled": "resolveOrValue('adhesion_type') == 'raft'", "value": "raft_speed", "settable_per_mesh": false, "settable_per_extruder": true, @@ -3062,7 +3062,7 @@ "minimum_value": "0.1", "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)", "maximum_value_warning": "150", - "enabled": "adhesion_type == \"raft\"", + "enabled": "resolveOrValue('adhesion_type') == 'raft'", "settable_per_mesh": false, "settable_per_extruder": true, "limit_to_extruder": "adhesion_extruder_nr" @@ -3077,7 +3077,7 @@ "minimum_value": "0.1", "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)", "maximum_value_warning": "200", - "enabled": "adhesion_type == \"raft\"", + "enabled": "resolveOrValue('adhesion_type') == 'raft'", "value": "0.75 * raft_speed", "settable_per_mesh": false, "settable_per_extruder": true, @@ -3095,7 +3095,7 @@ "minimum_value_warning": "100", "maximum_value_warning": "10000", "value": "acceleration_print", - "enabled": "adhesion_type == \"raft\" and acceleration_enabled", + "enabled": "resolveOrValue('adhesion_type') == 'raft' and acceleration_enabled", "settable_per_mesh": false, "limit_to_extruder": "adhesion_extruder_nr", "children": { @@ -3109,7 +3109,7 @@ "minimum_value": "0.1", "minimum_value_warning": "100", "maximum_value_warning": "10000", - "enabled": "adhesion_type == \"raft\" and acceleration_enabled", + "enabled": "resolveOrValue('adhesion_type') == 'raft' and acceleration_enabled", "settable_per_mesh": false, "limit_to_extruder": "adhesion_extruder_nr" }, @@ -3123,7 +3123,7 @@ "minimum_value": "0.1", "minimum_value_warning": "100", "maximum_value_warning": "10000", - "enabled": "adhesion_type == \"raft\" and acceleration_enabled", + "enabled": "resolveOrValue('adhesion_type') == 'raft' and acceleration_enabled", "settable_per_mesh": false, "limit_to_extruder": "adhesion_extruder_nr" }, @@ -3137,7 +3137,7 @@ "minimum_value": "0.1", "minimum_value_warning": "100", "maximum_value_warning": "10000", - "enabled": "adhesion_type == \"raft\" and acceleration_enabled", + "enabled": "resolveOrValue('adhesion_type') == 'raft' and acceleration_enabled", "settable_per_mesh": false, "limit_to_extruder": "adhesion_extruder_nr" } @@ -3153,7 +3153,7 @@ "minimum_value_warning": "5", "maximum_value_warning": "50", "value": "jerk_print", - "enabled": "adhesion_type == \"raft\" and jerk_enabled", + "enabled": "resolveOrValue('adhesion_type') == 'raft' and jerk_enabled", "settable_per_mesh": false, "limit_to_extruder": "adhesion_extruder_nr", "children": { @@ -3167,7 +3167,7 @@ "minimum_value": "0.1", "minimum_value_warning": "5", "maximum_value_warning": "100", - "enabled": "adhesion_type == \"raft\" and jerk_enabled", + "enabled": "resolveOrValue('adhesion_type') == 'raft' and jerk_enabled", "settable_per_mesh": false, "limit_to_extruder": "adhesion_extruder_nr" }, @@ -3181,7 +3181,7 @@ "minimum_value": "0.1", "minimum_value_warning": "5", "maximum_value_warning": "50", - "enabled": "adhesion_type == \"raft\" and jerk_enabled", + "enabled": "resolveOrValue('adhesion_type') == 'raft' and jerk_enabled", "settable_per_mesh": false, "limit_to_extruder": "adhesion_extruder_nr" }, @@ -3195,7 +3195,7 @@ "minimum_value": "0.1", "minimum_value_warning": "5", "maximum_value_warning": "50", - "enabled": "adhesion_type == \"raft\" and jerk_enabled", + "enabled": "resolveOrValue('adhesion_type') == 'raft' and jerk_enabled", "settable_per_mesh": false, "limit_to_extruder": "adhesion_extruder_nr" } @@ -3211,7 +3211,7 @@ "default_value": 0, "settable_per_mesh": false, "settable_per_extruder": true, - "enabled": "adhesion_type == \"raft\"", + "enabled": "resolveOrValue('adhesion_type') == 'raft'", "limit_to_extruder": "adhesion_extruder_nr", "children": { @@ -3225,7 +3225,7 @@ "maximum_value": "100", "default_value": 0, "value": "raft_fan_speed", - "enabled": "adhesion_type == \"raft\"", + "enabled": "resolveOrValue('adhesion_type') == 'raft'", "settable_per_mesh": false, "settable_per_extruder": true, "limit_to_extruder": "adhesion_extruder_nr" @@ -3240,7 +3240,7 @@ "maximum_value": "100", "default_value": 0, "value": "raft_fan_speed", - "enabled": "adhesion_type == \"raft\"", + "enabled": "resolveOrValue('adhesion_type') == 'raft'", "settable_per_mesh": false, "settable_per_extruder": true, "limit_to_extruder": "adhesion_extruder_nr" @@ -3255,7 +3255,7 @@ "maximum_value": "100", "default_value": 0, "value": "raft_fan_speed", - "enabled": "adhesion_type == \"raft\"", + "enabled": "resolveOrValue('adhesion_type') == 'raft'", "settable_per_mesh": false, "settable_per_extruder": true, "limit_to_extruder": "adhesion_extruder_nr" @@ -3625,7 +3625,7 @@ "maximum_value_warning": "9999", "default_value": 10, "value": "10", - "enabled": "draft_shield_enabled and draft_shield_height_limitation == \"limited\"", + "enabled": "draft_shield_enabled and draft_shield_height_limitation == 'limited'", "settable_per_mesh": false, "settable_per_extruder": false }, @@ -3710,7 +3710,7 @@ "description": "Alternate the direction in which the top/bottom layers are printed. Normally they are printed diagonally only. This setting adds the X-only and Y-only directions.", "type": "bool", "default_value": false, - "enabled": "top_bottom_pattern != \"concentric\"", + "enabled": "top_bottom_pattern != 'concentric'", "settable_per_mesh": true }, "support_conical_enabled": From d4bb0d4a0b4bb1e7ecbb1ebb8c3f7429222a9c2b Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Thu, 29 Sep 2016 14:44:34 +0200 Subject: [PATCH 4/4] Only use profile reader if extension matches with filename CURA-2462 --- cura/Settings/CuraContainerRegistry.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/cura/Settings/CuraContainerRegistry.py b/cura/Settings/CuraContainerRegistry.py index 460d7ba6c8..9b0b1dd2ba 100644 --- a/cura/Settings/CuraContainerRegistry.py +++ b/cura/Settings/CuraContainerRegistry.py @@ -129,13 +129,17 @@ class CuraContainerRegistry(ContainerRegistry): plugin_registry = PluginRegistry.getInstance() container_registry = ContainerRegistry.getInstance() + extension = file_name.split(".")[-1] for plugin_id, meta_data in self._getIOPlugins("profile_reader"): + if meta_data["profile_reader"][0]["extension"] != extension: + continue + profile_reader = plugin_registry.getPluginObject(plugin_id) try: - profile_or_list = profile_reader.read(file_name) # Try to open the file with the profile reader. + profile_or_list = profile_reader.read(file_name) # Try to open the file with the profile reader. except Exception as e: - #Note that this will fail quickly. That is, if any profile reader throws an exception, it will stop reading. It will only continue reading if the reader returned None. - Logger.log("e", "Failed to import profile from %s: %s", file_name, str(e)) + # Note that this will fail quickly. That is, if any profile reader throws an exception, it will stop reading. It will only continue reading if the reader returned None. + Logger.log("e", "Failed to import profile from %s: %s while using profile reader", file_name, str(e), profile_reader.getPluginId()) return { "status": "error", "message": catalog.i18nc("@info:status", "Failed to import profile from {0}: {1}", file_name, str(e))} if profile_or_list: # Success! name_seed = os.path.splitext(os.path.basename(file_name))[0] @@ -157,8 +161,8 @@ class CuraContainerRegistry(ContainerRegistry): return {"status": "ok", "message": catalog.i18nc("@info:status", "Successfully imported profile {0}", profile_or_list[0].getName())} - #If it hasn't returned by now, none of the plugins loaded the profile successfully. - return { "status": "error", "message": catalog.i18nc("@info:status", "Profile {0} has an unknown file type.", file_name)} + # If it hasn't returned by now, none of the plugins loaded the profile successfully. + return {"status": "error", "message": catalog.i18nc("@info:status", "Profile {0} has an unknown file type.", file_name)} def _configureProfile(self, profile, id_seed): profile.setReadOnly(False)