diff --git a/arkindex_worker/worker/metadata.py b/arkindex_worker/worker/metadata.py index d0995d469de26c51f006a08961f63390ba4ee721..74866797198ee153187d3024533218fe6094570f 100644 --- a/arkindex_worker/worker/metadata.py +++ b/arkindex_worker/worker/metadata.py @@ -105,18 +105,22 @@ class MetaDataMixin(object): return metadata["id"] - def create_metadatabulk( + def create_metadatas( self, element: Element, metadata_list: list, worker_version: str = None, ): """ - Create multiple metadata on an existing element. + Create multiple metadatas on an existing element. This method does not support cache. :param element Element: The element to create multiple metadata on. - :param metadata_list List(MetaDataBulkItem): The list of MetaDataBulkItem. + :param metadata_list List(MetaDataBulkItem): The list m contains the following elements: + - type : MetaType + - name : str + - value : str or number + - entity_id : str or None """ assert element and isinstance( element, Element @@ -124,20 +128,47 @@ class MetaDataMixin(object): assert metadata_list and isinstance( metadata_list, list - ), "type shouldn't be null and should be of type list of MetaType" + ), "type shouldn't be null and should be of type list of MetaDataBulkItem" + + assert ( + len(metadata_list) >= 3 + ), "The metadata_list does not contain the correct amount of data" + + type = metadata_list[0] + name = metadata_list[1] + value = metadata_list[2] + assert type and isinstance( + type, MetaType + ), "name shouldn't be null and should be of type MetaType" + assert name and isinstance( + name, str + ), "name shouldn't be null and should be of type str" + assert ( + value and isinstance(value, str) or value and isinstance(value, float) + ), "value shouldn't be null and should be of type str or float" + + if len(metadata_list) > 3: + entity_id = metadata_list[3] + assert entity_id is None or isinstance( + entity_id, str + ), "entity_id should be None or a str" metadatabulk = self.request( "CreateMetaDataBulk", id=element.id, - body={"worker_version": worker_version, "metadata_list": metadata_list}, + body={ + "worker_version": worker_version, + "worker_run_id": self.worker_run_id, + "metadata_list": metadata_list, + }, ) - return metadatabulk + return metadatabulk["metadata_list"] def list_metadata(self, element: Element): """ List all metadata linked to an element. - This method does not support cache.. + This method does not support cache. :param element Element: The element to list metadata on. """ diff --git a/tests/test_elements_worker/test_metadata.py b/tests/test_elements_worker/test_metadata.py index 2a1ff4d4c80fdb9ed37c8f8f2f87e6b9fa6b419b..f56e684b8485db9d4fde372aac59b424851060f5 100644 --- a/tests/test_elements_worker/test_metadata.py +++ b/tests/test_elements_worker/test_metadata.py @@ -199,21 +199,40 @@ def test_create_metadata(responses, mock_elements_worker): @pytest.mark.parametrize( - "worker_version", - [(None), (), ("worker_version")], + "worker_version, metadatas", + [ + (None, [MetaType("text"), "fake_name", "fake_value"]), + (None, [MetaType("text"), "fake_name", "fake_value", "fake_entity_id"]), + (None, [MetaType("text"), "fake_name", "fake_value", None]), + (None, [MetaType("text"), "fake_name", 13.5, None]), + (None, [MetaType("text"), "fake_name", 13.5, "fake_entity_id"]), + ("worker_version", [MetaType("text"), "fake_name", "fake_value"]), + ( + "worker_version", + [MetaType("text"), "fake_name", "fake_value", "fake_entity_id"], + ), + ("worker_version", [MetaType("text"), "fake_name", "fake_value", None]), + ("worker_version", [MetaType("text"), "fake_name", 13.5, None]), + ("worker_version", [MetaType("text"), "fake_name", 13.5, "fake_entity_id"]), + ], ) -def test_create_metadatabulk(fake_dummy_worker, worker_version): +def test_create_metadatas(fake_dummy_worker, worker_version, metadatas): element = Element({"id": "element_id"}) - metadata_list = [MetaType("text"), "fake_name", "fake_value"] + fake_dummy_worker.worker_run_id = "fake_worker_run_id" fake_dummy_worker.api_client.add_response( "CreateMetaDataBulk", id=element.id, - response={"worker_version": worker_version, "metadata_list": metadata_list}, - body={"worker_version": worker_version, "metadata_list": metadata_list}, + response={"metadata_list": metadatas}, + body={ + "worker_version": worker_version, + "worker_run_id": fake_dummy_worker.worker_run_id, + "metadata_list": metadatas, + }, + ) + assert ( + fake_dummy_worker.create_metadatas(element, metadatas, worker_version) + == metadatas ) - assert fake_dummy_worker.create_metadatabulk( - element, metadata_list, worker_version - ) == {"worker_version": worker_version, "metadata_list": metadata_list} assert len(fake_dummy_worker.api_client.history) == 1 assert len(fake_dummy_worker.api_client.responses) == 0