From 4e71ddbdb022438ed9c5d7b54c0ffa93056c6d89 Mon Sep 17 00:00:00 2001 From: Eva Bardou <bardou@teklia.com> Date: Thu, 25 Jan 2024 16:34:14 +0000 Subject: [PATCH] Allow to set `load_parents` parameter while using `list_element_metadata` helper --- arkindex_worker/worker/metadata.py | 12 +++++-- tests/test_elements_worker/test_metadata.py | 38 +++++++++++++++++---- 2 files changed, 42 insertions(+), 8 deletions(-) diff --git a/arkindex_worker/worker/metadata.py b/arkindex_worker/worker/metadata.py index 136da154..75e4d6b7 100644 --- a/arkindex_worker/worker/metadata.py +++ b/arkindex_worker/worker/metadata.py @@ -178,16 +178,24 @@ class MetaDataMixin: return created_metadata_list def list_element_metadata( - self, element: Element | CachedElement + self, element: Element | CachedElement, load_parents: bool | None = None ) -> list[dict[str, str]]: """ List all metadata linked to an element. This method does not support cache. :param element: The element to list metadata on. + :param load_parents: Also include all metadata from the element's parents in the response. """ assert element and isinstance( element, Element | CachedElement ), "element shouldn't be null and should be of type Element or CachedElement" - return self.api_client.paginate("ListElementMetaData", id=element.id) + query_params = {} + if load_parents is not None: + assert isinstance(load_parents, bool), "load_parents should be of type bool" + query_params["load_parents"] = load_parents + + return self.api_client.paginate( + "ListElementMetaData", id=element.id, **query_params + ) diff --git a/tests/test_elements_worker/test_metadata.py b/tests/test_elements_worker/test_metadata.py index 3cce81f4..b40f9bf0 100644 --- a/tests/test_elements_worker/test_metadata.py +++ b/tests/test_elements_worker/test_metadata.py @@ -508,14 +508,23 @@ def test_create_metadatas_api_error(responses, mock_elements_worker): ] +def test_list_element_metadata_wrong_load_parents(fake_dummy_worker): + element = Element({"id": "element_id"}) + with pytest.raises(AssertionError, match="load_parents should be of type bool"): + fake_dummy_worker.list_element_metadata( + element=element, + load_parents="not bool", + ) + + def test_list_element_metadata(fake_dummy_worker): element = Element({"id": "element_id"}) fake_dummy_worker.api_client.add_response( "ListElementMetaData", id=element.id, - response={"id": "metadata_id"}, + response=[{"id": "metadata_id"}], ) - assert fake_dummy_worker.list_element_metadata(element) == {"id": "metadata_id"} + assert fake_dummy_worker.list_element_metadata(element) == [{"id": "metadata_id"}] assert len(fake_dummy_worker.api_client.history) == 1 assert len(fake_dummy_worker.api_client.responses) == 0 @@ -527,11 +536,28 @@ def test_list_element_metadata_cached_element(mock_elements_worker_with_cache): mock_elements_worker_with_cache.api_client.add_response( "ListElementMetaData", id="element_id", - response={"id": "metadata_id"}, + response=[{"id": "metadata_id"}], ) - assert mock_elements_worker_with_cache.list_element_metadata(element) == { - "id": "metadata_id" - } + assert mock_elements_worker_with_cache.list_element_metadata(element) == [ + {"id": "metadata_id"} + ] assert len(mock_elements_worker_with_cache.api_client.history) == 1 assert len(mock_elements_worker_with_cache.api_client.responses) == 0 + + +def test_list_element_metadata_with_load_parents(fake_dummy_worker): + element = Element({"id": "element_id"}) + fake_dummy_worker.api_client.add_response( + "ListElementMetaData", + id=element.id, + load_parents=True, + response=[{"id": "metadata_id"}, {"id": "parent_metadata_id"}], + ) + assert fake_dummy_worker.list_element_metadata(element, load_parents=True) == [ + {"id": "metadata_id"}, + {"id": "parent_metadata_id"}, + ] + + assert len(fake_dummy_worker.api_client.history) == 1 + assert len(fake_dummy_worker.api_client.responses) == 0 -- GitLab