arkindex-base-worker 0.4.0__py3-none-any.whl → 0.4.0a2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {arkindex_base_worker-0.4.0.dist-info → arkindex_base_worker-0.4.0a2.dist-info}/METADATA +13 -15
- arkindex_base_worker-0.4.0a2.dist-info/RECORD +51 -0
- {arkindex_base_worker-0.4.0.dist-info → arkindex_base_worker-0.4.0a2.dist-info}/WHEEL +1 -1
- arkindex_worker/cache.py +1 -1
- arkindex_worker/image.py +1 -120
- arkindex_worker/utils.py +0 -82
- arkindex_worker/worker/__init__.py +161 -46
- arkindex_worker/worker/base.py +11 -36
- arkindex_worker/worker/classification.py +18 -34
- arkindex_worker/worker/corpus.py +4 -21
- arkindex_worker/worker/dataset.py +1 -71
- arkindex_worker/worker/element.py +91 -352
- arkindex_worker/worker/entity.py +11 -11
- arkindex_worker/worker/metadata.py +9 -19
- arkindex_worker/worker/task.py +4 -5
- arkindex_worker/worker/training.py +6 -6
- arkindex_worker/worker/transcription.py +68 -89
- arkindex_worker/worker/version.py +1 -3
- tests/__init__.py +1 -1
- tests/conftest.py +45 -33
- tests/test_base_worker.py +3 -204
- tests/test_dataset_worker.py +4 -7
- tests/test_elements_worker/{test_classification.py → test_classifications.py} +61 -194
- tests/test_elements_worker/test_corpus.py +1 -32
- tests/test_elements_worker/test_dataset.py +1 -1
- tests/test_elements_worker/test_elements.py +2734 -0
- tests/test_elements_worker/{test_entity_create.py → test_entities.py} +160 -26
- tests/test_elements_worker/test_image.py +1 -2
- tests/test_elements_worker/test_metadata.py +99 -224
- tests/test_elements_worker/test_task.py +1 -1
- tests/test_elements_worker/test_training.py +2 -2
- tests/test_elements_worker/test_transcriptions.py +2102 -0
- tests/test_elements_worker/test_worker.py +280 -563
- tests/test_image.py +204 -429
- tests/test_merge.py +2 -1
- tests/test_utils.py +3 -66
- arkindex_base_worker-0.4.0.dist-info/RECORD +0 -61
- arkindex_worker/worker/process.py +0 -92
- tests/test_elements_worker/test_element.py +0 -427
- tests/test_elements_worker/test_element_create_multiple.py +0 -715
- tests/test_elements_worker/test_element_create_single.py +0 -528
- tests/test_elements_worker/test_element_list_children.py +0 -969
- tests/test_elements_worker/test_element_list_parents.py +0 -530
- tests/test_elements_worker/test_entity_list_and_check.py +0 -160
- tests/test_elements_worker/test_process.py +0 -89
- tests/test_elements_worker/test_transcription_create.py +0 -873
- tests/test_elements_worker/test_transcription_create_with_elements.py +0 -951
- tests/test_elements_worker/test_transcription_list.py +0 -450
- tests/test_elements_worker/test_version.py +0 -60
- {arkindex_base_worker-0.4.0.dist-info → arkindex_base_worker-0.4.0a2.dist-info}/LICENSE +0 -0
- {arkindex_base_worker-0.4.0.dist-info → arkindex_base_worker-0.4.0a2.dist-info}/top_level.txt +0 -0
|
@@ -3,9 +3,9 @@ import re
|
|
|
3
3
|
from uuid import UUID
|
|
4
4
|
|
|
5
5
|
import pytest
|
|
6
|
+
from apistar.exceptions import ErrorResponse
|
|
6
7
|
from responses import matchers
|
|
7
8
|
|
|
8
|
-
from arkindex.exceptions import ErrorResponse
|
|
9
9
|
from arkindex_worker.cache import (
|
|
10
10
|
CachedElement,
|
|
11
11
|
CachedEntity,
|
|
@@ -13,6 +13,7 @@ from arkindex_worker.cache import (
|
|
|
13
13
|
CachedTranscriptionEntity,
|
|
14
14
|
)
|
|
15
15
|
from arkindex_worker.models import Transcription
|
|
16
|
+
from arkindex_worker.worker.entity import MissingEntityType
|
|
16
17
|
from arkindex_worker.worker.transcription import TextOrientation
|
|
17
18
|
from tests import CORPUS_ID
|
|
18
19
|
|
|
@@ -684,6 +685,158 @@ def test_create_transcription_entity_with_confidence_with_cache(
|
|
|
684
685
|
]
|
|
685
686
|
|
|
686
687
|
|
|
688
|
+
def test_list_transcription_entities_deprecation(fake_dummy_worker):
|
|
689
|
+
transcription = Transcription({"id": "fake_transcription_id"})
|
|
690
|
+
worker_version = "worker_version_id"
|
|
691
|
+
fake_dummy_worker.api_client.add_response(
|
|
692
|
+
"ListTranscriptionEntities",
|
|
693
|
+
id=transcription.id,
|
|
694
|
+
worker_version=worker_version,
|
|
695
|
+
response={"id": "entity_id"},
|
|
696
|
+
)
|
|
697
|
+
with pytest.deprecated_call(
|
|
698
|
+
match="`worker_version` usage is deprecated. Consider using `worker_run` instead."
|
|
699
|
+
):
|
|
700
|
+
assert fake_dummy_worker.list_transcription_entities(
|
|
701
|
+
transcription, worker_version=worker_version
|
|
702
|
+
) == {"id": "entity_id"}
|
|
703
|
+
|
|
704
|
+
assert len(fake_dummy_worker.api_client.history) == 1
|
|
705
|
+
assert len(fake_dummy_worker.api_client.responses) == 0
|
|
706
|
+
|
|
707
|
+
|
|
708
|
+
def test_list_transcription_entities(fake_dummy_worker):
|
|
709
|
+
transcription = Transcription({"id": "fake_transcription_id"})
|
|
710
|
+
worker_run = "worker_run_id"
|
|
711
|
+
fake_dummy_worker.api_client.add_response(
|
|
712
|
+
"ListTranscriptionEntities",
|
|
713
|
+
id=transcription.id,
|
|
714
|
+
worker_run=worker_run,
|
|
715
|
+
response={"id": "entity_id"},
|
|
716
|
+
)
|
|
717
|
+
assert fake_dummy_worker.list_transcription_entities(
|
|
718
|
+
transcription, worker_run=worker_run
|
|
719
|
+
) == {"id": "entity_id"}
|
|
720
|
+
|
|
721
|
+
assert len(fake_dummy_worker.api_client.history) == 1
|
|
722
|
+
assert len(fake_dummy_worker.api_client.responses) == 0
|
|
723
|
+
|
|
724
|
+
|
|
725
|
+
def test_list_corpus_entities(responses, mock_elements_worker):
|
|
726
|
+
responses.add(
|
|
727
|
+
responses.GET,
|
|
728
|
+
f"http://testserver/api/v1/corpus/{CORPUS_ID}/entities/",
|
|
729
|
+
json={
|
|
730
|
+
"count": 1,
|
|
731
|
+
"next": None,
|
|
732
|
+
"results": [
|
|
733
|
+
{
|
|
734
|
+
"id": "fake_entity_id",
|
|
735
|
+
}
|
|
736
|
+
],
|
|
737
|
+
},
|
|
738
|
+
)
|
|
739
|
+
|
|
740
|
+
mock_elements_worker.list_corpus_entities()
|
|
741
|
+
|
|
742
|
+
assert mock_elements_worker.entities == {
|
|
743
|
+
"fake_entity_id": {
|
|
744
|
+
"id": "fake_entity_id",
|
|
745
|
+
}
|
|
746
|
+
}
|
|
747
|
+
|
|
748
|
+
assert len(responses.calls) == len(BASE_API_CALLS) + 1
|
|
749
|
+
assert [
|
|
750
|
+
(call.request.method, call.request.url) for call in responses.calls
|
|
751
|
+
] == BASE_API_CALLS + [
|
|
752
|
+
(
|
|
753
|
+
"GET",
|
|
754
|
+
f"http://testserver/api/v1/corpus/{CORPUS_ID}/entities/",
|
|
755
|
+
),
|
|
756
|
+
]
|
|
757
|
+
|
|
758
|
+
|
|
759
|
+
@pytest.mark.parametrize("wrong_name", [1234, 12.5])
|
|
760
|
+
def test_list_corpus_entities_wrong_name(mock_elements_worker, wrong_name):
|
|
761
|
+
with pytest.raises(AssertionError, match="name should be of type str"):
|
|
762
|
+
mock_elements_worker.list_corpus_entities(name=wrong_name)
|
|
763
|
+
|
|
764
|
+
|
|
765
|
+
@pytest.mark.parametrize("wrong_parent", [{"id": "element_id"}, 12.5, "blabla"])
|
|
766
|
+
def test_list_corpus_entities_wrong_parent(mock_elements_worker, wrong_parent):
|
|
767
|
+
with pytest.raises(AssertionError, match="parent should be of type Element"):
|
|
768
|
+
mock_elements_worker.list_corpus_entities(parent=wrong_parent)
|
|
769
|
+
|
|
770
|
+
|
|
771
|
+
def test_check_required_entity_types(responses, mock_elements_worker):
|
|
772
|
+
# Set one entity type
|
|
773
|
+
mock_elements_worker.entity_types = {"person": "person-entity-type-id"}
|
|
774
|
+
|
|
775
|
+
checked_types = ["person", "new-entity"]
|
|
776
|
+
|
|
777
|
+
# Call to create new entity type
|
|
778
|
+
responses.add(
|
|
779
|
+
responses.POST,
|
|
780
|
+
"http://testserver/api/v1/entity/types/",
|
|
781
|
+
status=200,
|
|
782
|
+
match=[
|
|
783
|
+
matchers.json_params_matcher(
|
|
784
|
+
{
|
|
785
|
+
"name": "new-entity",
|
|
786
|
+
"corpus": CORPUS_ID,
|
|
787
|
+
}
|
|
788
|
+
)
|
|
789
|
+
],
|
|
790
|
+
json={
|
|
791
|
+
"id": "new-entity-id",
|
|
792
|
+
"corpus": CORPUS_ID,
|
|
793
|
+
"name": "new-entity",
|
|
794
|
+
"color": "ffd1b3",
|
|
795
|
+
},
|
|
796
|
+
)
|
|
797
|
+
|
|
798
|
+
mock_elements_worker.check_required_entity_types(
|
|
799
|
+
entity_types=checked_types,
|
|
800
|
+
)
|
|
801
|
+
|
|
802
|
+
# Make sure the entity_types entry has been updated
|
|
803
|
+
assert mock_elements_worker.entity_types == {
|
|
804
|
+
"person": "person-entity-type-id",
|
|
805
|
+
"new-entity": "new-entity-id",
|
|
806
|
+
}
|
|
807
|
+
|
|
808
|
+
assert len(responses.calls) == len(BASE_API_CALLS) + 1
|
|
809
|
+
assert [
|
|
810
|
+
(call.request.method, call.request.url) for call in responses.calls
|
|
811
|
+
] == BASE_API_CALLS + [
|
|
812
|
+
(
|
|
813
|
+
"POST",
|
|
814
|
+
"http://testserver/api/v1/entity/types/",
|
|
815
|
+
),
|
|
816
|
+
]
|
|
817
|
+
|
|
818
|
+
|
|
819
|
+
def test_check_required_entity_types_no_creation_allowed(
|
|
820
|
+
responses, mock_elements_worker
|
|
821
|
+
):
|
|
822
|
+
# Set one entity type
|
|
823
|
+
mock_elements_worker.entity_types = {"person": "person-entity-type-id"}
|
|
824
|
+
|
|
825
|
+
checked_types = ["person", "new-entity"]
|
|
826
|
+
|
|
827
|
+
with pytest.raises(
|
|
828
|
+
MissingEntityType, match="Entity type `new-entity` was not in the corpus."
|
|
829
|
+
):
|
|
830
|
+
mock_elements_worker.check_required_entity_types(
|
|
831
|
+
entity_types=checked_types, create_missing=False
|
|
832
|
+
)
|
|
833
|
+
|
|
834
|
+
assert len(responses.calls) == len(BASE_API_CALLS)
|
|
835
|
+
assert [
|
|
836
|
+
(call.request.method, call.request.url) for call in responses.calls
|
|
837
|
+
] == BASE_API_CALLS
|
|
838
|
+
|
|
839
|
+
|
|
687
840
|
@pytest.mark.parametrize("transcription", [None, "not a transcription", 1])
|
|
688
841
|
def test_create_transcription_entities_wrong_transcription(
|
|
689
842
|
mock_elements_worker, transcription
|
|
@@ -837,7 +990,6 @@ def test_create_transcription_entities_wrong_entity(
|
|
|
837
990
|
|
|
838
991
|
def test_create_transcription_entities(responses, mock_elements_worker):
|
|
839
992
|
transcription = Transcription(id="transcription-id")
|
|
840
|
-
|
|
841
993
|
# Call to Transcription entities creation in bulk
|
|
842
994
|
responses.add(
|
|
843
995
|
responses.POST,
|
|
@@ -854,14 +1006,7 @@ def test_create_transcription_entities(responses, mock_elements_worker):
|
|
|
854
1006
|
"offset": 0,
|
|
855
1007
|
"length": 6,
|
|
856
1008
|
"confidence": 1.0,
|
|
857
|
-
}
|
|
858
|
-
{
|
|
859
|
-
"name": "Team Rocket",
|
|
860
|
-
"type_id": "22222222-2222-2222-2222-222222222222",
|
|
861
|
-
"offset": 7,
|
|
862
|
-
"length": 11,
|
|
863
|
-
"confidence": 1.0,
|
|
864
|
-
},
|
|
1009
|
+
}
|
|
865
1010
|
],
|
|
866
1011
|
}
|
|
867
1012
|
)
|
|
@@ -870,12 +1015,8 @@ def test_create_transcription_entities(responses, mock_elements_worker):
|
|
|
870
1015
|
"entities": [
|
|
871
1016
|
{
|
|
872
1017
|
"transcription_entity_id": "transc-entity-id",
|
|
873
|
-
"entity_id": "entity-
|
|
874
|
-
}
|
|
875
|
-
{
|
|
876
|
-
"transcription_entity_id": "transc-entity-id",
|
|
877
|
-
"entity_id": "entity-id2",
|
|
878
|
-
},
|
|
1018
|
+
"entity_id": "entity-id",
|
|
1019
|
+
}
|
|
879
1020
|
]
|
|
880
1021
|
},
|
|
881
1022
|
)
|
|
@@ -893,18 +1034,11 @@ def test_create_transcription_entities(responses, mock_elements_worker):
|
|
|
893
1034
|
"offset": 0,
|
|
894
1035
|
"length": 6,
|
|
895
1036
|
"confidence": 1.0,
|
|
896
|
-
}
|
|
897
|
-
{
|
|
898
|
-
"name": "Team Rocket",
|
|
899
|
-
"type_id": "22222222-2222-2222-2222-222222222222",
|
|
900
|
-
"offset": 7,
|
|
901
|
-
"length": 11,
|
|
902
|
-
"confidence": 1.0,
|
|
903
|
-
},
|
|
1037
|
+
}
|
|
904
1038
|
],
|
|
905
1039
|
)
|
|
906
1040
|
|
|
907
|
-
assert len(created_objects) ==
|
|
1041
|
+
assert len(created_objects) == 1
|
|
908
1042
|
|
|
909
1043
|
assert len(responses.calls) == len(BASE_API_CALLS) + 1
|
|
910
1044
|
assert [
|
|
@@ -913,5 +1047,5 @@ def test_create_transcription_entities(responses, mock_elements_worker):
|
|
|
913
1047
|
(
|
|
914
1048
|
"POST",
|
|
915
1049
|
"http://testserver/api/v1/transcription/transcription-id/entities/bulk/",
|
|
916
|
-
)
|
|
1050
|
+
),
|
|
917
1051
|
]
|
|
@@ -2,12 +2,11 @@ import json
|
|
|
2
2
|
import re
|
|
3
3
|
|
|
4
4
|
import pytest
|
|
5
|
+
from apistar.exceptions import ErrorResponse
|
|
5
6
|
|
|
6
|
-
from arkindex.exceptions import ErrorResponse
|
|
7
7
|
from arkindex.mock import MockApiClient
|
|
8
8
|
from arkindex_worker.cache import CachedElement
|
|
9
9
|
from arkindex_worker.models import Element
|
|
10
|
-
from arkindex_worker.utils import DEFAULT_BATCH_SIZE
|
|
11
10
|
from arkindex_worker.worker import MetaType
|
|
12
11
|
|
|
13
12
|
from . import BASE_API_CALLS
|
|
@@ -229,267 +228,143 @@ def test_create_metadata_cached_element(responses, mock_elements_worker_with_cac
|
|
|
229
228
|
assert metadata_id == "12345678-1234-1234-1234-123456789123"
|
|
230
229
|
|
|
231
230
|
|
|
232
|
-
@pytest.mark.parametrize(
|
|
233
|
-
|
|
231
|
+
@pytest.mark.parametrize(
|
|
232
|
+
"metadata_list",
|
|
233
|
+
[
|
|
234
|
+
[{"type": MetaType.Text, "name": "fake_name", "value": "fake_value"}],
|
|
235
|
+
[
|
|
236
|
+
{
|
|
237
|
+
"type": MetaType.Text,
|
|
238
|
+
"name": "fake_name",
|
|
239
|
+
"value": "fake_value",
|
|
240
|
+
"entity_id": "fake_entity_id",
|
|
241
|
+
}
|
|
242
|
+
],
|
|
243
|
+
],
|
|
244
|
+
)
|
|
245
|
+
def test_create_metadata_bulk(responses, mock_elements_worker, metadata_list):
|
|
234
246
|
element = Element({"id": "12341234-1234-1234-1234-123412341234"})
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
"
|
|
241
|
-
"
|
|
242
|
-
|
|
247
|
+
responses.add(
|
|
248
|
+
responses.POST,
|
|
249
|
+
"http://testserver/api/v1/element/12341234-1234-1234-1234-123412341234/metadata/bulk/",
|
|
250
|
+
status=201,
|
|
251
|
+
json={
|
|
252
|
+
"worker_run_id": "56785678-5678-5678-5678-567856785678",
|
|
253
|
+
"metadata_list": [
|
|
254
|
+
{
|
|
255
|
+
"id": "fake_metadata_id",
|
|
256
|
+
"type": metadata_list[0]["type"].value,
|
|
257
|
+
"name": metadata_list[0]["name"],
|
|
258
|
+
"value": metadata_list[0]["value"],
|
|
259
|
+
"dates": [],
|
|
260
|
+
"entity_id": metadata_list[0].get("entity_id"),
|
|
261
|
+
}
|
|
262
|
+
],
|
|
243
263
|
},
|
|
244
|
-
|
|
245
|
-
if batch_size > 1:
|
|
246
|
-
responses.add(
|
|
247
|
-
responses.POST,
|
|
248
|
-
"http://testserver/api/v1/element/12341234-1234-1234-1234-123412341234/metadata/bulk/",
|
|
249
|
-
status=201,
|
|
250
|
-
json={
|
|
251
|
-
"worker_run_id": "56785678-5678-5678-5678-567856785678",
|
|
252
|
-
"metadata_list": [
|
|
253
|
-
{
|
|
254
|
-
"id": "fake_metadata_id1",
|
|
255
|
-
"type": metadata_list[0]["type"].value,
|
|
256
|
-
"name": metadata_list[0]["name"],
|
|
257
|
-
"value": metadata_list[0]["value"],
|
|
258
|
-
"dates": [],
|
|
259
|
-
"entity_id": None,
|
|
260
|
-
},
|
|
261
|
-
{
|
|
262
|
-
"id": "fake_metadata_id2",
|
|
263
|
-
"type": metadata_list[1]["type"].value,
|
|
264
|
-
"name": metadata_list[1]["name"],
|
|
265
|
-
"value": metadata_list[1]["value"],
|
|
266
|
-
"dates": [],
|
|
267
|
-
"entity_id": metadata_list[1]["entity_id"],
|
|
268
|
-
},
|
|
269
|
-
],
|
|
270
|
-
},
|
|
271
|
-
)
|
|
272
|
-
else:
|
|
273
|
-
for idx, meta in enumerate(metadata_list, start=1):
|
|
274
|
-
responses.add(
|
|
275
|
-
responses.POST,
|
|
276
|
-
"http://testserver/api/v1/element/12341234-1234-1234-1234-123412341234/metadata/bulk/",
|
|
277
|
-
status=201,
|
|
278
|
-
json={
|
|
279
|
-
"worker_run_id": "56785678-5678-5678-5678-567856785678",
|
|
280
|
-
"metadata_list": [
|
|
281
|
-
{
|
|
282
|
-
"id": f"fake_metadata_id{idx}",
|
|
283
|
-
"type": meta["type"].value,
|
|
284
|
-
"name": meta["name"],
|
|
285
|
-
"value": meta["value"],
|
|
286
|
-
"dates": [],
|
|
287
|
-
"entity_id": meta.get("entity_id"),
|
|
288
|
-
}
|
|
289
|
-
],
|
|
290
|
-
},
|
|
291
|
-
)
|
|
264
|
+
)
|
|
292
265
|
|
|
293
266
|
created_metadata_list = mock_elements_worker.create_metadata_bulk(
|
|
294
|
-
element, metadata_list
|
|
267
|
+
element, metadata_list
|
|
295
268
|
)
|
|
296
269
|
|
|
297
|
-
|
|
270
|
+
assert len(responses.calls) == len(BASE_API_CALLS) + 1
|
|
271
|
+
assert [
|
|
272
|
+
(call.request.method, call.request.url) for call in responses.calls
|
|
273
|
+
] == BASE_API_CALLS + [
|
|
298
274
|
(
|
|
299
275
|
"POST",
|
|
300
276
|
"http://testserver/api/v1/element/12341234-1234-1234-1234-123412341234/metadata/bulk/",
|
|
301
|
-
)
|
|
277
|
+
),
|
|
302
278
|
]
|
|
303
|
-
|
|
304
|
-
bulk_api_calls.append(
|
|
305
|
-
(
|
|
306
|
-
"POST",
|
|
307
|
-
"http://testserver/api/v1/element/12341234-1234-1234-1234-123412341234/metadata/bulk/",
|
|
308
|
-
)
|
|
309
|
-
)
|
|
310
|
-
|
|
311
|
-
assert len(responses.calls) == len(BASE_API_CALLS) + len(bulk_api_calls)
|
|
312
|
-
assert [
|
|
313
|
-
(call.request.method, call.request.url) for call in responses.calls
|
|
314
|
-
] == BASE_API_CALLS + bulk_api_calls
|
|
315
|
-
|
|
316
|
-
first_meta = {
|
|
317
|
-
**metadata_list[0],
|
|
318
|
-
"type": metadata_list[0]["type"].value,
|
|
319
|
-
"entity_id": None,
|
|
320
|
-
}
|
|
321
|
-
second_meta = {**metadata_list[1], "type": metadata_list[1]["type"].value}
|
|
322
|
-
empty_payload = {
|
|
323
|
-
"worker_run_id": "56785678-5678-5678-5678-567856785678",
|
|
324
|
-
"metadata_list": [],
|
|
325
|
-
}
|
|
326
|
-
|
|
327
|
-
bodies = []
|
|
328
|
-
first_call_idx = None
|
|
329
|
-
if batch_size > 1:
|
|
330
|
-
first_call_idx = -1
|
|
331
|
-
bodies.append({**empty_payload, "metadata_list": [first_meta, second_meta]})
|
|
332
|
-
else:
|
|
333
|
-
first_call_idx = -2
|
|
334
|
-
bodies.append({**empty_payload, "metadata_list": [first_meta]})
|
|
335
|
-
bodies.append({**empty_payload, "metadata_list": [second_meta]})
|
|
336
|
-
|
|
337
|
-
assert [
|
|
338
|
-
json.loads(bulk_call.request.body)
|
|
339
|
-
for bulk_call in responses.calls[first_call_idx:]
|
|
340
|
-
] == bodies
|
|
341
|
-
|
|
342
|
-
assert created_metadata_list == [
|
|
279
|
+
assert json.loads(responses.calls[-1].request.body)["metadata_list"] == [
|
|
343
280
|
{
|
|
344
|
-
"id": "fake_metadata_id1",
|
|
345
281
|
"type": metadata_list[0]["type"].value,
|
|
346
282
|
"name": metadata_list[0]["name"],
|
|
347
283
|
"value": metadata_list[0]["value"],
|
|
348
|
-
"
|
|
349
|
-
|
|
350
|
-
|
|
284
|
+
"entity_id": metadata_list[0].get("entity_id"),
|
|
285
|
+
}
|
|
286
|
+
]
|
|
287
|
+
assert created_metadata_list == [
|
|
351
288
|
{
|
|
352
|
-
"id": "
|
|
353
|
-
"type": metadata_list[
|
|
354
|
-
"name": metadata_list[
|
|
355
|
-
"value": metadata_list[
|
|
289
|
+
"id": "fake_metadata_id",
|
|
290
|
+
"type": metadata_list[0]["type"].value,
|
|
291
|
+
"name": metadata_list[0]["name"],
|
|
292
|
+
"value": metadata_list[0]["value"],
|
|
356
293
|
"dates": [],
|
|
357
|
-
"entity_id": metadata_list[
|
|
358
|
-
}
|
|
294
|
+
"entity_id": metadata_list[0].get("entity_id"),
|
|
295
|
+
}
|
|
359
296
|
]
|
|
360
297
|
|
|
361
298
|
|
|
362
|
-
@pytest.mark.parametrize(
|
|
299
|
+
@pytest.mark.parametrize(
|
|
300
|
+
"metadata_list",
|
|
301
|
+
[
|
|
302
|
+
[{"type": MetaType.Text, "name": "fake_name", "value": "fake_value"}],
|
|
303
|
+
[
|
|
304
|
+
{
|
|
305
|
+
"type": MetaType.Text,
|
|
306
|
+
"name": "fake_name",
|
|
307
|
+
"value": "fake_value",
|
|
308
|
+
"entity_id": "fake_entity_id",
|
|
309
|
+
}
|
|
310
|
+
],
|
|
311
|
+
],
|
|
312
|
+
)
|
|
363
313
|
def test_create_metadata_bulk_cached_element(
|
|
364
|
-
|
|
314
|
+
responses, mock_elements_worker_with_cache, metadata_list
|
|
365
315
|
):
|
|
366
316
|
element = CachedElement.create(
|
|
367
317
|
id="12341234-1234-1234-1234-123412341234", type="thing"
|
|
368
318
|
)
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
"
|
|
375
|
-
"
|
|
376
|
-
|
|
319
|
+
responses.add(
|
|
320
|
+
responses.POST,
|
|
321
|
+
"http://testserver/api/v1/element/12341234-1234-1234-1234-123412341234/metadata/bulk/",
|
|
322
|
+
status=201,
|
|
323
|
+
json={
|
|
324
|
+
"worker_run_id": "56785678-5678-5678-5678-567856785678",
|
|
325
|
+
"metadata_list": [
|
|
326
|
+
{
|
|
327
|
+
"id": "fake_metadata_id",
|
|
328
|
+
"type": metadata_list[0]["type"].value,
|
|
329
|
+
"name": metadata_list[0]["name"],
|
|
330
|
+
"value": metadata_list[0]["value"],
|
|
331
|
+
"dates": [],
|
|
332
|
+
"entity_id": metadata_list[0].get("entity_id"),
|
|
333
|
+
}
|
|
334
|
+
],
|
|
377
335
|
},
|
|
378
|
-
|
|
379
|
-
if batch_size > 1:
|
|
380
|
-
responses.add(
|
|
381
|
-
responses.POST,
|
|
382
|
-
"http://testserver/api/v1/element/12341234-1234-1234-1234-123412341234/metadata/bulk/",
|
|
383
|
-
status=201,
|
|
384
|
-
json={
|
|
385
|
-
"worker_run_id": "56785678-5678-5678-5678-567856785678",
|
|
386
|
-
"metadata_list": [
|
|
387
|
-
{
|
|
388
|
-
"id": "fake_metadata_id1",
|
|
389
|
-
"type": metadata_list[0]["type"].value,
|
|
390
|
-
"name": metadata_list[0]["name"],
|
|
391
|
-
"value": metadata_list[0]["value"],
|
|
392
|
-
"dates": [],
|
|
393
|
-
"entity_id": None,
|
|
394
|
-
},
|
|
395
|
-
{
|
|
396
|
-
"id": "fake_metadata_id2",
|
|
397
|
-
"type": metadata_list[1]["type"].value,
|
|
398
|
-
"name": metadata_list[1]["name"],
|
|
399
|
-
"value": metadata_list[1]["value"],
|
|
400
|
-
"dates": [],
|
|
401
|
-
"entity_id": metadata_list[1]["entity_id"],
|
|
402
|
-
},
|
|
403
|
-
],
|
|
404
|
-
},
|
|
405
|
-
)
|
|
406
|
-
else:
|
|
407
|
-
for idx, meta in enumerate(metadata_list, start=1):
|
|
408
|
-
responses.add(
|
|
409
|
-
responses.POST,
|
|
410
|
-
"http://testserver/api/v1/element/12341234-1234-1234-1234-123412341234/metadata/bulk/",
|
|
411
|
-
status=201,
|
|
412
|
-
json={
|
|
413
|
-
"worker_run_id": "56785678-5678-5678-5678-567856785678",
|
|
414
|
-
"metadata_list": [
|
|
415
|
-
{
|
|
416
|
-
"id": f"fake_metadata_id{idx}",
|
|
417
|
-
"type": meta["type"].value,
|
|
418
|
-
"name": meta["name"],
|
|
419
|
-
"value": meta["value"],
|
|
420
|
-
"dates": [],
|
|
421
|
-
"entity_id": meta.get("entity_id"),
|
|
422
|
-
}
|
|
423
|
-
],
|
|
424
|
-
},
|
|
425
|
-
)
|
|
336
|
+
)
|
|
426
337
|
|
|
427
338
|
created_metadata_list = mock_elements_worker_with_cache.create_metadata_bulk(
|
|
428
|
-
element, metadata_list
|
|
339
|
+
element, metadata_list
|
|
429
340
|
)
|
|
430
341
|
|
|
431
|
-
|
|
342
|
+
assert len(responses.calls) == len(BASE_API_CALLS) + 1
|
|
343
|
+
assert [
|
|
344
|
+
(call.request.method, call.request.url) for call in responses.calls
|
|
345
|
+
] == BASE_API_CALLS + [
|
|
432
346
|
(
|
|
433
347
|
"POST",
|
|
434
348
|
"http://testserver/api/v1/element/12341234-1234-1234-1234-123412341234/metadata/bulk/",
|
|
435
|
-
)
|
|
349
|
+
),
|
|
436
350
|
]
|
|
437
|
-
|
|
438
|
-
bulk_api_calls.append(
|
|
439
|
-
(
|
|
440
|
-
"POST",
|
|
441
|
-
"http://testserver/api/v1/element/12341234-1234-1234-1234-123412341234/metadata/bulk/",
|
|
442
|
-
)
|
|
443
|
-
)
|
|
444
|
-
|
|
445
|
-
assert len(responses.calls) == len(BASE_API_CALLS) + len(bulk_api_calls)
|
|
446
|
-
assert [
|
|
447
|
-
(call.request.method, call.request.url) for call in responses.calls
|
|
448
|
-
] == BASE_API_CALLS + bulk_api_calls
|
|
449
|
-
|
|
450
|
-
first_meta = {
|
|
451
|
-
**metadata_list[0],
|
|
452
|
-
"type": metadata_list[0]["type"].value,
|
|
453
|
-
"entity_id": None,
|
|
454
|
-
}
|
|
455
|
-
second_meta = {**metadata_list[1], "type": metadata_list[1]["type"].value}
|
|
456
|
-
empty_payload = {
|
|
457
|
-
"worker_run_id": "56785678-5678-5678-5678-567856785678",
|
|
458
|
-
"metadata_list": [],
|
|
459
|
-
}
|
|
460
|
-
|
|
461
|
-
bodies = []
|
|
462
|
-
first_call_idx = None
|
|
463
|
-
if batch_size > 1:
|
|
464
|
-
first_call_idx = -1
|
|
465
|
-
bodies.append({**empty_payload, "metadata_list": [first_meta, second_meta]})
|
|
466
|
-
else:
|
|
467
|
-
first_call_idx = -2
|
|
468
|
-
bodies.append({**empty_payload, "metadata_list": [first_meta]})
|
|
469
|
-
bodies.append({**empty_payload, "metadata_list": [second_meta]})
|
|
470
|
-
|
|
471
|
-
assert [
|
|
472
|
-
json.loads(bulk_call.request.body)
|
|
473
|
-
for bulk_call in responses.calls[first_call_idx:]
|
|
474
|
-
] == bodies
|
|
475
|
-
|
|
476
|
-
assert created_metadata_list == [
|
|
351
|
+
assert json.loads(responses.calls[-1].request.body)["metadata_list"] == [
|
|
477
352
|
{
|
|
478
|
-
"id": "fake_metadata_id1",
|
|
479
353
|
"type": metadata_list[0]["type"].value,
|
|
480
354
|
"name": metadata_list[0]["name"],
|
|
481
355
|
"value": metadata_list[0]["value"],
|
|
482
|
-
"
|
|
483
|
-
|
|
484
|
-
|
|
356
|
+
"entity_id": metadata_list[0].get("entity_id"),
|
|
357
|
+
}
|
|
358
|
+
]
|
|
359
|
+
assert created_metadata_list == [
|
|
485
360
|
{
|
|
486
|
-
"id": "
|
|
487
|
-
"type": metadata_list[
|
|
488
|
-
"name": metadata_list[
|
|
489
|
-
"value": metadata_list[
|
|
361
|
+
"id": "fake_metadata_id",
|
|
362
|
+
"type": metadata_list[0]["type"].value,
|
|
363
|
+
"name": metadata_list[0]["name"],
|
|
364
|
+
"value": metadata_list[0]["value"],
|
|
490
365
|
"dates": [],
|
|
491
|
-
"entity_id": metadata_list[
|
|
492
|
-
}
|
|
366
|
+
"entity_id": metadata_list[0].get("entity_id"),
|
|
367
|
+
}
|
|
493
368
|
]
|
|
494
369
|
|
|
495
370
|
|
|
@@ -8,7 +8,7 @@ from arkindex_worker.worker import BaseWorker
|
|
|
8
8
|
from arkindex_worker.worker.training import TrainingMixin, create_archive
|
|
9
9
|
|
|
10
10
|
|
|
11
|
-
@pytest.fixture
|
|
11
|
+
@pytest.fixture()
|
|
12
12
|
def mock_training_worker(monkeypatch):
|
|
13
13
|
class TrainingWorker(BaseWorker, TrainingMixin):
|
|
14
14
|
"""
|
|
@@ -22,7 +22,7 @@ def mock_training_worker(monkeypatch):
|
|
|
22
22
|
return training_worker
|
|
23
23
|
|
|
24
24
|
|
|
25
|
-
@pytest.fixture
|
|
25
|
+
@pytest.fixture()
|
|
26
26
|
def default_model_version():
|
|
27
27
|
return {
|
|
28
28
|
"id": "model_version_id",
|