Skip to content

Commit

Permalink
Make multidimension entity naming consistent
Browse files Browse the repository at this point in the history
Pivot table was creating multidimensional entity names by appending
the entity names by the class name plus '__' which we do not do
anywhere else. We now use dimension_name_from() and element_name_from()
from spinedb_api to have consitent naming everywhere.

Re #2423
  • Loading branch information
soininen committed Nov 17, 2023
1 parent a4b20bd commit 1c73d12
Show file tree
Hide file tree
Showing 4 changed files with 10 additions and 11 deletions.
6 changes: 2 additions & 4 deletions spinetoolbox/spine_db_editor/mvcmodels/pivot_table_models.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
from PySide6.QtGui import QFont

from spinedb_api import DatabaseMapping
from spinedb_api.helpers import name_from_elements
from spinedb_api.parameter_value import join_value_and_type, split_value_and_type
from spinetoolbox.helpers import DB_ITEM_SEPARATOR, parameter_identifier
from spinetoolbox.fetch_parent import FlexibleFetchParent
Expand Down Expand Up @@ -1461,11 +1462,8 @@ def _do_batch_set_inner_data(self, row_map, column_map, data, values):

def _batch_set_entity_data(self, row_map, column_map, data, values):
def entity_to_add(db_map, header_ids):
ent_cls_name = self.db_mngr.get_item(db_map, "entity_class", self._parent.current_class_id.get(db_map))[
"name"
]
element_names = [self.db_mngr.get_item(db_map, "entity", id_)["name"] for id_ in header_ids]
name = ent_cls_name + "_" + "__".join(element_names)
name = name_from_elements(element_names)
return dict(element_id_list=list(header_ids), class_id=self._parent.current_class_id.get(db_map), name=name)

to_add = {}
Expand Down
9 changes: 4 additions & 5 deletions spinetoolbox/spine_db_editor/widgets/add_items_dialogs.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@
)
from PySide6.QtCore import Slot, Qt, QSize, QModelIndex
from PySide6.QtGui import QIcon

from spinedb_api.helpers import name_from_elements
from ...mvcmodels.empty_row_model import EmptyRowModel
from ...mvcmodels.compound_table_model import CompoundTableModel
from ...mvcmodels.minimal_table_model import MinimalTableModel
Expand Down Expand Up @@ -273,10 +275,7 @@ def _handle_model_data_changed(self, top_left, bottom_right, roles):
else:
col_data = lambda j: self.model.index(row, j).data() # pylint: disable=cell-var-from-loop
obj_cls_names = [col_data(j) for j in range(self.number_of_dimensions) if col_data(j)]
if len(obj_cls_names) == 1:
relationship_class_name = obj_cls_names[0] + "__"
else:
relationship_class_name = "__".join(obj_cls_names)
relationship_class_name = name_from_dimensions(obj_cls_names)
self.model.setData(self.model.index(row, self.number_of_dimensions), relationship_class_name)

@Slot()
Expand Down Expand Up @@ -401,7 +400,7 @@ def _handle_model_data_changed(self, top_left, bottom_right, roles):
for row in range(top, bottom + 1):
if header.index('entity name') not in range(left, right + 1):
el_names = [n for n in (self.model.index(row, j).data() for j in range(dimension_count)) if n]
entity_name = el_names[0] + "__" if len(el_names) == 1 else "__".join(el_names)
entity_name = name_from_elements(el_names)
self.model.setData(self.model.index(row, dimension_count), entity_name)


Expand Down
4 changes: 3 additions & 1 deletion tests/spine_db_editor/mvcmodels/test_scenario_model.py
Original file line number Diff line number Diff line change
Expand Up @@ -491,7 +491,9 @@ def test_paste_scenario_mime_data(self):
self._db_mngr.add_scenarios({self._db_map1: [{"name": "my_scenario"}]})
self._db_mngr.add_alternatives({self._db_map1: [{"name": "alternative_1"}]})
scenario_id = self._db_map1.get_scenario_item(name="my_scenario")["id"]
self._db_mngr.set_scenario_alternatives({self._db_map1: [{"id": scenario_id, "alternative_name_list": ["alternative_1", "Base"]}]})
self._db_mngr.set_scenario_alternatives(
{self._db_map1: [{"id": scenario_id, "alternative_name_list": ["alternative_1", "Base"]}]}
)
model = ScenarioModel(self._db_editor, self._db_mngr, self._db_map1, self._db_map2)
model.build_tree()
self._fetch_recursively(model)
Expand Down
2 changes: 1 addition & 1 deletion tests/test_spine_db_fetcher.py
Original file line number Diff line number Diff line change
Expand Up @@ -174,7 +174,7 @@ def test_fetch_relationships(self):
self._import_data(entity_classes=(("oc",), ("rc", ("oc",))), entities=(("oc", "obj"), ("rc", None, ("obj",))))
item = {
'id': -2,
'name': 'obj',
'name': 'obj__',
'class_id': -2,
'element_id_list': (-1,),
'description': None,
Expand Down

0 comments on commit 1c73d12

Please sign in to comment.