arkindex-base-worker 0.3.5rc6__py3-none-any.whl → 0.3.6rc2__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 (43) hide show
  1. arkindex_base_worker-0.3.6rc2.dist-info/METADATA +39 -0
  2. arkindex_base_worker-0.3.6rc2.dist-info/RECORD +40 -0
  3. arkindex_worker/__init__.py +0 -1
  4. arkindex_worker/cache.py +19 -25
  5. arkindex_worker/image.py +16 -17
  6. arkindex_worker/models.py +24 -21
  7. arkindex_worker/utils.py +18 -19
  8. arkindex_worker/worker/__init__.py +17 -27
  9. arkindex_worker/worker/base.py +12 -7
  10. arkindex_worker/worker/classification.py +13 -15
  11. arkindex_worker/worker/dataset.py +3 -4
  12. arkindex_worker/worker/element.py +80 -76
  13. arkindex_worker/worker/entity.py +28 -30
  14. arkindex_worker/worker/metadata.py +21 -27
  15. arkindex_worker/worker/task.py +2 -3
  16. arkindex_worker/worker/training.py +25 -26
  17. arkindex_worker/worker/transcription.py +37 -34
  18. arkindex_worker/worker/version.py +1 -2
  19. tests/conftest.py +56 -76
  20. tests/test_base_worker.py +38 -32
  21. tests/test_cache.py +14 -7
  22. tests/test_dataset_worker.py +25 -22
  23. tests/test_element.py +0 -1
  24. tests/test_elements_worker/__init__.py +0 -1
  25. tests/test_elements_worker/test_classifications.py +0 -1
  26. tests/test_elements_worker/test_cli.py +22 -17
  27. tests/test_elements_worker/test_dataset.py +9 -10
  28. tests/test_elements_worker/test_elements.py +58 -63
  29. tests/test_elements_worker/test_entities.py +10 -20
  30. tests/test_elements_worker/test_metadata.py +72 -96
  31. tests/test_elements_worker/test_task.py +22 -20
  32. tests/test_elements_worker/test_training.py +20 -13
  33. tests/test_elements_worker/test_transcriptions.py +6 -10
  34. tests/test_elements_worker/test_worker.py +16 -14
  35. tests/test_image.py +21 -20
  36. tests/test_merge.py +5 -6
  37. tests/test_utils.py +0 -1
  38. arkindex_base_worker-0.3.5rc6.dist-info/METADATA +0 -27
  39. arkindex_base_worker-0.3.5rc6.dist-info/RECORD +0 -42
  40. arkindex_worker/git.py +0 -392
  41. tests/test_git.py +0 -480
  42. {arkindex_base_worker-0.3.5rc6.dist-info → arkindex_base_worker-0.3.6rc2.dist-info}/WHEEL +0 -0
  43. {arkindex_base_worker-0.3.5rc6.dist-info → arkindex_base_worker-0.3.6rc2.dist-info}/top_level.txt +0 -0
@@ -44,7 +44,7 @@ def test_download_dataset_artifact_download_api_error(
44
44
  expected_results = [
45
45
  {
46
46
  "id": "artifact_1",
47
- "path": "dataset_id.zstd",
47
+ "path": "dataset_id.tar.zst",
48
48
  "size": 42,
49
49
  "content_type": "application/zstd",
50
50
  "s3_put_url": None,
@@ -69,7 +69,7 @@ def test_download_dataset_artifact_download_api_error(
69
69
  )
70
70
  responses.add(
71
71
  responses.GET,
72
- f"http://testserver/api/v1/task/{task_id}/artifact/dataset_id.zstd",
72
+ f"http://testserver/api/v1/task/{task_id}/artifact/dataset_id.tar.zst",
73
73
  status=500,
74
74
  )
75
75
 
@@ -82,11 +82,11 @@ def test_download_dataset_artifact_download_api_error(
82
82
  ] == BASE_API_CALLS + [
83
83
  ("GET", f"http://testserver/api/v1/task/{task_id}/artifacts/"),
84
84
  # The API call is retried 5 times
85
- ("GET", f"http://testserver/api/v1/task/{task_id}/artifact/dataset_id.zstd"),
86
- ("GET", f"http://testserver/api/v1/task/{task_id}/artifact/dataset_id.zstd"),
87
- ("GET", f"http://testserver/api/v1/task/{task_id}/artifact/dataset_id.zstd"),
88
- ("GET", f"http://testserver/api/v1/task/{task_id}/artifact/dataset_id.zstd"),
89
- ("GET", f"http://testserver/api/v1/task/{task_id}/artifact/dataset_id.zstd"),
85
+ ("GET", f"http://testserver/api/v1/task/{task_id}/artifact/dataset_id.tar.zst"),
86
+ ("GET", f"http://testserver/api/v1/task/{task_id}/artifact/dataset_id.tar.zst"),
87
+ ("GET", f"http://testserver/api/v1/task/{task_id}/artifact/dataset_id.tar.zst"),
88
+ ("GET", f"http://testserver/api/v1/task/{task_id}/artifact/dataset_id.tar.zst"),
89
+ ("GET", f"http://testserver/api/v1/task/{task_id}/artifact/dataset_id.tar.zst"),
90
90
  ]
91
91
 
92
92
 
@@ -132,7 +132,10 @@ def test_download_dataset_artifact(
132
132
  ):
133
133
  task_id = default_dataset.task_id
134
134
  archive_path = (
135
- FIXTURES_DIR / "extract_parent_archives" / "first_parent" / "arkindex_data.zstd"
135
+ FIXTURES_DIR
136
+ / "extract_parent_archives"
137
+ / "first_parent"
138
+ / "arkindex_data.tar.zst"
136
139
  )
137
140
  mocker.patch(
138
141
  "arkindex_worker.worker.base.BaseWorker.find_extras_directory",
@@ -142,7 +145,7 @@ def test_download_dataset_artifact(
142
145
  expected_results = [
143
146
  {
144
147
  "id": "artifact_1",
145
- "path": "dataset_id.zstd",
148
+ "path": "dataset_id.tar.zst",
146
149
  "size": 42,
147
150
  "content_type": "application/zstd",
148
151
  "s3_put_url": None,
@@ -167,14 +170,14 @@ def test_download_dataset_artifact(
167
170
  )
168
171
  responses.add(
169
172
  responses.GET,
170
- f"http://testserver/api/v1/task/{task_id}/artifact/dataset_id.zstd",
173
+ f"http://testserver/api/v1/task/{task_id}/artifact/dataset_id.tar.zst",
171
174
  status=200,
172
175
  body=archive_path.read_bytes(),
173
176
  content_type="application/zstd",
174
177
  )
175
178
 
176
179
  archive = mock_dataset_worker.download_dataset_artifact(default_dataset)
177
- assert archive == tmp_path / "dataset_id.zstd"
180
+ assert archive == tmp_path / "dataset_id.tar.zst"
178
181
  assert archive.read_bytes() == archive_path.read_bytes()
179
182
  archive.unlink()
180
183
 
@@ -183,7 +186,7 @@ def test_download_dataset_artifact(
183
186
  (call.request.method, call.request.url) for call in responses.calls
184
187
  ] == BASE_API_CALLS + [
185
188
  ("GET", f"http://testserver/api/v1/task/{task_id}/artifacts/"),
186
- ("GET", f"http://testserver/api/v1/task/{task_id}/artifact/dataset_id.zstd"),
189
+ ("GET", f"http://testserver/api/v1/task/{task_id}/artifact/dataset_id.tar.zst"),
187
190
  ]
188
191
 
189
192
 
@@ -410,7 +413,7 @@ def test_list_datasets(responses, mock_dataset_worker):
410
413
  ]
411
414
 
412
415
 
413
- @pytest.mark.parametrize("generator", (True, False))
416
+ @pytest.mark.parametrize("generator", [True, False])
414
417
  def test_run_no_datasets(mocker, caplog, mock_dataset_worker, generator):
415
418
  mocker.patch("arkindex_worker.worker.DatasetWorker.list_datasets", return_value=[])
416
419
  mock_dataset_worker.generator = generator
@@ -425,7 +428,7 @@ def test_run_no_datasets(mocker, caplog, mock_dataset_worker, generator):
425
428
 
426
429
 
427
430
  @pytest.mark.parametrize(
428
- "generator, error",
431
+ ("generator", "error"),
429
432
  [
430
433
  (True, "When generating a new dataset, its state should be Open."),
431
434
  (False, "When processing an existing dataset, its state should be Complete."),
@@ -654,7 +657,7 @@ def test_run_no_downloaded_artifact_error(
654
657
 
655
658
 
656
659
  @pytest.mark.parametrize(
657
- "generator, state", [(True, DatasetState.Open), (False, DatasetState.Complete)]
660
+ ("generator", "state"), [(True, DatasetState.Open), (False, DatasetState.Complete)]
658
661
  )
659
662
  def test_run(
660
663
  mocker,
@@ -701,7 +704,7 @@ def test_run(
701
704
  FIXTURES_DIR
702
705
  / "extract_parent_archives"
703
706
  / "first_parent"
704
- / "arkindex_data.zstd"
707
+ / "arkindex_data.tar.zst"
705
708
  )
706
709
  responses.add(
707
710
  responses.GET,
@@ -711,7 +714,7 @@ def test_run(
711
714
  )
712
715
  responses.add(
713
716
  responses.GET,
714
- f"http://testserver/api/v1/task/{default_dataset.task_id}/artifact/dataset_id.zstd",
717
+ f"http://testserver/api/v1/task/{default_dataset.task_id}/artifact/dataset_id.tar.zst",
715
718
  status=200,
716
719
  body=archive_path.read_bytes(),
717
720
  content_type="application/zstd",
@@ -723,7 +726,7 @@ def test_run(
723
726
  ),
724
727
  (
725
728
  "GET",
726
- f"http://testserver/api/v1/task/{default_dataset.task_id}/artifact/dataset_id.zstd",
729
+ f"http://testserver/api/v1/task/{default_dataset.task_id}/artifact/dataset_id.tar.zst",
727
730
  ),
728
731
  ]
729
732
  extra_logs += [
@@ -746,7 +749,7 @@ def test_run(
746
749
 
747
750
 
748
751
  @pytest.mark.parametrize(
749
- "generator, state", [(True, DatasetState.Open), (False, DatasetState.Complete)]
752
+ ("generator", "state"), [(True, DatasetState.Open), (False, DatasetState.Complete)]
750
753
  )
751
754
  def test_run_read_only(
752
755
  mocker,
@@ -799,7 +802,7 @@ def test_run_read_only(
799
802
  FIXTURES_DIR
800
803
  / "extract_parent_archives"
801
804
  / "first_parent"
802
- / "arkindex_data.zstd"
805
+ / "arkindex_data.tar.zst"
803
806
  )
804
807
  responses.add(
805
808
  responses.GET,
@@ -809,7 +812,7 @@ def test_run_read_only(
809
812
  )
810
813
  responses.add(
811
814
  responses.GET,
812
- f"http://testserver/api/v1/task/{default_dataset.task_id}/artifact/dataset_id.zstd",
815
+ f"http://testserver/api/v1/task/{default_dataset.task_id}/artifact/dataset_id.tar.zst",
813
816
  status=200,
814
817
  body=archive_path.read_bytes(),
815
818
  content_type="application/zstd",
@@ -821,7 +824,7 @@ def test_run_read_only(
821
824
  ),
822
825
  (
823
826
  "GET",
824
- f"http://testserver/api/v1/task/{default_dataset.task_id}/artifact/dataset_id.zstd",
827
+ f"http://testserver/api/v1/task/{default_dataset.task_id}/artifact/dataset_id.tar.zst",
825
828
  ),
826
829
  ]
827
830
  extra_logs += [
tests/test_element.py CHANGED
@@ -1,4 +1,3 @@
1
- # -*- coding: utf-8 -*-
2
1
  import pytest
3
2
  from requests import HTTPError
4
3
 
@@ -1,4 +1,3 @@
1
- # -*- coding: utf-8 -*-
2
1
  # API calls during worker configuration
3
2
  BASE_API_CALLS = [
4
3
  (
@@ -1,4 +1,3 @@
1
- # -*- coding: utf-8 -*-
2
1
  import json
3
2
  import re
4
3
  from uuid import UUID, uuid4
@@ -1,8 +1,7 @@
1
- # -*- coding: utf-8 -*-
2
1
  import json
3
- import os
4
2
  import sys
5
3
  import tempfile
4
+ from pathlib import Path
6
5
  from uuid import UUID
7
6
 
8
7
  import pytest
@@ -10,49 +9,53 @@ import pytest
10
9
  from arkindex_worker.worker import ElementsWorker
11
10
 
12
11
 
13
- def test_cli_default(monkeypatch, mock_worker_run_api):
12
+ @pytest.mark.usefixtures("_mock_worker_run_api")
13
+ def test_cli_default(monkeypatch):
14
14
  _, path = tempfile.mkstemp()
15
- with open(path, "w") as f:
16
- json.dump(
15
+ path = Path(path)
16
+ path.write_text(
17
+ json.dumps(
17
18
  [
18
19
  {"id": "volumeid", "type": "volume"},
19
20
  {"id": "pageid", "type": "page"},
20
21
  {"id": "actid", "type": "act"},
21
22
  {"id": "surfaceid", "type": "surface"},
22
23
  ],
23
- f,
24
24
  )
25
+ )
25
26
 
26
27
  monkeypatch.setenv("TASK_ELEMENTS", path)
27
28
  monkeypatch.setattr(sys, "argv", ["worker"])
28
29
  worker = ElementsWorker()
29
30
  worker.configure()
30
31
 
31
- assert worker.args.elements_list.name == path
32
+ assert worker.args.elements_list.name == str(path)
32
33
  assert not worker.args.element
33
- os.unlink(path)
34
+ path.unlink()
34
35
 
35
36
 
36
- def test_cli_arg_elements_list_given(mocker, mock_worker_run_api):
37
+ @pytest.mark.usefixtures("_mock_worker_run_api")
38
+ def test_cli_arg_elements_list_given(mocker):
37
39
  _, path = tempfile.mkstemp()
38
- with open(path, "w") as f:
39
- json.dump(
40
+ path = Path(path)
41
+ path.write_text(
42
+ json.dumps(
40
43
  [
41
44
  {"id": "volumeid", "type": "volume"},
42
45
  {"id": "pageid", "type": "page"},
43
46
  {"id": "actid", "type": "act"},
44
47
  {"id": "surfaceid", "type": "surface"},
45
48
  ],
46
- f,
47
49
  )
50
+ )
48
51
 
49
- mocker.patch.object(sys, "argv", ["worker", "--elements-list", path])
52
+ mocker.patch.object(sys, "argv", ["worker", "--elements-list", str(path)])
50
53
  worker = ElementsWorker()
51
54
  worker.configure()
52
55
 
53
- assert worker.args.elements_list.name == path
56
+ assert worker.args.elements_list.name == str(path)
54
57
  assert not worker.args.element
55
- os.unlink(path)
58
+ path.unlink()
56
59
 
57
60
 
58
61
  def test_cli_arg_element_one_given_not_uuid(mocker):
@@ -62,7 +65,8 @@ def test_cli_arg_element_one_given_not_uuid(mocker):
62
65
  worker.configure()
63
66
 
64
67
 
65
- def test_cli_arg_element_one_given(mocker, mock_worker_run_api):
68
+ @pytest.mark.usefixtures("_mock_worker_run_api")
69
+ def test_cli_arg_element_one_given(mocker):
66
70
  mocker.patch.object(
67
71
  sys, "argv", ["worker", "--element", "12341234-1234-1234-1234-123412341234"]
68
72
  )
@@ -74,7 +78,8 @@ def test_cli_arg_element_one_given(mocker, mock_worker_run_api):
74
78
  assert not worker.args.elements_list
75
79
 
76
80
 
77
- def test_cli_arg_element_many_given(mocker, mock_worker_run_api):
81
+ @pytest.mark.usefixtures("_mock_worker_run_api")
82
+ def test_cli_arg_element_many_given(mocker):
78
83
  mocker.patch.object(
79
84
  sys,
80
85
  "argv",
@@ -1,4 +1,3 @@
1
- # -*- coding: utf-8 -*-
2
1
  import json
3
2
  import logging
4
3
 
@@ -107,8 +106,8 @@ def test_list_process_datasets(
107
106
 
108
107
 
109
108
  @pytest.mark.parametrize(
110
- "payload, error",
111
- (
109
+ ("payload", "error"),
110
+ [
112
111
  # Dataset
113
112
  (
114
113
  {"dataset": None},
@@ -118,7 +117,7 @@ def test_list_process_datasets(
118
117
  {"dataset": "not Dataset type"},
119
118
  "dataset shouldn't be null and should be a Dataset",
120
119
  ),
121
- ),
120
+ ],
122
121
  )
123
122
  def test_list_dataset_elements_wrong_param_dataset(mock_dataset_worker, payload, error):
124
123
  with pytest.raises(AssertionError, match=error):
@@ -265,8 +264,8 @@ def test_list_dataset_elements(
265
264
 
266
265
 
267
266
  @pytest.mark.parametrize(
268
- "payload, error",
269
- (
267
+ ("payload", "error"),
268
+ [
270
269
  # Dataset
271
270
  (
272
271
  {"dataset": None},
@@ -276,7 +275,7 @@ def test_list_dataset_elements(
276
275
  {"dataset": "not dataset type"},
277
276
  "dataset shouldn't be null and should be a Dataset",
278
277
  ),
279
- ),
278
+ ],
280
279
  )
281
280
  def test_update_dataset_state_wrong_param_dataset(
282
281
  mock_dataset_worker, default_dataset, payload, error
@@ -292,8 +291,8 @@ def test_update_dataset_state_wrong_param_dataset(
292
291
 
293
292
 
294
293
  @pytest.mark.parametrize(
295
- "payload, error",
296
- (
294
+ ("payload", "error"),
295
+ [
297
296
  # DatasetState
298
297
  (
299
298
  {"state": None},
@@ -303,7 +302,7 @@ def test_update_dataset_state_wrong_param_dataset(
303
302
  {"state": "not dataset type"},
304
303
  "state shouldn't be null and should be a str from DatasetState",
305
304
  ),
306
- ),
305
+ ],
307
306
  )
308
307
  def test_update_dataset_state_wrong_param_state(
309
308
  mock_dataset_worker, default_dataset, payload, error
@@ -1,4 +1,3 @@
1
- # -*- coding: utf-8 -*-
2
1
  import json
3
2
  import re
4
3
  from argparse import Namespace
@@ -1219,8 +1218,8 @@ def test_create_elements_integrity_error(
1219
1218
 
1220
1219
 
1221
1220
  @pytest.mark.parametrize(
1222
- "payload, error",
1223
- (
1221
+ ("payload", "error"),
1222
+ [
1224
1223
  # Element
1225
1224
  (
1226
1225
  {"element": None},
@@ -1230,7 +1229,7 @@ def test_create_elements_integrity_error(
1230
1229
  {"element": "not element type"},
1231
1230
  "element shouldn't be null and should be an Element or CachedElement",
1232
1231
  ),
1233
- ),
1232
+ ],
1234
1233
  )
1235
1234
  def test_partial_update_element_wrong_param_element(
1236
1235
  mock_elements_worker, payload, error
@@ -1247,12 +1246,12 @@ def test_partial_update_element_wrong_param_element(
1247
1246
 
1248
1247
 
1249
1248
  @pytest.mark.parametrize(
1250
- "payload, error",
1251
- (
1249
+ ("payload", "error"),
1250
+ [
1252
1251
  # Type
1253
1252
  ({"type": 1234}, "type should be a str"),
1254
1253
  ({"type": None}, "type should be a str"),
1255
- ),
1254
+ ],
1256
1255
  )
1257
1256
  def test_partial_update_element_wrong_param_type(mock_elements_worker, payload, error):
1258
1257
  api_payload = {
@@ -1267,12 +1266,12 @@ def test_partial_update_element_wrong_param_type(mock_elements_worker, payload,
1267
1266
 
1268
1267
 
1269
1268
  @pytest.mark.parametrize(
1270
- "payload, error",
1271
- (
1269
+ ("payload", "error"),
1270
+ [
1272
1271
  # Name
1273
1272
  ({"name": 1234}, "name should be a str"),
1274
1273
  ({"name": None}, "name should be a str"),
1275
- ),
1274
+ ],
1276
1275
  )
1277
1276
  def test_partial_update_element_wrong_param_name(mock_elements_worker, payload, error):
1278
1277
  api_payload = {
@@ -1287,8 +1286,8 @@ def test_partial_update_element_wrong_param_name(mock_elements_worker, payload,
1287
1286
 
1288
1287
 
1289
1288
  @pytest.mark.parametrize(
1290
- "payload, error",
1291
- (
1289
+ ("payload", "error"),
1290
+ [
1292
1291
  # Polygon
1293
1292
  ({"polygon": "not a polygon"}, "polygon should be a list"),
1294
1293
  ({"polygon": None}, "polygon should be a list"),
@@ -1305,7 +1304,7 @@ def test_partial_update_element_wrong_param_name(mock_elements_worker, payload,
1305
1304
  {"polygon": [["not a coord", 1], [2, 2], [2, 1], [1, 2]]},
1306
1305
  "polygon points should be lists of two numbers",
1307
1306
  ),
1308
- ),
1307
+ ],
1309
1308
  )
1310
1309
  def test_partial_update_element_wrong_param_polygon(
1311
1310
  mock_elements_worker, payload, error
@@ -1322,8 +1321,8 @@ def test_partial_update_element_wrong_param_polygon(
1322
1321
 
1323
1322
 
1324
1323
  @pytest.mark.parametrize(
1325
- "payload, error",
1326
- (
1324
+ ("payload", "error"),
1325
+ [
1327
1326
  # Confidence
1328
1327
  ({"confidence": "lol"}, "confidence should be None or a float in [0..1] range"),
1329
1328
  ({"confidence": "0.2"}, "confidence should be None or a float in [0..1] range"),
@@ -1333,7 +1332,7 @@ def test_partial_update_element_wrong_param_polygon(
1333
1332
  {"confidence": float("inf")},
1334
1333
  "confidence should be None or a float in [0..1] range",
1335
1334
  ),
1336
- ),
1335
+ ],
1337
1336
  )
1338
1337
  def test_partial_update_element_wrong_param_conf(mock_elements_worker, payload, error):
1339
1338
  api_payload = {
@@ -1348,14 +1347,14 @@ def test_partial_update_element_wrong_param_conf(mock_elements_worker, payload,
1348
1347
 
1349
1348
 
1350
1349
  @pytest.mark.parametrize(
1351
- "payload, error",
1352
- (
1350
+ ("payload", "error"),
1351
+ [
1353
1352
  # Rotation angle
1354
1353
  ({"rotation_angle": "lol"}, "rotation_angle should be a positive integer"),
1355
1354
  ({"rotation_angle": -1}, "rotation_angle should be a positive integer"),
1356
1355
  ({"rotation_angle": 0.5}, "rotation_angle should be a positive integer"),
1357
1356
  ({"rotation_angle": None}, "rotation_angle should be a positive integer"),
1358
- ),
1357
+ ],
1359
1358
  )
1360
1359
  def test_partial_update_element_wrong_param_rota(mock_elements_worker, payload, error):
1361
1360
  api_payload = {
@@ -1370,13 +1369,13 @@ def test_partial_update_element_wrong_param_rota(mock_elements_worker, payload,
1370
1369
 
1371
1370
 
1372
1371
  @pytest.mark.parametrize(
1373
- "payload, error",
1374
- (
1372
+ ("payload", "error"),
1373
+ [
1375
1374
  # Mirrored
1376
1375
  ({"mirrored": "lol"}, "mirrored should be a boolean"),
1377
1376
  ({"mirrored": 1234}, "mirrored should be a boolean"),
1378
1377
  ({"mirrored": None}, "mirrored should be a boolean"),
1379
- ),
1378
+ ],
1380
1379
  )
1381
1380
  def test_partial_update_element_wrong_param_mir(mock_elements_worker, payload, error):
1382
1381
  api_payload = {
@@ -1391,13 +1390,13 @@ def test_partial_update_element_wrong_param_mir(mock_elements_worker, payload, e
1391
1390
 
1392
1391
 
1393
1392
  @pytest.mark.parametrize(
1394
- "payload, error",
1395
- (
1393
+ ("payload", "error"),
1394
+ [
1396
1395
  # Image
1397
1396
  ({"image": "lol"}, "image should be a UUID"),
1398
1397
  ({"image": 1234}, "image should be a UUID"),
1399
1398
  ({"image": None}, "image should be a UUID"),
1400
- ),
1399
+ ],
1401
1400
  )
1402
1401
  def test_partial_update_element_wrong_param_image(mock_elements_worker, payload, error):
1403
1402
  api_payload = {
@@ -1440,9 +1439,10 @@ def test_partial_update_element_api_error(responses, mock_elements_worker):
1440
1439
  ]
1441
1440
 
1442
1441
 
1442
+ @pytest.mark.usefixtures("_mock_cached_elements", "_mock_cached_images")
1443
1443
  @pytest.mark.parametrize(
1444
1444
  "payload",
1445
- (
1445
+ [
1446
1446
  (
1447
1447
  {
1448
1448
  "polygon": [[10, 10], [20, 20], [20, 10], [10, 20]],
@@ -1463,15 +1463,9 @@ def test_partial_update_element_api_error(responses, mock_elements_worker):
1463
1463
  "mirrored": False,
1464
1464
  }
1465
1465
  ),
1466
- ),
1466
+ ],
1467
1467
  )
1468
- def test_partial_update_element(
1469
- responses,
1470
- mock_elements_worker_with_cache,
1471
- mock_cached_elements,
1472
- mock_cached_images,
1473
- payload,
1474
- ):
1468
+ def test_partial_update_element(responses, mock_elements_worker_with_cache, payload):
1475
1469
  elt = CachedElement.select().first()
1476
1470
  new_image = CachedImage.select().first()
1477
1471
 
@@ -1516,9 +1510,10 @@ def test_partial_update_element(
1516
1510
  assert getattr(cached_element, param) == elt_response[param]
1517
1511
 
1518
1512
 
1519
- @pytest.mark.parametrize("confidence", (None, 0.42))
1513
+ @pytest.mark.usefixtures("_mock_cached_elements")
1514
+ @pytest.mark.parametrize("confidence", [None, 0.42])
1520
1515
  def test_partial_update_element_confidence(
1521
- responses, mock_elements_worker_with_cache, mock_cached_elements, confidence
1516
+ responses, mock_elements_worker_with_cache, confidence
1522
1517
  ):
1523
1518
  elt = CachedElement.select().first()
1524
1519
  elt_response = {
@@ -1661,13 +1656,13 @@ def test_list_element_children_wrong_with_metadata(mock_elements_worker):
1661
1656
 
1662
1657
 
1663
1658
  @pytest.mark.parametrize(
1664
- "param, value",
1665
- (
1659
+ ("param", "value"),
1660
+ [
1666
1661
  ("worker_version", 1234),
1667
1662
  ("worker_run", 1234),
1668
1663
  ("transcription_worker_version", 1234),
1669
1664
  ("transcription_worker_run", 1234),
1670
- ),
1665
+ ],
1671
1666
  )
1672
1667
  def test_list_element_children_wrong_worker_version(mock_elements_worker, param, value):
1673
1668
  elt = Element({"id": "12341234-1234-1234-1234-123412341234"})
@@ -1681,12 +1676,12 @@ def test_list_element_children_wrong_worker_version(mock_elements_worker, param,
1681
1676
 
1682
1677
  @pytest.mark.parametrize(
1683
1678
  "param",
1684
- (
1685
- ("worker_version"),
1686
- ("worker_run"),
1687
- ("transcription_worker_version"),
1688
- ("transcription_worker_run"),
1689
- ),
1679
+ [
1680
+ "worker_version",
1681
+ "worker_run",
1682
+ "transcription_worker_version",
1683
+ "transcription_worker_run",
1684
+ ],
1690
1685
  )
1691
1686
  def test_list_element_children_wrong_bool_worker_version(mock_elements_worker, param):
1692
1687
  elt = Element({"id": "12341234-1234-1234-1234-123412341234"})
@@ -1908,9 +1903,10 @@ def test_list_element_children_with_cache_unhandled_param(
1908
1903
  )
1909
1904
 
1910
1905
 
1906
+ @pytest.mark.usefixtures("_mock_cached_elements")
1911
1907
  @pytest.mark.parametrize(
1912
- "filters, expected_ids",
1913
- (
1908
+ ("filters", "expected_ids"),
1909
+ [
1914
1910
  # Filter on element should give all elements inserted
1915
1911
  (
1916
1912
  {
@@ -1977,12 +1973,11 @@ def test_list_element_children_with_cache_unhandled_param(
1977
1973
  "33333333-3333-3333-3333-333333333333",
1978
1974
  ),
1979
1975
  ),
1980
- ),
1976
+ ],
1981
1977
  )
1982
1978
  def test_list_element_children_with_cache(
1983
1979
  responses,
1984
1980
  mock_elements_worker_with_cache,
1985
- mock_cached_elements,
1986
1981
  filters,
1987
1982
  expected_ids,
1988
1983
  ):
@@ -1992,7 +1987,7 @@ def test_list_element_children_with_cache(
1992
1987
  # Query database through cache
1993
1988
  elements = mock_elements_worker_with_cache.list_element_children(**filters)
1994
1989
  assert elements.count() == len(expected_ids)
1995
- for child, expected_id in zip(elements.order_by("id"), expected_ids):
1990
+ for child, expected_id in zip(elements.order_by("id"), expected_ids, strict=True):
1996
1991
  assert child.id == UUID(expected_id)
1997
1992
 
1998
1993
  # Check the worker never hits the API for elements
@@ -2109,13 +2104,13 @@ def test_list_element_parents_wrong_with_metadata(mock_elements_worker):
2109
2104
 
2110
2105
 
2111
2106
  @pytest.mark.parametrize(
2112
- "param, value",
2113
- (
2107
+ ("param", "value"),
2108
+ [
2114
2109
  ("worker_version", 1234),
2115
2110
  ("worker_run", 1234),
2116
2111
  ("transcription_worker_version", 1234),
2117
2112
  ("transcription_worker_run", 1234),
2118
- ),
2113
+ ],
2119
2114
  )
2120
2115
  def test_list_element_parents_wrong_worker_version(mock_elements_worker, param, value):
2121
2116
  elt = Element({"id": "12341234-1234-1234-1234-123412341234"})
@@ -2129,12 +2124,12 @@ def test_list_element_parents_wrong_worker_version(mock_elements_worker, param,
2129
2124
 
2130
2125
  @pytest.mark.parametrize(
2131
2126
  "param",
2132
- (
2133
- ("worker_version"),
2134
- ("worker_run"),
2135
- ("transcription_worker_version"),
2136
- ("transcription_worker_run"),
2137
- ),
2127
+ [
2128
+ "worker_version",
2129
+ "worker_run",
2130
+ "transcription_worker_version",
2131
+ "transcription_worker_run",
2132
+ ],
2138
2133
  )
2139
2134
  def test_list_element_parents_wrong_bool_worker_version(mock_elements_worker, param):
2140
2135
  elt = Element({"id": "12341234-1234-1234-1234-123412341234"})
@@ -2356,9 +2351,10 @@ def test_list_element_parents_with_cache_unhandled_param(
2356
2351
  )
2357
2352
 
2358
2353
 
2354
+ @pytest.mark.usefixtures("_mock_cached_elements")
2359
2355
  @pytest.mark.parametrize(
2360
- "filters, expected_id",
2361
- (
2356
+ ("filters", "expected_id"),
2357
+ [
2362
2358
  # Filter on element
2363
2359
  (
2364
2360
  {
@@ -2415,12 +2411,11 @@ def test_list_element_parents_with_cache_unhandled_param(
2415
2411
  },
2416
2412
  "99999999-9999-9999-9999-999999999999",
2417
2413
  ),
2418
- ),
2414
+ ],
2419
2415
  )
2420
2416
  def test_list_element_parents_with_cache(
2421
2417
  responses,
2422
2418
  mock_elements_worker_with_cache,
2423
- mock_cached_elements,
2424
2419
  filters,
2425
2420
  expected_id,
2426
2421
  ):