Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • workers/base-worker
1 result
Show changes
Commits on Source (6)
......@@ -7,6 +7,7 @@ from enum import Enum
from typing import Dict, List, Optional, Union
from arkindex_worker import logger
from arkindex_worker.cache import CachedElement
from arkindex_worker.models import Element
......@@ -59,7 +60,7 @@ class MetaType(Enum):
class MetaDataMixin(object):
def create_metadata(
self,
element: Element,
element: Union[Element, CachedElement],
type: MetaType,
name: str,
value: str,
......@@ -76,8 +77,8 @@ class MetaDataMixin(object):
:returns: UUID of the created metadata.
"""
assert element and isinstance(
element, Element
), "element shouldn't be null and should be of type Element"
element, (Element, CachedElement)
), "element shouldn't be null and should be of type Element or CachedElement"
assert type and isinstance(
type, MetaType
), "type shouldn't be null and should be of type MetaType"
......@@ -110,7 +111,7 @@ class MetaDataMixin(object):
def create_metadatas(
self,
element: Element,
element: Union[Element, CachedElement],
metadatas: List[
Dict[
str, Union[MetaType, str, Union[str, Union[int, float]], Optional[str]]
......@@ -129,8 +130,8 @@ class MetaDataMixin(object):
- entity_id : Union[str, None]
"""
assert element and isinstance(
element, Element
), "element shouldn't be null and should be of type Element"
element, (Element, CachedElement)
), "element shouldn't be null and should be of type Element or CachedElement"
assert metadatas and isinstance(
metadatas, list
......@@ -186,7 +187,9 @@ class MetaDataMixin(object):
return created_metadatas
def list_element_metadata(self, element: Element) -> List[Dict[str, str]]:
def list_element_metadata(
self, element: Union[Element, CachedElement]
) -> List[Dict[str, str]]:
"""
List all metadata linked to an element.
This method does not support cache.
......@@ -194,7 +197,7 @@ class MetaDataMixin(object):
:param element: The element to list metadata on.
"""
assert element and isinstance(
element, Element
), "element shouldn't be null and should be of type Element"
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)
black==22.8.0
doc8==0.11.1
mkdocs==1.3.1
mkdocs==1.4.0
mkdocstrings==0.19.0
mkdocstrings-python==0.7.1
recommonmark==0.7.1
arkindex-client==1.0.11
mkdocs-material==8.5.3
mkdocs-material==8.5.5
peewee==3.15.2
Pillow==9.2.0
pymdown-extensions==9.5
python-gitlab==3.9.0
pymdown-extensions==9.6
python-gitlab==3.10.0
python-gnupg==0.5.0
sh==1.14.3
shapely==1.8.4
......
......@@ -183,7 +183,7 @@ def mock_worker_run_api(responses):
responses.add(
responses.GET,
"http://testserver/api/v1/imports/workers/56785678-5678-5678-5678-567856785678/",
"http://testserver/api/v1/process/workers/56785678-5678-5678-5678-567856785678/",
status=200,
body=json.dumps(payload),
content_type="application/json",
......
......@@ -186,7 +186,7 @@ def test_configure_worker_run(mocker, monkeypatch, responses):
responses.add(
responses.GET,
"http://testserver/api/v1/imports/workers/56785678-5678-5678-5678-567856785678/",
"http://testserver/api/v1/process/workers/56785678-5678-5678-5678-567856785678/",
status=200,
body=json.dumps(payload),
content_type="application/json",
......@@ -260,7 +260,7 @@ def test_configure_user_configuration_defaults(
}
responses.add(
responses.GET,
"http://testserver/api/v1/imports/workers/56785678-5678-5678-5678-567856785678/",
"http://testserver/api/v1/process/workers/56785678-5678-5678-5678-567856785678/",
status=200,
body=json.dumps(payload),
content_type="application/json",
......@@ -318,7 +318,7 @@ def test_configure_user_config_debug(mocker, monkeypatch, responses, debug):
}
responses.add(
responses.GET,
"http://testserver/api/v1/imports/workers/56785678-5678-5678-5678-567856785678/",
"http://testserver/api/v1/process/workers/56785678-5678-5678-5678-567856785678/",
status=200,
body=json.dumps(payload),
content_type="application/json",
......@@ -369,7 +369,7 @@ def test_configure_worker_run_missing_conf(mocker, monkeypatch, responses):
}
responses.add(
responses.GET,
"http://testserver/api/v1/imports/workers/56785678-5678-5678-5678-567856785678/",
"http://testserver/api/v1/process/workers/56785678-5678-5678-5678-567856785678/",
status=200,
body=json.dumps(payload),
content_type="application/json",
......@@ -420,7 +420,7 @@ def test_configure_worker_run_no_worker_run_conf(mocker, monkeypatch, responses)
}
responses.add(
responses.GET,
"http://testserver/api/v1/imports/workers/56785678-5678-5678-5678-567856785678/",
"http://testserver/api/v1/process/workers/56785678-5678-5678-5678-567856785678/",
status=200,
body=json.dumps(payload),
content_type="application/json",
......@@ -476,7 +476,7 @@ def test_configure_load_model_configuration(mocker, monkeypatch, responses):
responses.add(
responses.GET,
"http://testserver/api/v1/imports/workers/56785678-5678-5678-5678-567856785678/",
"http://testserver/api/v1/process/workers/56785678-5678-5678-5678-567856785678/",
status=200,
body=json.dumps(payload),
content_type="application/json",
......
......@@ -3,6 +3,6 @@
BASE_API_CALLS = [
(
"GET",
"http://testserver/api/v1/imports/workers/56785678-5678-5678-5678-567856785678/",
"http://testserver/api/v1/process/workers/56785678-5678-5678-5678-567856785678/",
),
]
......@@ -4,6 +4,8 @@ import json
import pytest
from apistar.exceptions import ErrorResponse
from arkindex.mock import MockApiClient
from arkindex_worker.cache import CachedElement
from arkindex_worker.models import Element
from arkindex_worker.worker import MetaType
......@@ -18,7 +20,10 @@ def test_create_metadata_wrong_element(mock_elements_worker):
name="Teklia",
value="La Turbine, Grenoble 38000",
)
assert str(e.value) == "element shouldn't be null and should be of type Element"
assert (
str(e.value)
== "element shouldn't be null and should be of type Element or CachedElement"
)
with pytest.raises(AssertionError) as e:
mock_elements_worker.create_metadata(
......@@ -27,7 +32,10 @@ def test_create_metadata_wrong_element(mock_elements_worker):
name="Teklia",
value="La Turbine, Grenoble 38000",
)
assert str(e.value) == "element shouldn't be null and should be of type Element"
assert (
str(e.value)
== "element shouldn't be null and should be of type Element or CachedElement"
)
def test_create_metadata_wrong_type(mock_elements_worker):
......@@ -198,6 +206,41 @@ def test_create_metadata(responses, mock_elements_worker):
assert metadata_id == "12345678-1234-1234-1234-123456789123"
def test_create_metadata_cached_element(responses, mock_elements_worker_with_cache):
elt = CachedElement.create(id="12341234-1234-1234-1234-123412341234", type="thing")
responses.add(
responses.POST,
"http://testserver/api/v1/element/12341234-1234-1234-1234-123412341234/metadata/",
status=200,
json={"id": "12345678-1234-1234-1234-123456789123"},
)
metadata_id = mock_elements_worker_with_cache.create_metadata(
element=elt,
type=MetaType.Location,
name="Teklia",
value="La Turbine, Grenoble 38000",
)
assert len(responses.calls) == len(BASE_API_CALLS) + 1
assert [
(call.request.method, call.request.url) for call in responses.calls
] == BASE_API_CALLS + [
(
"POST",
"http://testserver/api/v1/element/12341234-1234-1234-1234-123412341234/metadata/",
),
]
assert json.loads(responses.calls[-1].request.body) == {
"type": "location",
"name": "Teklia",
"value": "La Turbine, Grenoble 38000",
"entity_id": None,
"worker_run_id": "56785678-5678-5678-5678-567856785678",
}
assert metadata_id == "12345678-1234-1234-1234-123456789123"
@pytest.mark.parametrize(
"metadatas",
[
......@@ -266,6 +309,80 @@ def test_create_metadatas(responses, mock_elements_worker, metadatas):
]
@pytest.mark.parametrize(
"metadatas",
[
([{"type": MetaType.Text, "name": "fake_name", "value": "fake_value"}]),
(
[
{
"type": MetaType.Text,
"name": "fake_name",
"value": "fake_value",
"entity_id": "fake_entity_id",
}
]
),
],
)
def test_create_metadatas_cached_element(
responses, mock_elements_worker_with_cache, metadatas
):
element = CachedElement.create(
id="12341234-1234-1234-1234-123412341234", type="thing"
)
responses.add(
responses.POST,
"http://testserver/api/v1/element/12341234-1234-1234-1234-123412341234/metadata/bulk/",
status=201,
json={
"worker_run_id": "56785678-5678-5678-5678-567856785678",
"metadata_list": [
{
"id": "fake_metadata_id",
"type": metadatas[0]["type"].value,
"name": metadatas[0]["name"],
"value": metadatas[0]["value"],
"dates": [],
"entity_id": metadatas[0].get("entity_id"),
}
],
},
)
created_metadatas = mock_elements_worker_with_cache.create_metadatas(
element, metadatas
)
assert len(responses.calls) == len(BASE_API_CALLS) + 1
assert [
(call.request.method, call.request.url) for call in responses.calls
] == BASE_API_CALLS + [
(
"POST",
"http://testserver/api/v1/element/12341234-1234-1234-1234-123412341234/metadata/bulk/",
),
]
assert json.loads(responses.calls[-1].request.body)["metadata_list"] == [
{
"type": metadatas[0]["type"].value,
"name": metadatas[0]["name"],
"value": metadatas[0]["value"],
"entity_id": metadatas[0].get("entity_id"),
}
]
assert created_metadatas == [
{
"id": "fake_metadata_id",
"type": metadatas[0]["type"].value,
"name": metadatas[0]["name"],
"value": metadatas[0]["value"],
"dates": [],
"entity_id": metadatas[0].get("entity_id"),
}
]
@pytest.mark.parametrize(
"wrong_element",
[
......@@ -283,7 +400,10 @@ def test_create_metadatas_wrong_element(mock_elements_worker, wrong_element):
mock_elements_worker.create_metadatas(
element=wrong_element, metadatas=wrong_metadatas
)
assert str(e.value) == "element shouldn't be null and should be of type Element"
assert (
str(e.value)
== "element shouldn't be null and should be of type Element or CachedElement"
)
@pytest.mark.parametrize(
......@@ -417,3 +537,19 @@ def test_list_element_metadata(fake_dummy_worker):
assert len(fake_dummy_worker.api_client.history) == 1
assert len(fake_dummy_worker.api_client.responses) == 0
def test_list_element_metadata_cached_element(mock_elements_worker_with_cache):
element = CachedElement.create(id="element_id", type="thing")
mock_elements_worker_with_cache.api_client = MockApiClient()
mock_elements_worker_with_cache.api_client.add_response(
"ListElementMetaData",
id="element_id",
response={"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