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.
Files changed (51) hide show
  1. {arkindex_base_worker-0.4.0.dist-info → arkindex_base_worker-0.4.0a2.dist-info}/METADATA +13 -15
  2. arkindex_base_worker-0.4.0a2.dist-info/RECORD +51 -0
  3. {arkindex_base_worker-0.4.0.dist-info → arkindex_base_worker-0.4.0a2.dist-info}/WHEEL +1 -1
  4. arkindex_worker/cache.py +1 -1
  5. arkindex_worker/image.py +1 -120
  6. arkindex_worker/utils.py +0 -82
  7. arkindex_worker/worker/__init__.py +161 -46
  8. arkindex_worker/worker/base.py +11 -36
  9. arkindex_worker/worker/classification.py +18 -34
  10. arkindex_worker/worker/corpus.py +4 -21
  11. arkindex_worker/worker/dataset.py +1 -71
  12. arkindex_worker/worker/element.py +91 -352
  13. arkindex_worker/worker/entity.py +11 -11
  14. arkindex_worker/worker/metadata.py +9 -19
  15. arkindex_worker/worker/task.py +4 -5
  16. arkindex_worker/worker/training.py +6 -6
  17. arkindex_worker/worker/transcription.py +68 -89
  18. arkindex_worker/worker/version.py +1 -3
  19. tests/__init__.py +1 -1
  20. tests/conftest.py +45 -33
  21. tests/test_base_worker.py +3 -204
  22. tests/test_dataset_worker.py +4 -7
  23. tests/test_elements_worker/{test_classification.py → test_classifications.py} +61 -194
  24. tests/test_elements_worker/test_corpus.py +1 -32
  25. tests/test_elements_worker/test_dataset.py +1 -1
  26. tests/test_elements_worker/test_elements.py +2734 -0
  27. tests/test_elements_worker/{test_entity_create.py → test_entities.py} +160 -26
  28. tests/test_elements_worker/test_image.py +1 -2
  29. tests/test_elements_worker/test_metadata.py +99 -224
  30. tests/test_elements_worker/test_task.py +1 -1
  31. tests/test_elements_worker/test_training.py +2 -2
  32. tests/test_elements_worker/test_transcriptions.py +2102 -0
  33. tests/test_elements_worker/test_worker.py +280 -563
  34. tests/test_image.py +204 -429
  35. tests/test_merge.py +2 -1
  36. tests/test_utils.py +3 -66
  37. arkindex_base_worker-0.4.0.dist-info/RECORD +0 -61
  38. arkindex_worker/worker/process.py +0 -92
  39. tests/test_elements_worker/test_element.py +0 -427
  40. tests/test_elements_worker/test_element_create_multiple.py +0 -715
  41. tests/test_elements_worker/test_element_create_single.py +0 -528
  42. tests/test_elements_worker/test_element_list_children.py +0 -969
  43. tests/test_elements_worker/test_element_list_parents.py +0 -530
  44. tests/test_elements_worker/test_entity_list_and_check.py +0 -160
  45. tests/test_elements_worker/test_process.py +0 -89
  46. tests/test_elements_worker/test_transcription_create.py +0 -873
  47. tests/test_elements_worker/test_transcription_create_with_elements.py +0 -951
  48. tests/test_elements_worker/test_transcription_list.py +0 -450
  49. tests/test_elements_worker/test_version.py +0 -60
  50. {arkindex_base_worker-0.4.0.dist-info → arkindex_base_worker-0.4.0a2.dist-info}/LICENSE +0 -0
  51. {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-id1",
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) == 2
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
  ]
@@ -1,8 +1,7 @@
1
1
  import json
2
2
 
3
3
  import pytest
4
-
5
- from arkindex.exceptions import ErrorResponse
4
+ from apistar.exceptions import ErrorResponse
6
5
 
7
6
  from . import BASE_API_CALLS
8
7
 
@@ -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("batch_size", [DEFAULT_BATCH_SIZE, 1])
233
- def test_create_metadata_bulk(batch_size, responses, mock_elements_worker):
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
- metadata_list = [
237
- {"type": MetaType.Text, "name": "fake_name", "value": "fake_value"},
238
- {
239
- "type": MetaType.Text,
240
- "name": "Year",
241
- "value": "2024",
242
- "entity_id": "entity_id",
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, batch_size=batch_size
267
+ element, metadata_list
295
268
  )
296
269
 
297
- bulk_api_calls = [
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
- if batch_size != DEFAULT_BATCH_SIZE:
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
- "dates": [],
349
- "entity_id": None,
350
- },
284
+ "entity_id": metadata_list[0].get("entity_id"),
285
+ }
286
+ ]
287
+ assert created_metadata_list == [
351
288
  {
352
- "id": "fake_metadata_id2",
353
- "type": metadata_list[1]["type"].value,
354
- "name": metadata_list[1]["name"],
355
- "value": metadata_list[1]["value"],
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[1]["entity_id"],
358
- },
294
+ "entity_id": metadata_list[0].get("entity_id"),
295
+ }
359
296
  ]
360
297
 
361
298
 
362
- @pytest.mark.parametrize("batch_size", [DEFAULT_BATCH_SIZE, 1])
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
- batch_size, responses, mock_elements_worker_with_cache
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
- metadata_list = [
371
- {"type": MetaType.Text, "name": "fake_name", "value": "fake_value"},
372
- {
373
- "type": MetaType.Text,
374
- "name": "Year",
375
- "value": "2024",
376
- "entity_id": "entity_id",
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, batch_size=batch_size
339
+ element, metadata_list
429
340
  )
430
341
 
431
- bulk_api_calls = [
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
- if batch_size != DEFAULT_BATCH_SIZE:
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
- "dates": [],
483
- "entity_id": None,
484
- },
356
+ "entity_id": metadata_list[0].get("entity_id"),
357
+ }
358
+ ]
359
+ assert created_metadata_list == [
485
360
  {
486
- "id": "fake_metadata_id2",
487
- "type": metadata_list[1]["type"].value,
488
- "name": metadata_list[1]["name"],
489
- "value": metadata_list[1]["value"],
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[1]["entity_id"],
492
- },
366
+ "entity_id": metadata_list[0].get("entity_id"),
367
+ }
493
368
  ]
494
369
 
495
370
 
@@ -1,8 +1,8 @@
1
1
  import uuid
2
2
 
3
3
  import pytest
4
+ from apistar.exceptions import ErrorResponse
4
5
 
5
- from arkindex.exceptions import ErrorResponse
6
6
  from arkindex_worker.models import Artifact
7
7
  from tests import FIXTURES_DIR
8
8
  from tests.test_elements_worker import BASE_API_CALLS
@@ -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",