From b16e65bbf4e683f806e836fa348ea821b8f46334 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Z=C3=BCbeyde=20Civelek?= Date: Thu, 7 May 2026 10:48:37 +0200 Subject: [PATCH] fix(rules): accept multiple titles in base rules --- .../transform/xml_processing/rules/base.py | 16 ++++++++++++++-- .../records/transform/xml_processing/rules/hr.py | 7 +------ tests/cds-rdm/test_base_migration.py | 9 ++++----- 3 files changed, 19 insertions(+), 13 deletions(-) diff --git a/cds_migrator_kit/rdm/records/transform/xml_processing/rules/base.py b/cds_migrator_kit/rdm/records/transform/xml_processing/rules/base.py index 9a743263..cc079f98 100644 --- a/cds_migrator_kit/rdm/records/transform/xml_processing/rules/base.py +++ b/cds_migrator_kit/rdm/records/transform/xml_processing/rules/base.py @@ -570,8 +570,9 @@ def title(self, key, value): title = StringValue(value.get("a")) subtitle = StringValue(value.get("b", "")).parse() title.required() + title_string = title.parse() + alt_titles = self.get("additional_titles", []) if subtitle: - alt_titles = self.get("additional_titles", []) alt_titles.append( { "title": subtitle, @@ -579,7 +580,18 @@ def title(self, key, value): } ) self["additional_titles"] = alt_titles - return title.parse() + if self.get("title") and title_string: + alt_titles.append( + { + "title": title_string, + "type": {"id": "subtitle"}, + } + ) + self["additional_titles"] = alt_titles + raise IgnoreKey("title") + if title_string: + return title_string + raise IgnoreKey("title") @model.over("rights", "^540__") diff --git a/cds_migrator_kit/rdm/records/transform/xml_processing/rules/hr.py b/cds_migrator_kit/rdm/records/transform/xml_processing/rules/hr.py index fe02cd72..108a8c61 100644 --- a/cds_migrator_kit/rdm/records/transform/xml_processing/rules/hr.py +++ b/cds_migrator_kit/rdm/records/transform/xml_processing/rules/hr.py @@ -365,11 +365,7 @@ def title(self, key, value): self["additional_titles"] = alt_titles identifiers = self.get("identifiers", []) rep_num = next( - ( - identifier - for identifier in identifiers - if identifier["scheme"] == "cdsrn" - ), + (identifier for identifier in identifiers if identifier["scheme"] == "cdsrn"), {}, ).get("identifier") @@ -393,7 +389,6 @@ def title(self, key, value): return title - @model.over("meeting_cf", "^773__") @for_each_value def meeting(self, key, value): diff --git a/tests/cds-rdm/test_base_migration.py b/tests/cds-rdm/test_base_migration.py index 4aff7228..2bd59012 100644 --- a/tests/cds-rdm/test_base_migration.py +++ b/tests/cds-rdm/test_base_migration.py @@ -47,15 +47,14 @@ def test_title_with_subtitle(self): def test_title_missing_field_returns_empty(self): """Test that missing title returns empty string.""" record = {} - result = title(record, "245__", {}) - # StringValue with empty value returns empty string - assert result == "" + with pytest.raises(IgnoreKey): + title(record, "245__", {}) def test_title_empty_string_returns_empty(self): """Test that empty title returns empty string.""" record = {} - result = title(record, "245__", {"a": ""}) - assert result == "" + with pytest.raises(IgnoreKey): + title(record, "245__", {"a": ""}) def test_title_subtitle_appends_to_existing(self): """Test subtitle appends to existing additional_titles."""