Skip to content

Commit 3d57da9

Browse files
committed
Refactor to reduce code complexity and increase test coverage
1 parent 8afb3df commit 3d57da9

File tree

2 files changed

+39
-7
lines changed

2 files changed

+39
-7
lines changed

ils_middleware/tasks/sinopia/metadata_check.py

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import rdflib
66
import requests # type: ignore
77

8-
from typing import Optional
8+
from typing import Optional, Union
99

1010
logger = logging.getLogger(__name__)
1111

@@ -33,6 +33,16 @@ def _query_for_ils_info(graph_jsonld: str, uri: str) -> dict:
3333
return output
3434

3535

36+
def _get_relationships(resource_uri: str) -> Union[list, None]:
37+
result = requests.get(f"{resource_uri}/relationships")
38+
if result.status_code > 399:
39+
msg = f"Failed to retrieve {resource_uri}: {result.status_code}\n{result.text}"
40+
logging.error(msg)
41+
return None
42+
43+
return result.json().get("sinopiaHasLocalAdminMetadataInferredRefs")
44+
45+
3646
def _get_retrieve_metadata_resource(uri: str) -> Optional[dict]:
3747
"""Retrieves AdminMetadata resource and extracts any ILS identifiers"""
3848
metadata_result = requests.get(uri)
@@ -76,13 +86,10 @@ def _retrieve_all_resource_refs(
7686
if target_resource_id:
7787
retrieved_resources[resource_uri] = [{default_ils: target_resource_id}]
7888
continue
79-
result = requests.get(f"{resource_uri}/relationships")
80-
if result.status_code > 399:
81-
msg = f"Failed to retrieve {resource_uri}: {result.status_code}\n{result.text}"
82-
logging.error(msg)
83-
continue
8489

85-
metadata_uris = result.json().get("sinopiaHasLocalAdminMetadataInferredRefs")
90+
metadata_uris = _get_relationships(resource_uri)
91+
if metadata_uris is None:
92+
continue
8693

8794
ils_info = _retrieve_all_metadata(metadata_uris)
8895
if ils_info:

tests/tasks/sinopia/test_metadata_check.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,9 @@
1515

1616
from ils_middleware.tasks.sinopia.metadata_check import (
1717
existing_metadata_check,
18+
_retrieve_all_resource_refs,
1819
_get_retrieve_metadata_resource,
20+
_get_relationships,
1921
_retrieve_all_metadata,
2022
)
2123

@@ -184,3 +186,26 @@ def test_dups_in_retrieve_all_metadata(mock_requests):
184186
)
185187

186188
assert result == [{"SIRSI": "13704749"}]
189+
190+
191+
def test_get_relationships_no_resource(mock_requests, caplog):
192+
missing_result = _get_relationships("https://sinopia.io/resource/no-resource")
193+
assert missing_result is None
194+
assert (
195+
"Failed to retrieve https://sinopia.io/resource/no-resource: 401" in caplog.text
196+
)
197+
198+
199+
def test_retrieve_all_resource_refs_target_resource():
200+
mock_task_instance = MagicMock()
201+
mock_task_instance.xcom_pull = lambda **kwargs: {
202+
"target_resource_id": "https://sinopia.io/resource/34556-abcde"
203+
}
204+
retrieved_resources = _retrieve_all_resource_refs(
205+
["https://sinopia.io/resource/abcdefa-12345"], mock_task_instance, "folio"
206+
)
207+
assert retrieved_resources == {
208+
"https://sinopia.io/resource/abcdefa-12345": [
209+
{"folio": "https://sinopia.io/resource/34556-abcde"}
210+
]
211+
}

0 commit comments

Comments
 (0)