From 1254331d9e85b92891f0a5b946a9eb9988ef93f1 Mon Sep 17 00:00:00 2001 From: Antti Soininen Date: Wed, 10 Dec 2025 21:27:29 +0200 Subject: [PATCH] Raise if parameter_type_list doesn't contain unique types Otherwise we'll get a Traceback when committing. --- spinedb_api/mapped_items.py | 7 ++++++- tests/test_DatabaseMapping.py | 12 ++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/spinedb_api/mapped_items.py b/spinedb_api/mapped_items.py index df39f821..2e4af363 100644 --- a/spinedb_api/mapped_items.py +++ b/spinedb_api/mapped_items.py @@ -814,7 +814,12 @@ class ParameterDefinitionItem(ParameterItemBase): def __init__(self, db_map, **kwargs): super().__init__(db_map, **kwargs) - self._init_type_list = kwargs.get("parameter_type_list") + if "parameter_type_list" in kwargs: + self._init_type_list = kwargs["parameter_type_list"] + if len(set(self._init_type_list)) != len(self._init_type_list): + raise SpineDBAPIError("entries in parameter_type_list must be unique") + else: + self._init_type_list = None def __getitem__(self, key): if key == "parameter_type_id_list": diff --git a/tests/test_DatabaseMapping.py b/tests/test_DatabaseMapping.py index a077a235..24ebba2c 100644 --- a/tests/test_DatabaseMapping.py +++ b/tests/test_DatabaseMapping.py @@ -3521,6 +3521,18 @@ def test_changing_value_list_while_values_exist_is_disallowed(self): ): lungs.update(parameter_value_list_id=values2["id"]) + def test_adding_parameter_definition_with_duplicate_type_raises(self): + with DatabaseMapping("sqlite://", create=True) as db_map: + db_map.add_entity_class(name="sea_monster") + with self.assertRaisesRegex(SpineDBAPIError, "^entries in parameter_type_list must be unique$"): + db_map.add_parameter_definition( + entity_class_name="sea_monster", name="reputation", parameter_type_list=("float", "float") + ) + self.assertEqual(db_map.find_parameter_definitions(), []) + horror_factor = db_map.add_parameter_definition(entity_class_name="sea_monster", name="horror_factor") + with self.assertRaisesRegex(SpineDBAPIError, "^entries in parameter_type_list must be unique$"): + horror_factor.update(parameter_type_list=("str", "str")) + class TestDatabaseMappingLegacy(unittest.TestCase): """'Backward compatibility' tests, i.e. pre-entity tests converted to work with the entity structure."""