arkindex-base-worker 0.3.6rc4__py3-none-any.whl → 0.3.7__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.3.7.dist-info/LICENSE +21 -0
- arkindex_base_worker-0.3.7.dist-info/METADATA +77 -0
- arkindex_base_worker-0.3.7.dist-info/RECORD +47 -0
- {arkindex_base_worker-0.3.6rc4.dist-info → arkindex_base_worker-0.3.7.dist-info}/WHEEL +1 -1
- {arkindex_base_worker-0.3.6rc4.dist-info → arkindex_base_worker-0.3.7.dist-info}/top_level.txt +2 -0
- arkindex_worker/cache.py +14 -0
- arkindex_worker/image.py +29 -19
- arkindex_worker/models.py +14 -2
- arkindex_worker/utils.py +17 -3
- arkindex_worker/worker/__init__.py +122 -125
- arkindex_worker/worker/base.py +24 -24
- arkindex_worker/worker/classification.py +18 -25
- arkindex_worker/worker/dataset.py +24 -18
- arkindex_worker/worker/element.py +100 -19
- arkindex_worker/worker/entity.py +35 -4
- arkindex_worker/worker/metadata.py +21 -11
- arkindex_worker/worker/training.py +13 -0
- arkindex_worker/worker/transcription.py +45 -5
- arkindex_worker/worker/version.py +22 -0
- hooks/pre_gen_project.py +3 -0
- tests/conftest.py +16 -8
- tests/test_base_worker.py +0 -6
- tests/test_dataset_worker.py +291 -409
- tests/test_elements_worker/test_classifications.py +365 -539
- tests/test_elements_worker/test_cli.py +1 -1
- tests/test_elements_worker/test_dataset.py +97 -116
- tests/test_elements_worker/test_elements.py +354 -76
- tests/test_elements_worker/test_entities.py +22 -2
- tests/test_elements_worker/test_metadata.py +53 -27
- tests/test_elements_worker/test_training.py +35 -0
- tests/test_elements_worker/test_transcriptions.py +149 -16
- tests/test_elements_worker/test_worker.py +19 -6
- tests/test_image.py +37 -0
- tests/test_utils.py +23 -1
- worker-demo/tests/__init__.py +0 -0
- worker-demo/tests/conftest.py +32 -0
- worker-demo/tests/test_worker.py +12 -0
- worker-demo/worker_demo/__init__.py +6 -0
- worker-demo/worker_demo/worker.py +19 -0
- arkindex_base_worker-0.3.6rc4.dist-info/METADATA +0 -47
- arkindex_base_worker-0.3.6rc4.dist-info/RECORD +0 -40
|
@@ -428,19 +428,7 @@ def test_create_sub_element_wrong_name(mock_elements_worker):
|
|
|
428
428
|
def test_create_sub_element_wrong_polygon(mock_elements_worker):
|
|
429
429
|
elt = Element({"zone": None})
|
|
430
430
|
|
|
431
|
-
with pytest.raises(
|
|
432
|
-
AssertionError, match="polygon shouldn't be null and should be of type list"
|
|
433
|
-
):
|
|
434
|
-
mock_elements_worker.create_sub_element(
|
|
435
|
-
element=elt,
|
|
436
|
-
type="something",
|
|
437
|
-
name="0",
|
|
438
|
-
polygon=None,
|
|
439
|
-
)
|
|
440
|
-
|
|
441
|
-
with pytest.raises(
|
|
442
|
-
AssertionError, match="polygon shouldn't be null and should be of type list"
|
|
443
|
-
):
|
|
431
|
+
with pytest.raises(AssertionError, match="polygon should be None or a list"):
|
|
444
432
|
mock_elements_worker.create_sub_element(
|
|
445
433
|
element=elt,
|
|
446
434
|
type="something",
|
|
@@ -504,6 +492,42 @@ def test_create_sub_element_wrong_confidence(mock_elements_worker, confidence):
|
|
|
504
492
|
)
|
|
505
493
|
|
|
506
494
|
|
|
495
|
+
@pytest.mark.parametrize(
|
|
496
|
+
("image", "error_type", "error_message"),
|
|
497
|
+
[
|
|
498
|
+
(1, AssertionError, "image should be None or string"),
|
|
499
|
+
("not a uuid", ValueError, "image is not a valid uuid."),
|
|
500
|
+
],
|
|
501
|
+
)
|
|
502
|
+
def test_create_sub_element_wrong_image(
|
|
503
|
+
mock_elements_worker, image, error_type, error_message
|
|
504
|
+
):
|
|
505
|
+
with pytest.raises(error_type, match=re.escape(error_message)):
|
|
506
|
+
mock_elements_worker.create_sub_element(
|
|
507
|
+
element=Element({"zone": None}),
|
|
508
|
+
type="something",
|
|
509
|
+
name="blah",
|
|
510
|
+
polygon=[[0, 0], [0, 10], [10, 10], [10, 0], [0, 0]],
|
|
511
|
+
image=image,
|
|
512
|
+
)
|
|
513
|
+
|
|
514
|
+
|
|
515
|
+
def test_create_sub_element_wrong_image_and_polygon(mock_elements_worker):
|
|
516
|
+
with pytest.raises(
|
|
517
|
+
AssertionError,
|
|
518
|
+
match=re.escape(
|
|
519
|
+
"An image or a parent with an image is required to create an element with a polygon."
|
|
520
|
+
),
|
|
521
|
+
):
|
|
522
|
+
mock_elements_worker.create_sub_element(
|
|
523
|
+
element=Element({"zone": None}),
|
|
524
|
+
type="something",
|
|
525
|
+
name="blah",
|
|
526
|
+
polygon=[[0, 0], [0, 10], [10, 10], [10, 0], [0, 0]],
|
|
527
|
+
image=None,
|
|
528
|
+
)
|
|
529
|
+
|
|
530
|
+
|
|
507
531
|
def test_create_sub_element_api_error(responses, mock_elements_worker):
|
|
508
532
|
elt = Element(
|
|
509
533
|
{
|
|
@@ -580,7 +604,7 @@ def test_create_sub_element(responses, mock_elements_worker, slim_output):
|
|
|
580
604
|
assert json.loads(responses.calls[-1].request.body) == {
|
|
581
605
|
"type": "something",
|
|
582
606
|
"name": "0",
|
|
583
|
-
"image":
|
|
607
|
+
"image": None,
|
|
584
608
|
"corpus": "11111111-1111-1111-1111-111111111111",
|
|
585
609
|
"polygon": [[1, 1], [2, 2], [2, 1], [1, 2]],
|
|
586
610
|
"parent": "12341234-1234-1234-1234-123412341234",
|
|
@@ -625,7 +649,7 @@ def test_create_sub_element_confidence(responses, mock_elements_worker):
|
|
|
625
649
|
assert json.loads(responses.calls[-1].request.body) == {
|
|
626
650
|
"type": "something",
|
|
627
651
|
"name": "0",
|
|
628
|
-
"image":
|
|
652
|
+
"image": None,
|
|
629
653
|
"corpus": "11111111-1111-1111-1111-111111111111",
|
|
630
654
|
"polygon": [[1, 1], [2, 2], [2, 1], [1, 2]],
|
|
631
655
|
"parent": "12341234-1234-1234-1234-123412341234",
|
|
@@ -1217,6 +1241,94 @@ def test_create_elements_integrity_error(
|
|
|
1217
1241
|
assert list(CachedElement.select()) == []
|
|
1218
1242
|
|
|
1219
1243
|
|
|
1244
|
+
@pytest.mark.parametrize(
|
|
1245
|
+
("params", "error_message"),
|
|
1246
|
+
[
|
|
1247
|
+
(
|
|
1248
|
+
{"parent": None, "child": None},
|
|
1249
|
+
"parent shouldn't be null and should be of type Element",
|
|
1250
|
+
),
|
|
1251
|
+
(
|
|
1252
|
+
{"parent": "not an element", "child": None},
|
|
1253
|
+
"parent shouldn't be null and should be of type Element",
|
|
1254
|
+
),
|
|
1255
|
+
(
|
|
1256
|
+
{"parent": Element(zone=None), "child": None},
|
|
1257
|
+
"child shouldn't be null and should be of type Element",
|
|
1258
|
+
),
|
|
1259
|
+
(
|
|
1260
|
+
{"parent": Element(zone=None), "child": "not an element"},
|
|
1261
|
+
"child shouldn't be null and should be of type Element",
|
|
1262
|
+
),
|
|
1263
|
+
],
|
|
1264
|
+
)
|
|
1265
|
+
def test_create_element_parent_invalid_params(
|
|
1266
|
+
mock_elements_worker, params, error_message
|
|
1267
|
+
):
|
|
1268
|
+
with pytest.raises(AssertionError, match=re.escape(error_message)):
|
|
1269
|
+
mock_elements_worker.create_element_parent(**params)
|
|
1270
|
+
|
|
1271
|
+
|
|
1272
|
+
def test_create_element_parent_api_error(responses, mock_elements_worker):
|
|
1273
|
+
parent = Element({"id": "12341234-1234-1234-1234-123412341234"})
|
|
1274
|
+
child = Element({"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"})
|
|
1275
|
+
responses.add(
|
|
1276
|
+
responses.POST,
|
|
1277
|
+
"http://testserver/api/v1/element/497f6eca-6276-4993-bfeb-53cbbbba6f08/parent/12341234-1234-1234-1234-123412341234/",
|
|
1278
|
+
status=500,
|
|
1279
|
+
)
|
|
1280
|
+
|
|
1281
|
+
with pytest.raises(ErrorResponse):
|
|
1282
|
+
mock_elements_worker.create_element_parent(
|
|
1283
|
+
parent=parent,
|
|
1284
|
+
child=child,
|
|
1285
|
+
)
|
|
1286
|
+
|
|
1287
|
+
assert len(responses.calls) == len(BASE_API_CALLS) + 5
|
|
1288
|
+
assert [
|
|
1289
|
+
(call.request.method, call.request.url) for call in responses.calls
|
|
1290
|
+
] == BASE_API_CALLS + [
|
|
1291
|
+
# We retry 5 times the API call
|
|
1292
|
+
(
|
|
1293
|
+
"POST",
|
|
1294
|
+
"http://testserver/api/v1/element/497f6eca-6276-4993-bfeb-53cbbbba6f08/parent/12341234-1234-1234-1234-123412341234/",
|
|
1295
|
+
),
|
|
1296
|
+
] * 5
|
|
1297
|
+
|
|
1298
|
+
|
|
1299
|
+
def test_create_element_parent(responses, mock_elements_worker):
|
|
1300
|
+
parent = Element({"id": "12341234-1234-1234-1234-123412341234"})
|
|
1301
|
+
child = Element({"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"})
|
|
1302
|
+
responses.add(
|
|
1303
|
+
responses.POST,
|
|
1304
|
+
"http://testserver/api/v1/element/497f6eca-6276-4993-bfeb-53cbbbba6f08/parent/12341234-1234-1234-1234-123412341234/",
|
|
1305
|
+
status=200,
|
|
1306
|
+
json={
|
|
1307
|
+
"parent": "12341234-1234-1234-1234-123412341234",
|
|
1308
|
+
"child": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
|
|
1309
|
+
},
|
|
1310
|
+
)
|
|
1311
|
+
|
|
1312
|
+
created_element_parent = mock_elements_worker.create_element_parent(
|
|
1313
|
+
parent=parent,
|
|
1314
|
+
child=child,
|
|
1315
|
+
)
|
|
1316
|
+
|
|
1317
|
+
assert len(responses.calls) == len(BASE_API_CALLS) + 1
|
|
1318
|
+
assert [
|
|
1319
|
+
(call.request.method, call.request.url) for call in responses.calls
|
|
1320
|
+
] == BASE_API_CALLS + [
|
|
1321
|
+
(
|
|
1322
|
+
"POST",
|
|
1323
|
+
"http://testserver/api/v1/element/497f6eca-6276-4993-bfeb-53cbbbba6f08/parent/12341234-1234-1234-1234-123412341234/",
|
|
1324
|
+
),
|
|
1325
|
+
]
|
|
1326
|
+
assert created_element_parent == {
|
|
1327
|
+
"parent": "12341234-1234-1234-1234-123412341234",
|
|
1328
|
+
"child": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
|
|
1329
|
+
}
|
|
1330
|
+
|
|
1331
|
+
|
|
1220
1332
|
@pytest.mark.parametrize(
|
|
1221
1333
|
("payload", "error"),
|
|
1222
1334
|
[
|
|
@@ -1658,13 +1770,11 @@ def test_list_element_children_wrong_with_metadata(mock_elements_worker):
|
|
|
1658
1770
|
@pytest.mark.parametrize(
|
|
1659
1771
|
("param", "value"),
|
|
1660
1772
|
[
|
|
1661
|
-
("worker_version", 1234),
|
|
1662
1773
|
("worker_run", 1234),
|
|
1663
|
-
("transcription_worker_version", 1234),
|
|
1664
1774
|
("transcription_worker_run", 1234),
|
|
1665
1775
|
],
|
|
1666
1776
|
)
|
|
1667
|
-
def
|
|
1777
|
+
def test_list_element_children_wrong_worker_run(mock_elements_worker, param, value):
|
|
1668
1778
|
elt = Element({"id": "12341234-1234-1234-1234-123412341234"})
|
|
1669
1779
|
|
|
1670
1780
|
with pytest.raises(AssertionError, match=f"{param} should be of type str or bool"):
|
|
@@ -1674,16 +1784,39 @@ def test_list_element_children_wrong_worker_version(mock_elements_worker, param,
|
|
|
1674
1784
|
)
|
|
1675
1785
|
|
|
1676
1786
|
|
|
1787
|
+
@pytest.mark.parametrize(
|
|
1788
|
+
("param", "alternative", "value"),
|
|
1789
|
+
[
|
|
1790
|
+
("worker_version", "worker_run", 1234),
|
|
1791
|
+
("transcription_worker_version", "transcription_worker_run", 1234),
|
|
1792
|
+
],
|
|
1793
|
+
)
|
|
1794
|
+
def test_list_element_children_wrong_worker_version(
|
|
1795
|
+
mock_elements_worker, param, alternative, value
|
|
1796
|
+
):
|
|
1797
|
+
elt = Element({"id": "12341234-1234-1234-1234-123412341234"})
|
|
1798
|
+
|
|
1799
|
+
# WARNING: pytest.deprecated_call must be placed BEFORE pytest.raises, otherwise `match` argument won't be checked
|
|
1800
|
+
with (
|
|
1801
|
+
pytest.deprecated_call(
|
|
1802
|
+
match=f"`{param}` usage is deprecated. Consider using `{alternative}` instead."
|
|
1803
|
+
),
|
|
1804
|
+
pytest.raises(AssertionError, match=f"{param} should be of type str or bool"),
|
|
1805
|
+
):
|
|
1806
|
+
mock_elements_worker.list_element_children(
|
|
1807
|
+
element=elt,
|
|
1808
|
+
**{param: value},
|
|
1809
|
+
)
|
|
1810
|
+
|
|
1811
|
+
|
|
1677
1812
|
@pytest.mark.parametrize(
|
|
1678
1813
|
"param",
|
|
1679
1814
|
[
|
|
1680
|
-
"worker_version",
|
|
1681
1815
|
"worker_run",
|
|
1682
|
-
"transcription_worker_version",
|
|
1683
1816
|
"transcription_worker_run",
|
|
1684
1817
|
],
|
|
1685
1818
|
)
|
|
1686
|
-
def
|
|
1819
|
+
def test_list_element_children_wrong_bool_worker_run(mock_elements_worker, param):
|
|
1687
1820
|
elt = Element({"id": "12341234-1234-1234-1234-123412341234"})
|
|
1688
1821
|
|
|
1689
1822
|
with pytest.raises(
|
|
@@ -1695,6 +1828,33 @@ def test_list_element_children_wrong_bool_worker_version(mock_elements_worker, p
|
|
|
1695
1828
|
)
|
|
1696
1829
|
|
|
1697
1830
|
|
|
1831
|
+
@pytest.mark.parametrize(
|
|
1832
|
+
("param", "alternative"),
|
|
1833
|
+
[
|
|
1834
|
+
("worker_version", "worker_run"),
|
|
1835
|
+
("transcription_worker_version", "transcription_worker_run"),
|
|
1836
|
+
],
|
|
1837
|
+
)
|
|
1838
|
+
def test_list_element_children_wrong_bool_worker_version(
|
|
1839
|
+
mock_elements_worker, param, alternative
|
|
1840
|
+
):
|
|
1841
|
+
elt = Element({"id": "12341234-1234-1234-1234-123412341234"})
|
|
1842
|
+
|
|
1843
|
+
# WARNING: pytest.deprecated_call must be placed BEFORE pytest.raises, otherwise `match` argument won't be checked
|
|
1844
|
+
with (
|
|
1845
|
+
pytest.deprecated_call(
|
|
1846
|
+
match=f"`{param}` usage is deprecated. Consider using `{alternative}` instead."
|
|
1847
|
+
),
|
|
1848
|
+
pytest.raises(
|
|
1849
|
+
AssertionError, match=f"if of type bool, {param} can only be set to False"
|
|
1850
|
+
),
|
|
1851
|
+
):
|
|
1852
|
+
mock_elements_worker.list_element_children(
|
|
1853
|
+
element=elt,
|
|
1854
|
+
**{param: True},
|
|
1855
|
+
)
|
|
1856
|
+
|
|
1857
|
+
|
|
1698
1858
|
def test_list_element_children_api_error(responses, mock_elements_worker):
|
|
1699
1859
|
elt = Element({"id": "12341234-1234-1234-1234-123412341234"})
|
|
1700
1860
|
responses.add(
|
|
@@ -1830,10 +1990,15 @@ def test_list_element_children_manual_worker_version(responses, mock_elements_wo
|
|
|
1830
1990
|
},
|
|
1831
1991
|
)
|
|
1832
1992
|
|
|
1833
|
-
|
|
1834
|
-
|
|
1993
|
+
with pytest.deprecated_call(
|
|
1994
|
+
match="`worker_version` usage is deprecated. Consider using `worker_run` instead."
|
|
1835
1995
|
):
|
|
1836
|
-
|
|
1996
|
+
for idx, child in enumerate(
|
|
1997
|
+
mock_elements_worker.list_element_children(
|
|
1998
|
+
element=elt, worker_version=False
|
|
1999
|
+
)
|
|
2000
|
+
):
|
|
2001
|
+
assert child == expected_children[idx]
|
|
1837
2002
|
|
|
1838
2003
|
assert len(responses.calls) == len(BASE_API_CALLS) + 1
|
|
1839
2004
|
assert [
|
|
@@ -1926,56 +2091,84 @@ def test_list_element_children_with_cache_unhandled_param(
|
|
|
1926
2091
|
},
|
|
1927
2092
|
("22222222-2222-2222-2222-222222222222",),
|
|
1928
2093
|
),
|
|
1929
|
-
# Filter on element and worker
|
|
2094
|
+
# Filter on element and worker run should give second
|
|
1930
2095
|
(
|
|
1931
2096
|
{
|
|
1932
2097
|
"element": CachedElement(id="12341234-1234-1234-1234-123412341234"),
|
|
1933
|
-
"
|
|
2098
|
+
"worker_run": "56785678-5678-5678-5678-567856785678",
|
|
1934
2099
|
},
|
|
1935
|
-
(
|
|
1936
|
-
"11111111-1111-1111-1111-111111111111",
|
|
1937
|
-
"22222222-2222-2222-2222-222222222222",
|
|
1938
|
-
),
|
|
2100
|
+
("22222222-2222-2222-2222-222222222222",),
|
|
1939
2101
|
),
|
|
1940
|
-
# Filter on element,
|
|
2102
|
+
# Filter on element, manual worker run should give first and third
|
|
1941
2103
|
(
|
|
1942
2104
|
{
|
|
1943
2105
|
"element": CachedElement(id="12341234-1234-1234-1234-123412341234"),
|
|
1944
|
-
"
|
|
1945
|
-
"worker_version": "56785678-5678-5678-5678-567856785678",
|
|
2106
|
+
"worker_run": False,
|
|
1946
2107
|
},
|
|
1947
|
-
(
|
|
2108
|
+
(
|
|
2109
|
+
"11111111-1111-1111-1111-111111111111",
|
|
2110
|
+
"33333333-3333-3333-3333-333333333333",
|
|
2111
|
+
),
|
|
1948
2112
|
),
|
|
1949
|
-
|
|
2113
|
+
],
|
|
2114
|
+
)
|
|
2115
|
+
def test_list_element_children_with_cache(
|
|
2116
|
+
responses,
|
|
2117
|
+
mock_elements_worker_with_cache,
|
|
2118
|
+
filters,
|
|
2119
|
+
expected_ids,
|
|
2120
|
+
):
|
|
2121
|
+
# Check we have 5 elements already present in database
|
|
2122
|
+
assert CachedElement.select().count() == 5
|
|
2123
|
+
|
|
2124
|
+
# Query database through cache
|
|
2125
|
+
elements = mock_elements_worker_with_cache.list_element_children(**filters)
|
|
2126
|
+
assert elements.count() == len(expected_ids)
|
|
2127
|
+
for child, expected_id in zip(elements.order_by("id"), expected_ids, strict=True):
|
|
2128
|
+
assert child.id == UUID(expected_id)
|
|
2129
|
+
|
|
2130
|
+
# Check the worker never hits the API for elements
|
|
2131
|
+
assert len(responses.calls) == len(BASE_API_CALLS)
|
|
2132
|
+
assert [
|
|
2133
|
+
(call.request.method, call.request.url) for call in responses.calls
|
|
2134
|
+
] == BASE_API_CALLS
|
|
2135
|
+
|
|
2136
|
+
|
|
2137
|
+
@pytest.mark.usefixtures("_mock_cached_elements")
|
|
2138
|
+
@pytest.mark.parametrize(
|
|
2139
|
+
("filters", "expected_ids"),
|
|
2140
|
+
[
|
|
2141
|
+
# Filter on element and worker version
|
|
1950
2142
|
(
|
|
1951
2143
|
{
|
|
1952
2144
|
"element": CachedElement(id="12341234-1234-1234-1234-123412341234"),
|
|
1953
|
-
"worker_version":
|
|
2145
|
+
"worker_version": "56785678-5678-5678-5678-567856785678",
|
|
1954
2146
|
},
|
|
1955
|
-
(
|
|
2147
|
+
(
|
|
2148
|
+
"11111111-1111-1111-1111-111111111111",
|
|
2149
|
+
"22222222-2222-2222-2222-222222222222",
|
|
2150
|
+
),
|
|
1956
2151
|
),
|
|
1957
|
-
# Filter on element and worker
|
|
2152
|
+
# Filter on element, type double_page and worker version
|
|
1958
2153
|
(
|
|
1959
2154
|
{
|
|
1960
2155
|
"element": CachedElement(id="12341234-1234-1234-1234-123412341234"),
|
|
1961
|
-
"
|
|
2156
|
+
"type": "page",
|
|
2157
|
+
"worker_version": "56785678-5678-5678-5678-567856785678",
|
|
1962
2158
|
},
|
|
1963
2159
|
("22222222-2222-2222-2222-222222222222",),
|
|
1964
2160
|
),
|
|
1965
|
-
# Filter on element, manual worker
|
|
2161
|
+
# Filter on element, manual worker version
|
|
1966
2162
|
(
|
|
1967
2163
|
{
|
|
1968
2164
|
"element": CachedElement(id="12341234-1234-1234-1234-123412341234"),
|
|
1969
|
-
"
|
|
2165
|
+
"worker_version": False,
|
|
1970
2166
|
},
|
|
1971
|
-
(
|
|
1972
|
-
"11111111-1111-1111-1111-111111111111",
|
|
1973
|
-
"33333333-3333-3333-3333-333333333333",
|
|
1974
|
-
),
|
|
2167
|
+
("33333333-3333-3333-3333-333333333333",),
|
|
1975
2168
|
),
|
|
1976
2169
|
],
|
|
1977
2170
|
)
|
|
1978
|
-
def
|
|
2171
|
+
def test_list_element_children_with_cache_deprecation(
|
|
1979
2172
|
responses,
|
|
1980
2173
|
mock_elements_worker_with_cache,
|
|
1981
2174
|
filters,
|
|
@@ -1984,8 +2177,11 @@ def test_list_element_children_with_cache(
|
|
|
1984
2177
|
# Check we have 5 elements already present in database
|
|
1985
2178
|
assert CachedElement.select().count() == 5
|
|
1986
2179
|
|
|
1987
|
-
|
|
1988
|
-
|
|
2180
|
+
with pytest.deprecated_call(
|
|
2181
|
+
match="`worker_version` usage is deprecated. Consider using `worker_run` instead."
|
|
2182
|
+
):
|
|
2183
|
+
# Query database through cache
|
|
2184
|
+
elements = mock_elements_worker_with_cache.list_element_children(**filters)
|
|
1989
2185
|
assert elements.count() == len(expected_ids)
|
|
1990
2186
|
for child, expected_id in zip(elements.order_by("id"), expected_ids, strict=True):
|
|
1991
2187
|
assert child.id == UUID(expected_id)
|
|
@@ -2106,13 +2302,11 @@ def test_list_element_parents_wrong_with_metadata(mock_elements_worker):
|
|
|
2106
2302
|
@pytest.mark.parametrize(
|
|
2107
2303
|
("param", "value"),
|
|
2108
2304
|
[
|
|
2109
|
-
("worker_version", 1234),
|
|
2110
2305
|
("worker_run", 1234),
|
|
2111
|
-
("transcription_worker_version", 1234),
|
|
2112
2306
|
("transcription_worker_run", 1234),
|
|
2113
2307
|
],
|
|
2114
2308
|
)
|
|
2115
|
-
def
|
|
2309
|
+
def test_list_element_parents_wrong_worker_run(mock_elements_worker, param, value):
|
|
2116
2310
|
elt = Element({"id": "12341234-1234-1234-1234-123412341234"})
|
|
2117
2311
|
|
|
2118
2312
|
with pytest.raises(AssertionError, match=f"{param} should be of type str or bool"):
|
|
@@ -2122,16 +2316,39 @@ def test_list_element_parents_wrong_worker_version(mock_elements_worker, param,
|
|
|
2122
2316
|
)
|
|
2123
2317
|
|
|
2124
2318
|
|
|
2319
|
+
@pytest.mark.parametrize(
|
|
2320
|
+
("param", "alternative", "value"),
|
|
2321
|
+
[
|
|
2322
|
+
("worker_version", "worker_run", 1234),
|
|
2323
|
+
("transcription_worker_version", "transcription_worker_run", 1234),
|
|
2324
|
+
],
|
|
2325
|
+
)
|
|
2326
|
+
def test_list_element_parents_wrong_worker_version(
|
|
2327
|
+
mock_elements_worker, param, alternative, value
|
|
2328
|
+
):
|
|
2329
|
+
elt = Element({"id": "12341234-1234-1234-1234-123412341234"})
|
|
2330
|
+
|
|
2331
|
+
# WARNING: pytest.deprecated_call must be placed BEFORE pytest.raises, otherwise `match` argument won't be checked
|
|
2332
|
+
with (
|
|
2333
|
+
pytest.deprecated_call(
|
|
2334
|
+
match=f"`{param}` usage is deprecated. Consider using `{alternative}` instead."
|
|
2335
|
+
),
|
|
2336
|
+
pytest.raises(AssertionError, match=f"{param} should be of type str or bool"),
|
|
2337
|
+
):
|
|
2338
|
+
mock_elements_worker.list_element_parents(
|
|
2339
|
+
element=elt,
|
|
2340
|
+
**{param: value},
|
|
2341
|
+
)
|
|
2342
|
+
|
|
2343
|
+
|
|
2125
2344
|
@pytest.mark.parametrize(
|
|
2126
2345
|
"param",
|
|
2127
2346
|
[
|
|
2128
|
-
"worker_version",
|
|
2129
2347
|
"worker_run",
|
|
2130
|
-
"transcription_worker_version",
|
|
2131
2348
|
"transcription_worker_run",
|
|
2132
2349
|
],
|
|
2133
2350
|
)
|
|
2134
|
-
def
|
|
2351
|
+
def test_list_element_parents_wrong_bool_worker_run(mock_elements_worker, param):
|
|
2135
2352
|
elt = Element({"id": "12341234-1234-1234-1234-123412341234"})
|
|
2136
2353
|
|
|
2137
2354
|
with pytest.raises(
|
|
@@ -2143,6 +2360,33 @@ def test_list_element_parents_wrong_bool_worker_version(mock_elements_worker, pa
|
|
|
2143
2360
|
)
|
|
2144
2361
|
|
|
2145
2362
|
|
|
2363
|
+
@pytest.mark.parametrize(
|
|
2364
|
+
("param", "alternative"),
|
|
2365
|
+
[
|
|
2366
|
+
("worker_version", "worker_run"),
|
|
2367
|
+
("transcription_worker_version", "transcription_worker_run"),
|
|
2368
|
+
],
|
|
2369
|
+
)
|
|
2370
|
+
def test_list_element_parents_wrong_bool_worker_version(
|
|
2371
|
+
mock_elements_worker, param, alternative
|
|
2372
|
+
):
|
|
2373
|
+
elt = Element({"id": "12341234-1234-1234-1234-123412341234"})
|
|
2374
|
+
|
|
2375
|
+
# WARNING: pytest.deprecated_call must be placed BEFORE pytest.raises, otherwise `match` argument won't be checked
|
|
2376
|
+
with (
|
|
2377
|
+
pytest.deprecated_call(
|
|
2378
|
+
match=f"`{param}` usage is deprecated. Consider using `{alternative}` instead."
|
|
2379
|
+
),
|
|
2380
|
+
pytest.raises(
|
|
2381
|
+
AssertionError, match=f"if of type bool, {param} can only be set to False"
|
|
2382
|
+
),
|
|
2383
|
+
):
|
|
2384
|
+
mock_elements_worker.list_element_parents(
|
|
2385
|
+
element=elt,
|
|
2386
|
+
**{param: True},
|
|
2387
|
+
)
|
|
2388
|
+
|
|
2389
|
+
|
|
2146
2390
|
def test_list_element_parents_api_error(responses, mock_elements_worker):
|
|
2147
2391
|
elt = Element({"id": "12341234-1234-1234-1234-123412341234"})
|
|
2148
2392
|
responses.add(
|
|
@@ -2278,10 +2522,13 @@ def test_list_element_parents_manual_worker_version(responses, mock_elements_wor
|
|
|
2278
2522
|
},
|
|
2279
2523
|
)
|
|
2280
2524
|
|
|
2281
|
-
|
|
2282
|
-
|
|
2525
|
+
with pytest.deprecated_call(
|
|
2526
|
+
match="`worker_version` usage is deprecated. Consider using `worker_run` instead."
|
|
2283
2527
|
):
|
|
2284
|
-
|
|
2528
|
+
for idx, parent in enumerate(
|
|
2529
|
+
mock_elements_worker.list_element_parents(element=elt, worker_version=False)
|
|
2530
|
+
):
|
|
2531
|
+
assert parent == expected_parents[idx]
|
|
2285
2532
|
|
|
2286
2533
|
assert len(responses.calls) == len(BASE_API_CALLS) + 1
|
|
2287
2534
|
assert [
|
|
@@ -2370,6 +2617,50 @@ def test_list_element_parents_with_cache_unhandled_param(
|
|
|
2370
2617
|
},
|
|
2371
2618
|
"12341234-1234-1234-1234-123412341234",
|
|
2372
2619
|
),
|
|
2620
|
+
# Filter on element and worker run
|
|
2621
|
+
(
|
|
2622
|
+
{
|
|
2623
|
+
"element": CachedElement(id="22222222-2222-2222-2222-222222222222"),
|
|
2624
|
+
"worker_run": "56785678-5678-5678-5678-567856785678",
|
|
2625
|
+
},
|
|
2626
|
+
"12341234-1234-1234-1234-123412341234",
|
|
2627
|
+
),
|
|
2628
|
+
# Filter on element, manual worker run
|
|
2629
|
+
(
|
|
2630
|
+
{
|
|
2631
|
+
"element": CachedElement(id="12341234-1234-1234-1234-123412341234"),
|
|
2632
|
+
"worker_run": False,
|
|
2633
|
+
},
|
|
2634
|
+
"99999999-9999-9999-9999-999999999999",
|
|
2635
|
+
),
|
|
2636
|
+
],
|
|
2637
|
+
)
|
|
2638
|
+
def test_list_element_parents_with_cache(
|
|
2639
|
+
responses,
|
|
2640
|
+
mock_elements_worker_with_cache,
|
|
2641
|
+
filters,
|
|
2642
|
+
expected_id,
|
|
2643
|
+
):
|
|
2644
|
+
# Check we have 5 elements already present in database
|
|
2645
|
+
assert CachedElement.select().count() == 5
|
|
2646
|
+
|
|
2647
|
+
# Query database through cache
|
|
2648
|
+
elements = mock_elements_worker_with_cache.list_element_parents(**filters)
|
|
2649
|
+
assert elements.count() == 1
|
|
2650
|
+
for parent in elements.order_by("id"):
|
|
2651
|
+
assert parent.id == UUID(expected_id)
|
|
2652
|
+
|
|
2653
|
+
# Check the worker never hits the API for elements
|
|
2654
|
+
assert len(responses.calls) == len(BASE_API_CALLS)
|
|
2655
|
+
assert [
|
|
2656
|
+
(call.request.method, call.request.url) for call in responses.calls
|
|
2657
|
+
] == BASE_API_CALLS
|
|
2658
|
+
|
|
2659
|
+
|
|
2660
|
+
@pytest.mark.usefixtures("_mock_cached_elements")
|
|
2661
|
+
@pytest.mark.parametrize(
|
|
2662
|
+
("filters", "expected_id"),
|
|
2663
|
+
[
|
|
2373
2664
|
# Filter on element and worker version
|
|
2374
2665
|
(
|
|
2375
2666
|
{
|
|
@@ -2395,25 +2686,9 @@ def test_list_element_parents_with_cache_unhandled_param(
|
|
|
2395
2686
|
},
|
|
2396
2687
|
"99999999-9999-9999-9999-999999999999",
|
|
2397
2688
|
),
|
|
2398
|
-
# Filter on element and worker run
|
|
2399
|
-
(
|
|
2400
|
-
{
|
|
2401
|
-
"element": CachedElement(id="22222222-2222-2222-2222-222222222222"),
|
|
2402
|
-
"worker_run": "56785678-5678-5678-5678-567856785678",
|
|
2403
|
-
},
|
|
2404
|
-
"12341234-1234-1234-1234-123412341234",
|
|
2405
|
-
),
|
|
2406
|
-
# Filter on element, manual worker run
|
|
2407
|
-
(
|
|
2408
|
-
{
|
|
2409
|
-
"element": CachedElement(id="12341234-1234-1234-1234-123412341234"),
|
|
2410
|
-
"worker_run": False,
|
|
2411
|
-
},
|
|
2412
|
-
"99999999-9999-9999-9999-999999999999",
|
|
2413
|
-
),
|
|
2414
2689
|
],
|
|
2415
2690
|
)
|
|
2416
|
-
def
|
|
2691
|
+
def test_list_element_parents_with_cache_deprecation(
|
|
2417
2692
|
responses,
|
|
2418
2693
|
mock_elements_worker_with_cache,
|
|
2419
2694
|
filters,
|
|
@@ -2422,8 +2697,11 @@ def test_list_element_parents_with_cache(
|
|
|
2422
2697
|
# Check we have 5 elements already present in database
|
|
2423
2698
|
assert CachedElement.select().count() == 5
|
|
2424
2699
|
|
|
2425
|
-
|
|
2426
|
-
|
|
2700
|
+
with pytest.deprecated_call(
|
|
2701
|
+
match="`worker_version` usage is deprecated. Consider using `worker_run` instead."
|
|
2702
|
+
):
|
|
2703
|
+
# Query database through cache
|
|
2704
|
+
elements = mock_elements_worker_with_cache.list_element_parents(**filters)
|
|
2427
2705
|
assert elements.count() == 1
|
|
2428
2706
|
for parent in elements.order_by("id"):
|
|
2429
2707
|
assert parent.id == UUID(expected_id)
|
|
@@ -708,7 +708,7 @@ def test_create_transcription_entity_with_confidence_with_cache(
|
|
|
708
708
|
]
|
|
709
709
|
|
|
710
710
|
|
|
711
|
-
def
|
|
711
|
+
def test_list_transcription_entities_deprecation(fake_dummy_worker):
|
|
712
712
|
transcription = Transcription({"id": "fake_transcription_id"})
|
|
713
713
|
worker_version = "worker_version_id"
|
|
714
714
|
fake_dummy_worker.api_client.add_response(
|
|
@@ -717,8 +717,28 @@ def test_list_transcription_entities(fake_dummy_worker):
|
|
|
717
717
|
worker_version=worker_version,
|
|
718
718
|
response={"id": "entity_id"},
|
|
719
719
|
)
|
|
720
|
+
with pytest.deprecated_call(
|
|
721
|
+
match="`worker_version` usage is deprecated. Consider using `worker_run` instead."
|
|
722
|
+
):
|
|
723
|
+
assert fake_dummy_worker.list_transcription_entities(
|
|
724
|
+
transcription, worker_version=worker_version
|
|
725
|
+
) == {"id": "entity_id"}
|
|
726
|
+
|
|
727
|
+
assert len(fake_dummy_worker.api_client.history) == 1
|
|
728
|
+
assert len(fake_dummy_worker.api_client.responses) == 0
|
|
729
|
+
|
|
730
|
+
|
|
731
|
+
def test_list_transcription_entities(fake_dummy_worker):
|
|
732
|
+
transcription = Transcription({"id": "fake_transcription_id"})
|
|
733
|
+
worker_run = "worker_run_id"
|
|
734
|
+
fake_dummy_worker.api_client.add_response(
|
|
735
|
+
"ListTranscriptionEntities",
|
|
736
|
+
id=transcription.id,
|
|
737
|
+
worker_run=worker_run,
|
|
738
|
+
response={"id": "entity_id"},
|
|
739
|
+
)
|
|
720
740
|
assert fake_dummy_worker.list_transcription_entities(
|
|
721
|
-
transcription,
|
|
741
|
+
transcription, worker_run=worker_run
|
|
722
742
|
) == {"id": "entity_id"}
|
|
723
743
|
|
|
724
744
|
assert len(fake_dummy_worker.api_client.history) == 1
|