arkindex-base-worker 0.3.6rc5__py3-none-any.whl → 0.3.7.post1__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.6rc5.dist-info → arkindex_base_worker-0.3.7.post1.dist-info}/METADATA +14 -16
- arkindex_base_worker-0.3.7.post1.dist-info/RECORD +47 -0
- {arkindex_base_worker-0.3.6rc5.dist-info → arkindex_base_worker-0.3.7.post1.dist-info}/WHEEL +1 -1
- {arkindex_base_worker-0.3.6rc5.dist-info → arkindex_base_worker-0.3.7.post1.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 +25 -45
- arkindex_worker/worker/classification.py +18 -25
- arkindex_worker/worker/dataset.py +24 -18
- arkindex_worker/worker/element.py +45 -6
- arkindex_worker/worker/entity.py +35 -4
- arkindex_worker/worker/metadata.py +21 -11
- arkindex_worker/worker/training.py +16 -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 +15 -7
- tests/test_base_worker.py +0 -6
- tests/test_dataset_worker.py +292 -410
- 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 +227 -61
- 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.6rc5.dist-info/RECORD +0 -41
- {arkindex_base_worker-0.3.6rc5.dist-info → arkindex_base_worker-0.3.7.post1.dist-info}/LICENSE +0 -0
|
@@ -1770,13 +1770,11 @@ def test_list_element_children_wrong_with_metadata(mock_elements_worker):
|
|
|
1770
1770
|
@pytest.mark.parametrize(
|
|
1771
1771
|
("param", "value"),
|
|
1772
1772
|
[
|
|
1773
|
-
("worker_version", 1234),
|
|
1774
1773
|
("worker_run", 1234),
|
|
1775
|
-
("transcription_worker_version", 1234),
|
|
1776
1774
|
("transcription_worker_run", 1234),
|
|
1777
1775
|
],
|
|
1778
1776
|
)
|
|
1779
|
-
def
|
|
1777
|
+
def test_list_element_children_wrong_worker_run(mock_elements_worker, param, value):
|
|
1780
1778
|
elt = Element({"id": "12341234-1234-1234-1234-123412341234"})
|
|
1781
1779
|
|
|
1782
1780
|
with pytest.raises(AssertionError, match=f"{param} should be of type str or bool"):
|
|
@@ -1786,16 +1784,39 @@ def test_list_element_children_wrong_worker_version(mock_elements_worker, param,
|
|
|
1786
1784
|
)
|
|
1787
1785
|
|
|
1788
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
|
+
|
|
1789
1812
|
@pytest.mark.parametrize(
|
|
1790
1813
|
"param",
|
|
1791
1814
|
[
|
|
1792
|
-
"worker_version",
|
|
1793
1815
|
"worker_run",
|
|
1794
|
-
"transcription_worker_version",
|
|
1795
1816
|
"transcription_worker_run",
|
|
1796
1817
|
],
|
|
1797
1818
|
)
|
|
1798
|
-
def
|
|
1819
|
+
def test_list_element_children_wrong_bool_worker_run(mock_elements_worker, param):
|
|
1799
1820
|
elt = Element({"id": "12341234-1234-1234-1234-123412341234"})
|
|
1800
1821
|
|
|
1801
1822
|
with pytest.raises(
|
|
@@ -1807,6 +1828,33 @@ def test_list_element_children_wrong_bool_worker_version(mock_elements_worker, p
|
|
|
1807
1828
|
)
|
|
1808
1829
|
|
|
1809
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
|
+
|
|
1810
1858
|
def test_list_element_children_api_error(responses, mock_elements_worker):
|
|
1811
1859
|
elt = Element({"id": "12341234-1234-1234-1234-123412341234"})
|
|
1812
1860
|
responses.add(
|
|
@@ -1942,10 +1990,15 @@ def test_list_element_children_manual_worker_version(responses, mock_elements_wo
|
|
|
1942
1990
|
},
|
|
1943
1991
|
)
|
|
1944
1992
|
|
|
1945
|
-
|
|
1946
|
-
|
|
1993
|
+
with pytest.deprecated_call(
|
|
1994
|
+
match="`worker_version` usage is deprecated. Consider using `worker_run` instead."
|
|
1947
1995
|
):
|
|
1948
|
-
|
|
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]
|
|
1949
2002
|
|
|
1950
2003
|
assert len(responses.calls) == len(BASE_API_CALLS) + 1
|
|
1951
2004
|
assert [
|
|
@@ -2038,56 +2091,84 @@ def test_list_element_children_with_cache_unhandled_param(
|
|
|
2038
2091
|
},
|
|
2039
2092
|
("22222222-2222-2222-2222-222222222222",),
|
|
2040
2093
|
),
|
|
2041
|
-
# Filter on element and worker
|
|
2094
|
+
# Filter on element and worker run should give second
|
|
2042
2095
|
(
|
|
2043
2096
|
{
|
|
2044
2097
|
"element": CachedElement(id="12341234-1234-1234-1234-123412341234"),
|
|
2045
|
-
"
|
|
2098
|
+
"worker_run": "56785678-5678-5678-5678-567856785678",
|
|
2046
2099
|
},
|
|
2047
|
-
(
|
|
2048
|
-
"11111111-1111-1111-1111-111111111111",
|
|
2049
|
-
"22222222-2222-2222-2222-222222222222",
|
|
2050
|
-
),
|
|
2100
|
+
("22222222-2222-2222-2222-222222222222",),
|
|
2051
2101
|
),
|
|
2052
|
-
# Filter on element,
|
|
2102
|
+
# Filter on element, manual worker run should give first and third
|
|
2053
2103
|
(
|
|
2054
2104
|
{
|
|
2055
2105
|
"element": CachedElement(id="12341234-1234-1234-1234-123412341234"),
|
|
2056
|
-
"
|
|
2057
|
-
"worker_version": "56785678-5678-5678-5678-567856785678",
|
|
2106
|
+
"worker_run": False,
|
|
2058
2107
|
},
|
|
2059
|
-
(
|
|
2108
|
+
(
|
|
2109
|
+
"11111111-1111-1111-1111-111111111111",
|
|
2110
|
+
"33333333-3333-3333-3333-333333333333",
|
|
2111
|
+
),
|
|
2060
2112
|
),
|
|
2061
|
-
|
|
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
|
|
2062
2142
|
(
|
|
2063
2143
|
{
|
|
2064
2144
|
"element": CachedElement(id="12341234-1234-1234-1234-123412341234"),
|
|
2065
|
-
"worker_version":
|
|
2145
|
+
"worker_version": "56785678-5678-5678-5678-567856785678",
|
|
2066
2146
|
},
|
|
2067
|
-
(
|
|
2147
|
+
(
|
|
2148
|
+
"11111111-1111-1111-1111-111111111111",
|
|
2149
|
+
"22222222-2222-2222-2222-222222222222",
|
|
2150
|
+
),
|
|
2068
2151
|
),
|
|
2069
|
-
# Filter on element and worker
|
|
2152
|
+
# Filter on element, type double_page and worker version
|
|
2070
2153
|
(
|
|
2071
2154
|
{
|
|
2072
2155
|
"element": CachedElement(id="12341234-1234-1234-1234-123412341234"),
|
|
2073
|
-
"
|
|
2156
|
+
"type": "page",
|
|
2157
|
+
"worker_version": "56785678-5678-5678-5678-567856785678",
|
|
2074
2158
|
},
|
|
2075
2159
|
("22222222-2222-2222-2222-222222222222",),
|
|
2076
2160
|
),
|
|
2077
|
-
# Filter on element, manual worker
|
|
2161
|
+
# Filter on element, manual worker version
|
|
2078
2162
|
(
|
|
2079
2163
|
{
|
|
2080
2164
|
"element": CachedElement(id="12341234-1234-1234-1234-123412341234"),
|
|
2081
|
-
"
|
|
2165
|
+
"worker_version": False,
|
|
2082
2166
|
},
|
|
2083
|
-
(
|
|
2084
|
-
"11111111-1111-1111-1111-111111111111",
|
|
2085
|
-
"33333333-3333-3333-3333-333333333333",
|
|
2086
|
-
),
|
|
2167
|
+
("33333333-3333-3333-3333-333333333333",),
|
|
2087
2168
|
),
|
|
2088
2169
|
],
|
|
2089
2170
|
)
|
|
2090
|
-
def
|
|
2171
|
+
def test_list_element_children_with_cache_deprecation(
|
|
2091
2172
|
responses,
|
|
2092
2173
|
mock_elements_worker_with_cache,
|
|
2093
2174
|
filters,
|
|
@@ -2096,8 +2177,11 @@ def test_list_element_children_with_cache(
|
|
|
2096
2177
|
# Check we have 5 elements already present in database
|
|
2097
2178
|
assert CachedElement.select().count() == 5
|
|
2098
2179
|
|
|
2099
|
-
|
|
2100
|
-
|
|
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)
|
|
2101
2185
|
assert elements.count() == len(expected_ids)
|
|
2102
2186
|
for child, expected_id in zip(elements.order_by("id"), expected_ids, strict=True):
|
|
2103
2187
|
assert child.id == UUID(expected_id)
|
|
@@ -2218,13 +2302,11 @@ def test_list_element_parents_wrong_with_metadata(mock_elements_worker):
|
|
|
2218
2302
|
@pytest.mark.parametrize(
|
|
2219
2303
|
("param", "value"),
|
|
2220
2304
|
[
|
|
2221
|
-
("worker_version", 1234),
|
|
2222
2305
|
("worker_run", 1234),
|
|
2223
|
-
("transcription_worker_version", 1234),
|
|
2224
2306
|
("transcription_worker_run", 1234),
|
|
2225
2307
|
],
|
|
2226
2308
|
)
|
|
2227
|
-
def
|
|
2309
|
+
def test_list_element_parents_wrong_worker_run(mock_elements_worker, param, value):
|
|
2228
2310
|
elt = Element({"id": "12341234-1234-1234-1234-123412341234"})
|
|
2229
2311
|
|
|
2230
2312
|
with pytest.raises(AssertionError, match=f"{param} should be of type str or bool"):
|
|
@@ -2234,16 +2316,39 @@ def test_list_element_parents_wrong_worker_version(mock_elements_worker, param,
|
|
|
2234
2316
|
)
|
|
2235
2317
|
|
|
2236
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
|
+
|
|
2237
2344
|
@pytest.mark.parametrize(
|
|
2238
2345
|
"param",
|
|
2239
2346
|
[
|
|
2240
|
-
"worker_version",
|
|
2241
2347
|
"worker_run",
|
|
2242
|
-
"transcription_worker_version",
|
|
2243
2348
|
"transcription_worker_run",
|
|
2244
2349
|
],
|
|
2245
2350
|
)
|
|
2246
|
-
def
|
|
2351
|
+
def test_list_element_parents_wrong_bool_worker_run(mock_elements_worker, param):
|
|
2247
2352
|
elt = Element({"id": "12341234-1234-1234-1234-123412341234"})
|
|
2248
2353
|
|
|
2249
2354
|
with pytest.raises(
|
|
@@ -2255,6 +2360,33 @@ def test_list_element_parents_wrong_bool_worker_version(mock_elements_worker, pa
|
|
|
2255
2360
|
)
|
|
2256
2361
|
|
|
2257
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
|
+
|
|
2258
2390
|
def test_list_element_parents_api_error(responses, mock_elements_worker):
|
|
2259
2391
|
elt = Element({"id": "12341234-1234-1234-1234-123412341234"})
|
|
2260
2392
|
responses.add(
|
|
@@ -2390,10 +2522,13 @@ def test_list_element_parents_manual_worker_version(responses, mock_elements_wor
|
|
|
2390
2522
|
},
|
|
2391
2523
|
)
|
|
2392
2524
|
|
|
2393
|
-
|
|
2394
|
-
|
|
2525
|
+
with pytest.deprecated_call(
|
|
2526
|
+
match="`worker_version` usage is deprecated. Consider using `worker_run` instead."
|
|
2395
2527
|
):
|
|
2396
|
-
|
|
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]
|
|
2397
2532
|
|
|
2398
2533
|
assert len(responses.calls) == len(BASE_API_CALLS) + 1
|
|
2399
2534
|
assert [
|
|
@@ -2482,6 +2617,50 @@ def test_list_element_parents_with_cache_unhandled_param(
|
|
|
2482
2617
|
},
|
|
2483
2618
|
"12341234-1234-1234-1234-123412341234",
|
|
2484
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
|
+
[
|
|
2485
2664
|
# Filter on element and worker version
|
|
2486
2665
|
(
|
|
2487
2666
|
{
|
|
@@ -2507,25 +2686,9 @@ def test_list_element_parents_with_cache_unhandled_param(
|
|
|
2507
2686
|
},
|
|
2508
2687
|
"99999999-9999-9999-9999-999999999999",
|
|
2509
2688
|
),
|
|
2510
|
-
# Filter on element and worker run
|
|
2511
|
-
(
|
|
2512
|
-
{
|
|
2513
|
-
"element": CachedElement(id="22222222-2222-2222-2222-222222222222"),
|
|
2514
|
-
"worker_run": "56785678-5678-5678-5678-567856785678",
|
|
2515
|
-
},
|
|
2516
|
-
"12341234-1234-1234-1234-123412341234",
|
|
2517
|
-
),
|
|
2518
|
-
# Filter on element, manual worker run
|
|
2519
|
-
(
|
|
2520
|
-
{
|
|
2521
|
-
"element": CachedElement(id="12341234-1234-1234-1234-123412341234"),
|
|
2522
|
-
"worker_run": False,
|
|
2523
|
-
},
|
|
2524
|
-
"99999999-9999-9999-9999-999999999999",
|
|
2525
|
-
),
|
|
2526
2689
|
],
|
|
2527
2690
|
)
|
|
2528
|
-
def
|
|
2691
|
+
def test_list_element_parents_with_cache_deprecation(
|
|
2529
2692
|
responses,
|
|
2530
2693
|
mock_elements_worker_with_cache,
|
|
2531
2694
|
filters,
|
|
@@ -2534,8 +2697,11 @@ def test_list_element_parents_with_cache(
|
|
|
2534
2697
|
# Check we have 5 elements already present in database
|
|
2535
2698
|
assert CachedElement.select().count() == 5
|
|
2536
2699
|
|
|
2537
|
-
|
|
2538
|
-
|
|
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)
|
|
2539
2705
|
assert elements.count() == 1
|
|
2540
2706
|
for parent in elements.order_by("id"):
|
|
2541
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
|
|
@@ -259,7 +259,7 @@ def test_create_metadata_cached_element(responses, mock_elements_worker_with_cac
|
|
|
259
259
|
],
|
|
260
260
|
],
|
|
261
261
|
)
|
|
262
|
-
def
|
|
262
|
+
def test_create_metadata_bulk(responses, mock_elements_worker, metadata_list):
|
|
263
263
|
element = Element({"id": "12341234-1234-1234-1234-123412341234"})
|
|
264
264
|
responses.add(
|
|
265
265
|
responses.POST,
|
|
@@ -280,7 +280,7 @@ def test_create_metadatas(responses, mock_elements_worker, metadata_list):
|
|
|
280
280
|
},
|
|
281
281
|
)
|
|
282
282
|
|
|
283
|
-
created_metadata_list = mock_elements_worker.
|
|
283
|
+
created_metadata_list = mock_elements_worker.create_metadata_bulk(
|
|
284
284
|
element, metadata_list
|
|
285
285
|
)
|
|
286
286
|
|
|
@@ -327,7 +327,7 @@ def test_create_metadatas(responses, mock_elements_worker, metadata_list):
|
|
|
327
327
|
],
|
|
328
328
|
],
|
|
329
329
|
)
|
|
330
|
-
def
|
|
330
|
+
def test_create_metadata_bulk_cached_element(
|
|
331
331
|
responses, mock_elements_worker_with_cache, metadata_list
|
|
332
332
|
):
|
|
333
333
|
element = CachedElement.create(
|
|
@@ -352,7 +352,7 @@ def test_create_metadatas_cached_element(
|
|
|
352
352
|
},
|
|
353
353
|
)
|
|
354
354
|
|
|
355
|
-
created_metadata_list = mock_elements_worker_with_cache.
|
|
355
|
+
created_metadata_list = mock_elements_worker_with_cache.create_metadata_bulk(
|
|
356
356
|
element, metadata_list
|
|
357
357
|
)
|
|
358
358
|
|
|
@@ -386,7 +386,7 @@ def test_create_metadatas_cached_element(
|
|
|
386
386
|
|
|
387
387
|
|
|
388
388
|
@pytest.mark.parametrize("wrong_element", [None, "not_element_type", 1234, 12.5])
|
|
389
|
-
def
|
|
389
|
+
def test_create_metadata_bulk_wrong_element(mock_elements_worker, wrong_element):
|
|
390
390
|
wrong_metadata_list = [
|
|
391
391
|
{"type": MetaType.Text, "name": "fake_name", "value": "fake_value"}
|
|
392
392
|
]
|
|
@@ -394,13 +394,13 @@ def test_create_metadatas_wrong_element(mock_elements_worker, wrong_element):
|
|
|
394
394
|
AssertionError,
|
|
395
395
|
match="element shouldn't be null and should be of type Element or CachedElement",
|
|
396
396
|
):
|
|
397
|
-
mock_elements_worker.
|
|
398
|
-
element=wrong_element,
|
|
397
|
+
mock_elements_worker.create_metadata_bulk(
|
|
398
|
+
element=wrong_element, metadata_list=wrong_metadata_list
|
|
399
399
|
)
|
|
400
400
|
|
|
401
401
|
|
|
402
402
|
@pytest.mark.parametrize("wrong_type", [None, "not_metadata_type", 1234, 12.5])
|
|
403
|
-
def
|
|
403
|
+
def test_create_metadata_bulk_wrong_type(mock_elements_worker, wrong_type):
|
|
404
404
|
element = Element({"id": "12341234-1234-1234-1234-123412341234"})
|
|
405
405
|
wrong_metadata_list = [
|
|
406
406
|
{"type": wrong_type, "name": "fake_name", "value": "fake_value"}
|
|
@@ -408,13 +408,13 @@ def test_create_metadatas_wrong_type(mock_elements_worker, wrong_type):
|
|
|
408
408
|
with pytest.raises(
|
|
409
409
|
AssertionError, match="type shouldn't be null and should be of type MetaType"
|
|
410
410
|
):
|
|
411
|
-
mock_elements_worker.
|
|
412
|
-
element=element,
|
|
411
|
+
mock_elements_worker.create_metadata_bulk(
|
|
412
|
+
element=element, metadata_list=wrong_metadata_list
|
|
413
413
|
)
|
|
414
414
|
|
|
415
415
|
|
|
416
416
|
@pytest.mark.parametrize("wrong_name", [None, 1234, 12.5, [1, 2, 3, 4]])
|
|
417
|
-
def
|
|
417
|
+
def test_create_metadata_bulk_wrong_name(mock_elements_worker, wrong_name):
|
|
418
418
|
element = Element({"id": "fake_element_id"})
|
|
419
419
|
wrong_metadata_list = [
|
|
420
420
|
{"type": MetaType.Text, "name": wrong_name, "value": "fake_value"}
|
|
@@ -422,13 +422,13 @@ def test_create_metadatas_wrong_name(mock_elements_worker, wrong_name):
|
|
|
422
422
|
with pytest.raises(
|
|
423
423
|
AssertionError, match="name shouldn't be null and should be of type str"
|
|
424
424
|
):
|
|
425
|
-
mock_elements_worker.
|
|
426
|
-
element=element,
|
|
425
|
+
mock_elements_worker.create_metadata_bulk(
|
|
426
|
+
element=element, metadata_list=wrong_metadata_list
|
|
427
427
|
)
|
|
428
428
|
|
|
429
429
|
|
|
430
430
|
@pytest.mark.parametrize("wrong_value", [None, [1, 2, 3, 4]])
|
|
431
|
-
def
|
|
431
|
+
def test_create_metadata_bulk_wrong_value(mock_elements_worker, wrong_value):
|
|
432
432
|
element = Element({"id": "fake_element_id"})
|
|
433
433
|
wrong_metadata_list = [
|
|
434
434
|
{"type": MetaType.Text, "name": "fake_name", "value": wrong_value}
|
|
@@ -439,13 +439,13 @@ def test_create_metadatas_wrong_value(mock_elements_worker, wrong_value):
|
|
|
439
439
|
"value shouldn't be null and should be of type (str or float or int)"
|
|
440
440
|
),
|
|
441
441
|
):
|
|
442
|
-
mock_elements_worker.
|
|
443
|
-
element=element,
|
|
442
|
+
mock_elements_worker.create_metadata_bulk(
|
|
443
|
+
element=element, metadata_list=wrong_metadata_list
|
|
444
444
|
)
|
|
445
445
|
|
|
446
446
|
|
|
447
447
|
@pytest.mark.parametrize("wrong_entity", [[1, 2, 3, 4], 1234, 12.5])
|
|
448
|
-
def
|
|
448
|
+
def test_create_metadata_bulk_wrong_entity(mock_elements_worker, wrong_entity):
|
|
449
449
|
element = Element({"id": "fake_element_id"})
|
|
450
450
|
wrong_metadata_list = [
|
|
451
451
|
{
|
|
@@ -456,12 +456,12 @@ def test_create_metadatas_wrong_entity(mock_elements_worker, wrong_entity):
|
|
|
456
456
|
}
|
|
457
457
|
]
|
|
458
458
|
with pytest.raises(AssertionError, match="entity_id should be None or a str"):
|
|
459
|
-
mock_elements_worker.
|
|
460
|
-
element=element,
|
|
459
|
+
mock_elements_worker.create_metadata_bulk(
|
|
460
|
+
element=element, metadata_list=wrong_metadata_list
|
|
461
461
|
)
|
|
462
462
|
|
|
463
463
|
|
|
464
|
-
def
|
|
464
|
+
def test_create_metadata_bulk_api_error(responses, mock_elements_worker):
|
|
465
465
|
element = Element({"id": "12341234-1234-1234-1234-123412341234"})
|
|
466
466
|
metadata_list = [
|
|
467
467
|
{
|
|
@@ -478,7 +478,7 @@ def test_create_metadatas_api_error(responses, mock_elements_worker):
|
|
|
478
478
|
)
|
|
479
479
|
|
|
480
480
|
with pytest.raises(ErrorResponse):
|
|
481
|
-
mock_elements_worker.
|
|
481
|
+
mock_elements_worker.create_metadata_bulk(element, metadata_list)
|
|
482
482
|
|
|
483
483
|
assert len(responses.calls) == len(BASE_API_CALLS) + 5
|
|
484
484
|
assert [
|
|
@@ -508,14 +508,23 @@ def test_create_metadatas_api_error(responses, mock_elements_worker):
|
|
|
508
508
|
]
|
|
509
509
|
|
|
510
510
|
|
|
511
|
+
def test_list_element_metadata_wrong_load_parents(fake_dummy_worker):
|
|
512
|
+
element = Element({"id": "element_id"})
|
|
513
|
+
with pytest.raises(AssertionError, match="load_parents should be of type bool"):
|
|
514
|
+
fake_dummy_worker.list_element_metadata(
|
|
515
|
+
element=element,
|
|
516
|
+
load_parents="not bool",
|
|
517
|
+
)
|
|
518
|
+
|
|
519
|
+
|
|
511
520
|
def test_list_element_metadata(fake_dummy_worker):
|
|
512
521
|
element = Element({"id": "element_id"})
|
|
513
522
|
fake_dummy_worker.api_client.add_response(
|
|
514
523
|
"ListElementMetaData",
|
|
515
524
|
id=element.id,
|
|
516
|
-
response={"id": "metadata_id"},
|
|
525
|
+
response=[{"id": "metadata_id"}],
|
|
517
526
|
)
|
|
518
|
-
assert fake_dummy_worker.list_element_metadata(element) == {"id": "metadata_id"}
|
|
527
|
+
assert fake_dummy_worker.list_element_metadata(element) == [{"id": "metadata_id"}]
|
|
519
528
|
|
|
520
529
|
assert len(fake_dummy_worker.api_client.history) == 1
|
|
521
530
|
assert len(fake_dummy_worker.api_client.responses) == 0
|
|
@@ -527,11 +536,28 @@ def test_list_element_metadata_cached_element(mock_elements_worker_with_cache):
|
|
|
527
536
|
mock_elements_worker_with_cache.api_client.add_response(
|
|
528
537
|
"ListElementMetaData",
|
|
529
538
|
id="element_id",
|
|
530
|
-
response={"id": "metadata_id"},
|
|
539
|
+
response=[{"id": "metadata_id"}],
|
|
531
540
|
)
|
|
532
|
-
assert mock_elements_worker_with_cache.list_element_metadata(element) ==
|
|
533
|
-
"id": "metadata_id"
|
|
534
|
-
|
|
541
|
+
assert mock_elements_worker_with_cache.list_element_metadata(element) == [
|
|
542
|
+
{"id": "metadata_id"}
|
|
543
|
+
]
|
|
535
544
|
|
|
536
545
|
assert len(mock_elements_worker_with_cache.api_client.history) == 1
|
|
537
546
|
assert len(mock_elements_worker_with_cache.api_client.responses) == 0
|
|
547
|
+
|
|
548
|
+
|
|
549
|
+
def test_list_element_metadata_with_load_parents(fake_dummy_worker):
|
|
550
|
+
element = Element({"id": "element_id"})
|
|
551
|
+
fake_dummy_worker.api_client.add_response(
|
|
552
|
+
"ListElementMetaData",
|
|
553
|
+
id=element.id,
|
|
554
|
+
load_parents=True,
|
|
555
|
+
response=[{"id": "metadata_id"}, {"id": "parent_metadata_id"}],
|
|
556
|
+
)
|
|
557
|
+
assert fake_dummy_worker.list_element_metadata(element, load_parents=True) == [
|
|
558
|
+
{"id": "metadata_id"},
|
|
559
|
+
{"id": "parent_metadata_id"},
|
|
560
|
+
]
|
|
561
|
+
|
|
562
|
+
assert len(fake_dummy_worker.api_client.history) == 1
|
|
563
|
+
assert len(fake_dummy_worker.api_client.responses) == 0
|