From 70a89eb2693af1d5b68244bc69f3ae30fc924aa7 Mon Sep 17 00:00:00 2001 From: Antti Soininen Date: Tue, 4 Mar 2025 10:07:10 +0200 Subject: [PATCH] Fix Traceback when adding an entity failed We should not try to add an entity alternative for a failed entity. --- .../spine_db_editor/widgets/add_items_dialogs.py | 9 +++++---- tests/spine_db_editor/widgets/helpers.py | 4 ++-- tests/spine_db_editor/widgets/test_custom_qtreeview.py | 9 ++++++--- 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/spinetoolbox/spine_db_editor/widgets/add_items_dialogs.py b/spinetoolbox/spine_db_editor/widgets/add_items_dialogs.py index a97618ad6..a87fdee63 100644 --- a/spinetoolbox/spine_db_editor/widgets/add_items_dialogs.py +++ b/spinetoolbox/spine_db_editor/widgets/add_items_dialogs.py @@ -608,9 +608,8 @@ def accept(self): created_entities = {} for db_map, data in db_map_data.items(): for item in data: - created_entities.update( - {item["name"]: db_map.get_entity_item(class_id=item["class_id"], name=item["name"])} - ) + entity_name = item["name"] + created_entities[entity_name] = db_map.get_entity_item(class_id=item["class_id"], name=entity_name) entity_alternatives = self.make_entity_alternatives(created_entities) if entity_alternatives: # If alternatives have been defined self.db_mngr.add_entity_alternatives(entity_alternatives) @@ -630,9 +629,11 @@ def make_entity_alternatives(self, entities): alternative = row_data[alternative_column] if not alternative: continue - alternative = alternative.split("@")[0] entity_name = row_data[name_column] entity = entities[entity_name] + if not entity: + continue + alternative = alternative.split("@")[0] db_names = row_data[db_column] for db_name in db_names.split(", "): db_map = self.keyed_db_maps[db_name] diff --git a/tests/spine_db_editor/widgets/helpers.py b/tests/spine_db_editor/widgets/helpers.py index a75e10f30..50d5b879c 100644 --- a/tests/spine_db_editor/widgets/helpers.py +++ b/tests/spine_db_editor/widgets/helpers.py @@ -110,7 +110,7 @@ def add_entity_tree_item(item_names, view, menu_action_text, dialog_class): def add_zero_dimension_entity_class(view, name): view._context_item = view.model().root_item - add_entity_tree_item({0: name}, view, "Add entity classes", AddEntityClassesDialog) + add_entity_tree_item({0: name}, view, "Add entity classes...", AddEntityClassesDialog) def add_entity(view, name, entity_class_index=0, alternative=None, group=None): @@ -123,7 +123,7 @@ def add_entity(view, name, entity_class_index=0, alternative=None, group=None): data.update({1: alternative}) if group: data.update({2: group}) - add_entity_tree_item(data, view, "Add entities", AddEntitiesDialog) + add_entity_tree_item(data, view, "Add entities...", AddEntitiesDialog) def select_item_with_index(view, index, extend=False): diff --git a/tests/spine_db_editor/widgets/test_custom_qtreeview.py b/tests/spine_db_editor/widgets/test_custom_qtreeview.py index 0d3fe9709..0c02fa8f3 100644 --- a/tests/spine_db_editor/widgets/test_custom_qtreeview.py +++ b/tests/spine_db_editor/widgets/test_custom_qtreeview.py @@ -324,7 +324,10 @@ def test_add_entity_class_with_another_class_as_preselected_first_dimension(self entity_class_index = entity_model.index(0, 0, root_index) entity_tree_view._context_item = entity_model.item_from_index(entity_class_index) add_entity_tree_item( - {1: "my_first_dimension_is_an_entity_class"}, entity_tree_view, "Add entity classes", AddEntityClassesDialog + {1: "my_first_dimension_is_an_entity_class"}, + entity_tree_view, + "Add entity classes...", + AddEntityClassesDialog, ) view = self._db_editor.ui.treeView_entity model = view.model() @@ -349,14 +352,14 @@ def _add_multidimensional_class(self, class_name, dimension_names): add_entity_tree_item( item_names, self._db_editor.ui.treeView_entity, - "Add entity classes", + "Add entity classes...", AddEntityClassesDialog, ) def _add_multidimensional_entity(self, element_name, entity_names): item_names = dict(enumerate(entity_names)) item_names[len(entity_names)] = element_name - add_entity_tree_item(item_names, self._db_editor.ui.treeView_entity, "Add entities", AddEntitiesDialog) + add_entity_tree_item(item_names, self._db_editor.ui.treeView_entity, "Add entities...", AddEntitiesDialog) class TestEntityTreeViewWithExistingZeroDimensionalEntities(TestBase):