From bfa6e577c442fd5a8692a3dd82f009a67ba8b8ab Mon Sep 17 00:00:00 2001 From: Lorenzo Vagliano Date: Mon, 13 Jan 2025 12:53:01 +0100 Subject: [PATCH 1/2] fix[data builder]: Access doi value directly in literature Signed-off-by: Lorenzo Vagliano --- inspire_schemas/builders/data.py | 5 +++-- tests/integration/test_builders.py | 4 +++- tests/unit/test_data_builder.py | 11 +++++++---- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/inspire_schemas/builders/data.py b/inspire_schemas/builders/data.py index 7e1f9c0d..1dede933 100644 --- a/inspire_schemas/builders/data.py +++ b/inspire_schemas/builders/data.py @@ -301,7 +301,7 @@ def add_literature(self, doi=None, record=None): """Add literature. :param doi: doi of the literature - :type doi: dict + :type doi: str :param record: dictionary with ``$ref`` pointing to proper record. :type record: dict @@ -311,6 +311,7 @@ def add_literature(self, doi=None, record=None): } if doi: - literature_dict['doi'] = doi + doi_dict = {"value": doi} + literature_dict['doi'] = doi_dict self._append_to('literature', literature_dict) diff --git a/tests/integration/test_builders.py b/tests/integration/test_builders.py index 09adccf4..285c1e47 100644 --- a/tests/integration/test_builders.py +++ b/tests/integration/test_builders.py @@ -485,7 +485,9 @@ def test_data_builder(data_data): literatures = data_data['literature'] for literature in literatures: - builder.add_literature(literature.get("doi"), literature.get('record')) + doi_value = literature.get("doi", {}).get("value") + record = literature.get("record") + builder.add_literature(doi_value, record) assert builder.record['literature'] == literatures urls = data_data['urls'] diff --git a/tests/unit/test_data_builder.py b/tests/unit/test_data_builder.py index fb39cb7f..5d4f03bb 100644 --- a/tests/unit/test_data_builder.py +++ b/tests/unit/test_data_builder.py @@ -119,10 +119,13 @@ def test_add_literature(): result = builder.record.get("literature") expected = [ - { - "doi": doi, - "record": record, - } + { + "doi": + { + "value":"10.1234/example.doi" + }, + "record": record + } ] assert result == expected From 8ab41639823d8e997695a1f184af397f55712e37 Mon Sep 17 00:00:00 2001 From: Lorenzo Vagliano Date: Tue, 14 Jan 2025 17:45:12 +0100 Subject: [PATCH 2/2] fix[data builder]: Access doi value directly in literature Signed-off-by: Lorenzo Vagliano - Also Added record validation in unit tests in order to avoid testing wrong behaviour, as was previously happening with test_add_literature. --- inspire_schemas/builders/data.py | 4 ++-- tests/integration/fixtures/data_example.json | 1 - tests/integration/test_builders.py | 2 +- tests/unit/test_data_builder.py | 16 ++++++++++++++-- 4 files changed, 17 insertions(+), 6 deletions(-) diff --git a/inspire_schemas/builders/data.py b/inspire_schemas/builders/data.py index 7e1f9c0d..e78dc915 100644 --- a/inspire_schemas/builders/data.py +++ b/inspire_schemas/builders/data.py @@ -301,7 +301,7 @@ def add_literature(self, doi=None, record=None): """Add literature. :param doi: doi of the literature - :type doi: dict + :type doi: str :param record: dictionary with ``$ref`` pointing to proper record. :type record: dict @@ -311,6 +311,6 @@ def add_literature(self, doi=None, record=None): } if doi: - literature_dict['doi'] = doi + literature_dict['doi'] = {"value": doi} self._append_to('literature', literature_dict) diff --git a/tests/integration/fixtures/data_example.json b/tests/integration/fixtures/data_example.json index 872e3f92..8a0e36c8 100644 --- a/tests/integration/fixtures/data_example.json +++ b/tests/integration/fixtures/data_example.json @@ -269,7 +269,6 @@ "literature": [ { "doi": { - "source": "amet Ut", "value": "10.912/W/K[Bz" }, "record": { diff --git a/tests/integration/test_builders.py b/tests/integration/test_builders.py index 09adccf4..3684a1c8 100644 --- a/tests/integration/test_builders.py +++ b/tests/integration/test_builders.py @@ -485,7 +485,7 @@ def test_data_builder(data_data): literatures = data_data['literature'] for literature in literatures: - builder.add_literature(literature.get("doi"), literature.get('record')) + builder.add_literature(literature.get("doi", {}).get("value"), literature.get('record')) assert builder.record['literature'] == literatures urls = data_data['urls'] diff --git a/tests/unit/test_data_builder.py b/tests/unit/test_data_builder.py index fb39cb7f..a8b04f58 100644 --- a/tests/unit/test_data_builder.py +++ b/tests/unit/test_data_builder.py @@ -42,6 +42,7 @@ def test_add_abstract(): abstract = "This is a test abstract." source = "Test Source" builder.add_abstract(abstract, source) + builder.validate_record() result = builder.record.get("abstracts") expected = [{"source": source, "value": abstract}] assert result == expected @@ -55,6 +56,7 @@ def test_add_author(): "emails": ["john.smith@example.org"], } builder.add_author(author_data) + builder.validate_record() result = builder.record.get("authors") expected = [author_data] assert result == expected @@ -66,6 +68,7 @@ def test_add_title(): subtitle = "An Even Better Subtitle" source = "Test Source" builder.add_title(title, subtitle, source) + builder.validate_record() result = builder.record.get("titles") expected = [ {"source": source, "title": title, "subtitle": subtitle}, @@ -76,6 +79,7 @@ def test_add_creation_date(): builder = DataBuilder() creation_date = "2020-01-01" builder.add_creation_date(creation_date) + builder.validate_record() result = builder.record.get("creation_date") assert result == creation_date @@ -84,6 +88,7 @@ def test_add_doi(): doi = "10.1234/example.doi" source = "Test Source" builder.add_doi(doi, source) + builder.validate_record() result = builder.record.get("dois") expected = [{"source": source, "value": "10.1234/example.doi"}] assert result == expected @@ -94,6 +99,7 @@ def test_add_keyword(): keyword = "Physics" source = "Test Source" builder.add_keyword(keyword, source) + builder.validate_record() result = builder.record.get("keywords") expected = [{"source": source, "value": keyword}] assert result == expected @@ -104,6 +110,7 @@ def test_add_accelerator_experiment(): legacy_name = "FNAL-E-0900" experiment_record = {"$ref": "http://example.com/api/experiments/123"} builder.add_accelerator_experiment(legacy_name, record=experiment_record) + builder.validate_record() result = builder.record.get("accelerator_experiments") expected = [{"legacy_name": legacy_name, "record": experiment_record}] assert result == expected @@ -116,12 +123,17 @@ def test_add_literature(): record = {"$ref": "http://example.com/api/literature/123"} builder.add_literature(doi, record=record) + builder.validate_record() result = builder.record.get("literature") expected = [ { - "doi": doi, - "record": record, + "doi":{ + "value":"10.1234/example.doi" + }, + "record":{ + "$ref":"http://example.com/api/literature/123" + } } ]