arkindex-base-worker 0.4.0b3__py3-none-any.whl → 0.4.0rc1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {arkindex_base_worker-0.4.0b3.dist-info → arkindex_base_worker-0.4.0rc1.dist-info}/METADATA +3 -2
- {arkindex_base_worker-0.4.0b3.dist-info → arkindex_base_worker-0.4.0rc1.dist-info}/RECORD +17 -17
- {arkindex_base_worker-0.4.0b3.dist-info → arkindex_base_worker-0.4.0rc1.dist-info}/WHEEL +1 -1
- arkindex_worker/image.py +118 -0
- arkindex_worker/worker/__init__.py +4 -50
- arkindex_worker/worker/base.py +24 -1
- arkindex_worker/worker/element.py +243 -75
- arkindex_worker/worker/transcription.py +50 -50
- tests/conftest.py +2 -21
- tests/test_base_worker.py +203 -2
- tests/test_elements_worker/test_elements.py +443 -16
- tests/test_elements_worker/test_worker.py +0 -200
- tests/test_image.py +248 -6
- tests/test_merge.py +0 -1
- tests/test_utils.py +2 -4
- {arkindex_base_worker-0.4.0b3.dist-info → arkindex_base_worker-0.4.0rc1.dist-info}/LICENSE +0 -0
- {arkindex_base_worker-0.4.0b3.dist-info → arkindex_base_worker-0.4.0rc1.dist-info}/top_level.txt +0 -0
|
@@ -109,7 +109,7 @@ def test_create_missing_types(responses, mock_elements_worker):
|
|
|
109
109
|
)
|
|
110
110
|
|
|
111
111
|
|
|
112
|
-
def
|
|
112
|
+
def test_get_elements_elements_list_arg_wrong_type(
|
|
113
113
|
monkeypatch, tmp_path, mock_elements_worker
|
|
114
114
|
):
|
|
115
115
|
elements_path = tmp_path / "elements.json"
|
|
@@ -120,10 +120,10 @@ def test_list_elements_elements_list_arg_wrong_type(
|
|
|
120
120
|
worker.configure()
|
|
121
121
|
|
|
122
122
|
with pytest.raises(AssertionError, match="Elements list must be a list"):
|
|
123
|
-
worker.
|
|
123
|
+
worker.get_elements()
|
|
124
124
|
|
|
125
125
|
|
|
126
|
-
def
|
|
126
|
+
def test_get_elements_elements_list_arg_empty_list(
|
|
127
127
|
monkeypatch, tmp_path, mock_elements_worker
|
|
128
128
|
):
|
|
129
129
|
elements_path = tmp_path / "elements.json"
|
|
@@ -134,10 +134,10 @@ def test_list_elements_elements_list_arg_empty_list(
|
|
|
134
134
|
worker.configure()
|
|
135
135
|
|
|
136
136
|
with pytest.raises(AssertionError, match="No elements in elements list"):
|
|
137
|
-
worker.
|
|
137
|
+
worker.get_elements()
|
|
138
138
|
|
|
139
139
|
|
|
140
|
-
def
|
|
140
|
+
def test_get_elements_elements_list_arg_missing_id(
|
|
141
141
|
monkeypatch, tmp_path, mock_elements_worker
|
|
142
142
|
):
|
|
143
143
|
elements_path = tmp_path / "elements.json"
|
|
@@ -147,12 +147,12 @@ def test_list_elements_elements_list_arg_missing_id(
|
|
|
147
147
|
worker = ElementsWorker()
|
|
148
148
|
worker.configure()
|
|
149
149
|
|
|
150
|
-
elt_list = worker.
|
|
150
|
+
elt_list = worker.get_elements()
|
|
151
151
|
|
|
152
152
|
assert elt_list == []
|
|
153
153
|
|
|
154
154
|
|
|
155
|
-
def
|
|
155
|
+
def test_get_elements_elements_list_arg_not_uuid(
|
|
156
156
|
monkeypatch, tmp_path, mock_elements_worker
|
|
157
157
|
):
|
|
158
158
|
elements_path = tmp_path / "elements.json"
|
|
@@ -175,10 +175,10 @@ def test_list_elements_elements_list_arg_not_uuid(
|
|
|
175
175
|
Exception,
|
|
176
176
|
match="These element IDs are invalid: volumeid, pageid, actid, surfaceid",
|
|
177
177
|
):
|
|
178
|
-
worker.
|
|
178
|
+
worker.get_elements()
|
|
179
179
|
|
|
180
180
|
|
|
181
|
-
def
|
|
181
|
+
def test_get_elements_elements_list_arg(monkeypatch, tmp_path, mock_elements_worker):
|
|
182
182
|
elements_path = tmp_path / "elements.json"
|
|
183
183
|
elements_path.write_text(
|
|
184
184
|
json.dumps(
|
|
@@ -194,7 +194,7 @@ def test_list_elements_elements_list_arg(monkeypatch, tmp_path, mock_elements_wo
|
|
|
194
194
|
worker = ElementsWorker()
|
|
195
195
|
worker.configure()
|
|
196
196
|
|
|
197
|
-
elt_list = worker.
|
|
197
|
+
elt_list = worker.get_elements()
|
|
198
198
|
|
|
199
199
|
assert elt_list == [
|
|
200
200
|
"11111111-1111-1111-1111-111111111111",
|
|
@@ -203,7 +203,7 @@ def test_list_elements_elements_list_arg(monkeypatch, tmp_path, mock_elements_wo
|
|
|
203
203
|
]
|
|
204
204
|
|
|
205
205
|
|
|
206
|
-
def
|
|
206
|
+
def test_get_elements_element_arg_not_uuid(mocker, mock_elements_worker):
|
|
207
207
|
mocker.patch(
|
|
208
208
|
"arkindex_worker.worker.base.argparse.ArgumentParser.parse_args",
|
|
209
209
|
return_value=Namespace(
|
|
@@ -221,10 +221,10 @@ def test_list_elements_element_arg_not_uuid(mocker, mock_elements_worker):
|
|
|
221
221
|
with pytest.raises(
|
|
222
222
|
Exception, match="These element IDs are invalid: volumeid, pageid"
|
|
223
223
|
):
|
|
224
|
-
worker.
|
|
224
|
+
worker.get_elements()
|
|
225
225
|
|
|
226
226
|
|
|
227
|
-
def
|
|
227
|
+
def test_get_elements_element_arg(mocker, mock_elements_worker):
|
|
228
228
|
mocker.patch(
|
|
229
229
|
"arkindex_worker.worker.base.argparse.ArgumentParser.parse_args",
|
|
230
230
|
return_value=Namespace(
|
|
@@ -242,7 +242,7 @@ def test_list_elements_element_arg(mocker, mock_elements_worker):
|
|
|
242
242
|
worker = ElementsWorker()
|
|
243
243
|
worker.configure()
|
|
244
244
|
|
|
245
|
-
elt_list = worker.
|
|
245
|
+
elt_list = worker.get_elements()
|
|
246
246
|
|
|
247
247
|
assert elt_list == [
|
|
248
248
|
"11111111-1111-1111-1111-111111111111",
|
|
@@ -250,7 +250,7 @@ def test_list_elements_element_arg(mocker, mock_elements_worker):
|
|
|
250
250
|
]
|
|
251
251
|
|
|
252
252
|
|
|
253
|
-
def
|
|
253
|
+
def test_get_elements_both_args_error(mocker, mock_elements_worker, tmp_path):
|
|
254
254
|
elements_path = tmp_path / "elements.json"
|
|
255
255
|
elements_path.write_text(
|
|
256
256
|
json.dumps(
|
|
@@ -279,7 +279,7 @@ def test_list_elements_both_args_error(mocker, mock_elements_worker, tmp_path):
|
|
|
279
279
|
with pytest.raises(
|
|
280
280
|
AssertionError, match="elements-list and element CLI args shouldn't be both set"
|
|
281
281
|
):
|
|
282
|
-
worker.
|
|
282
|
+
worker.get_elements()
|
|
283
283
|
|
|
284
284
|
|
|
285
285
|
def test_database_arg(mocker, mock_elements_worker, tmp_path):
|
|
@@ -1958,6 +1958,433 @@ def test_partial_update_element_confidence(
|
|
|
1958
1958
|
assert cached_element.confidence == confidence
|
|
1959
1959
|
|
|
1960
1960
|
|
|
1961
|
+
def test_list_elements_wrong_folder(mock_elements_worker):
|
|
1962
|
+
with pytest.raises(AssertionError, match="folder should be of type bool"):
|
|
1963
|
+
mock_elements_worker.list_elements(folder="not bool")
|
|
1964
|
+
|
|
1965
|
+
|
|
1966
|
+
def test_list_elements_wrong_name(mock_elements_worker):
|
|
1967
|
+
with pytest.raises(AssertionError, match="name should be of type str"):
|
|
1968
|
+
mock_elements_worker.list_elements(name=1234)
|
|
1969
|
+
|
|
1970
|
+
|
|
1971
|
+
def test_list_elements_wrong_top_level(mock_elements_worker):
|
|
1972
|
+
with pytest.raises(AssertionError, match="top_level should be of type bool"):
|
|
1973
|
+
mock_elements_worker.list_elements(top_level="not bool")
|
|
1974
|
+
|
|
1975
|
+
|
|
1976
|
+
def test_list_elements_wrong_type(mock_elements_worker):
|
|
1977
|
+
with pytest.raises(AssertionError, match="type should be of type str"):
|
|
1978
|
+
mock_elements_worker.list_elements(type=1234)
|
|
1979
|
+
|
|
1980
|
+
|
|
1981
|
+
def test_list_elements_wrong_with_classes(mock_elements_worker):
|
|
1982
|
+
with pytest.raises(AssertionError, match="with_classes should be of type bool"):
|
|
1983
|
+
mock_elements_worker.list_elements(with_classes="not bool")
|
|
1984
|
+
|
|
1985
|
+
|
|
1986
|
+
def test_list_elements_wrong_with_corpus(mock_elements_worker):
|
|
1987
|
+
with pytest.raises(AssertionError, match="with_corpus should be of type bool"):
|
|
1988
|
+
mock_elements_worker.list_elements(with_corpus="not bool")
|
|
1989
|
+
|
|
1990
|
+
|
|
1991
|
+
def test_list_elements_wrong_with_has_children(mock_elements_worker):
|
|
1992
|
+
with pytest.raises(
|
|
1993
|
+
AssertionError, match="with_has_children should be of type bool"
|
|
1994
|
+
):
|
|
1995
|
+
mock_elements_worker.list_elements(with_has_children="not bool")
|
|
1996
|
+
|
|
1997
|
+
|
|
1998
|
+
def test_list_elements_wrong_with_zone(mock_elements_worker):
|
|
1999
|
+
with pytest.raises(AssertionError, match="with_zone should be of type bool"):
|
|
2000
|
+
mock_elements_worker.list_elements(with_zone="not bool")
|
|
2001
|
+
|
|
2002
|
+
|
|
2003
|
+
def test_list_elements_wrong_with_metadata(mock_elements_worker):
|
|
2004
|
+
with pytest.raises(AssertionError, match="with_metadata should be of type bool"):
|
|
2005
|
+
mock_elements_worker.list_elements(with_metadata="not bool")
|
|
2006
|
+
|
|
2007
|
+
|
|
2008
|
+
@pytest.mark.parametrize(
|
|
2009
|
+
("param", "value"),
|
|
2010
|
+
[
|
|
2011
|
+
("worker_run", 1234),
|
|
2012
|
+
("transcription_worker_run", 1234),
|
|
2013
|
+
],
|
|
2014
|
+
)
|
|
2015
|
+
def test_list_elements_wrong_worker_run(mock_elements_worker, param, value):
|
|
2016
|
+
with pytest.raises(AssertionError, match=f"{param} should be of type str or bool"):
|
|
2017
|
+
mock_elements_worker.list_elements(**{param: value})
|
|
2018
|
+
|
|
2019
|
+
|
|
2020
|
+
@pytest.mark.parametrize(
|
|
2021
|
+
("param", "alternative", "value"),
|
|
2022
|
+
[
|
|
2023
|
+
("worker_version", "worker_run", 1234),
|
|
2024
|
+
("transcription_worker_version", "transcription_worker_run", 1234),
|
|
2025
|
+
],
|
|
2026
|
+
)
|
|
2027
|
+
def test_list_elements_wrong_worker_version(
|
|
2028
|
+
mock_elements_worker, param, alternative, value
|
|
2029
|
+
):
|
|
2030
|
+
# WARNING: pytest.deprecated_call must be placed BEFORE pytest.raises, otherwise `match` argument won't be checked
|
|
2031
|
+
with (
|
|
2032
|
+
pytest.deprecated_call(
|
|
2033
|
+
match=f"`{param}` usage is deprecated. Consider using `{alternative}` instead."
|
|
2034
|
+
),
|
|
2035
|
+
pytest.raises(AssertionError, match=f"{param} should be of type str or bool"),
|
|
2036
|
+
):
|
|
2037
|
+
mock_elements_worker.list_elements(**{param: value})
|
|
2038
|
+
|
|
2039
|
+
|
|
2040
|
+
@pytest.mark.parametrize(
|
|
2041
|
+
"param",
|
|
2042
|
+
[
|
|
2043
|
+
"worker_run",
|
|
2044
|
+
"transcription_worker_run",
|
|
2045
|
+
],
|
|
2046
|
+
)
|
|
2047
|
+
def test_list_elements_wrong_bool_worker_run(mock_elements_worker, param):
|
|
2048
|
+
with pytest.raises(
|
|
2049
|
+
AssertionError, match=f"if of type bool, {param} can only be set to False"
|
|
2050
|
+
):
|
|
2051
|
+
mock_elements_worker.list_elements(**{param: True})
|
|
2052
|
+
|
|
2053
|
+
|
|
2054
|
+
@pytest.mark.parametrize(
|
|
2055
|
+
("param", "alternative"),
|
|
2056
|
+
[
|
|
2057
|
+
("worker_version", "worker_run"),
|
|
2058
|
+
("transcription_worker_version", "transcription_worker_run"),
|
|
2059
|
+
],
|
|
2060
|
+
)
|
|
2061
|
+
def test_list_elements_wrong_bool_worker_version(
|
|
2062
|
+
mock_elements_worker, param, alternative
|
|
2063
|
+
):
|
|
2064
|
+
# WARNING: pytest.deprecated_call must be placed BEFORE pytest.raises, otherwise `match` argument won't be checked
|
|
2065
|
+
with (
|
|
2066
|
+
pytest.deprecated_call(
|
|
2067
|
+
match=f"`{param}` usage is deprecated. Consider using `{alternative}` instead."
|
|
2068
|
+
),
|
|
2069
|
+
pytest.raises(
|
|
2070
|
+
AssertionError, match=f"if of type bool, {param} can only be set to False"
|
|
2071
|
+
),
|
|
2072
|
+
):
|
|
2073
|
+
mock_elements_worker.list_elements(**{param: True})
|
|
2074
|
+
|
|
2075
|
+
|
|
2076
|
+
def test_list_elements_api_error(responses, mock_elements_worker):
|
|
2077
|
+
responses.add(
|
|
2078
|
+
responses.GET,
|
|
2079
|
+
f"http://testserver/api/v1/corpus/{mock_elements_worker.corpus_id}/elements/",
|
|
2080
|
+
status=418,
|
|
2081
|
+
)
|
|
2082
|
+
|
|
2083
|
+
with pytest.raises(
|
|
2084
|
+
Exception, match="Stopping pagination as data will be incomplete"
|
|
2085
|
+
):
|
|
2086
|
+
next(mock_elements_worker.list_elements())
|
|
2087
|
+
|
|
2088
|
+
assert len(responses.calls) == len(BASE_API_CALLS) + 5
|
|
2089
|
+
assert [
|
|
2090
|
+
(call.request.method, call.request.url) for call in responses.calls
|
|
2091
|
+
] == BASE_API_CALLS + [
|
|
2092
|
+
# We do 5 retries
|
|
2093
|
+
(
|
|
2094
|
+
"GET",
|
|
2095
|
+
f"http://testserver/api/v1/corpus/{mock_elements_worker.corpus_id}/elements/",
|
|
2096
|
+
),
|
|
2097
|
+
(
|
|
2098
|
+
"GET",
|
|
2099
|
+
f"http://testserver/api/v1/corpus/{mock_elements_worker.corpus_id}/elements/",
|
|
2100
|
+
),
|
|
2101
|
+
(
|
|
2102
|
+
"GET",
|
|
2103
|
+
f"http://testserver/api/v1/corpus/{mock_elements_worker.corpus_id}/elements/",
|
|
2104
|
+
),
|
|
2105
|
+
(
|
|
2106
|
+
"GET",
|
|
2107
|
+
f"http://testserver/api/v1/corpus/{mock_elements_worker.corpus_id}/elements/",
|
|
2108
|
+
),
|
|
2109
|
+
(
|
|
2110
|
+
"GET",
|
|
2111
|
+
f"http://testserver/api/v1/corpus/{mock_elements_worker.corpus_id}/elements/",
|
|
2112
|
+
),
|
|
2113
|
+
]
|
|
2114
|
+
|
|
2115
|
+
|
|
2116
|
+
def test_list_elements(responses, mock_elements_worker):
|
|
2117
|
+
expected_children = [
|
|
2118
|
+
{
|
|
2119
|
+
"id": "0000",
|
|
2120
|
+
"type": "page",
|
|
2121
|
+
"name": "Test",
|
|
2122
|
+
"corpus": {},
|
|
2123
|
+
"thumbnail_url": None,
|
|
2124
|
+
"zone": {},
|
|
2125
|
+
"best_classes": None,
|
|
2126
|
+
"has_children": None,
|
|
2127
|
+
"worker_version_id": None,
|
|
2128
|
+
"worker_run_id": None,
|
|
2129
|
+
},
|
|
2130
|
+
{
|
|
2131
|
+
"id": "1111",
|
|
2132
|
+
"type": "page",
|
|
2133
|
+
"name": "Test 2",
|
|
2134
|
+
"corpus": {},
|
|
2135
|
+
"thumbnail_url": None,
|
|
2136
|
+
"zone": {},
|
|
2137
|
+
"best_classes": None,
|
|
2138
|
+
"has_children": None,
|
|
2139
|
+
"worker_version_id": None,
|
|
2140
|
+
"worker_run_id": None,
|
|
2141
|
+
},
|
|
2142
|
+
{
|
|
2143
|
+
"id": "2222",
|
|
2144
|
+
"type": "page",
|
|
2145
|
+
"name": "Test 3",
|
|
2146
|
+
"corpus": {},
|
|
2147
|
+
"thumbnail_url": None,
|
|
2148
|
+
"zone": {},
|
|
2149
|
+
"best_classes": None,
|
|
2150
|
+
"has_children": None,
|
|
2151
|
+
"worker_version_id": None,
|
|
2152
|
+
"worker_run_id": None,
|
|
2153
|
+
},
|
|
2154
|
+
]
|
|
2155
|
+
responses.add(
|
|
2156
|
+
responses.GET,
|
|
2157
|
+
f"http://testserver/api/v1/corpus/{mock_elements_worker.corpus_id}/elements/",
|
|
2158
|
+
status=200,
|
|
2159
|
+
json={
|
|
2160
|
+
"count": 3,
|
|
2161
|
+
"next": None,
|
|
2162
|
+
"results": expected_children,
|
|
2163
|
+
},
|
|
2164
|
+
)
|
|
2165
|
+
|
|
2166
|
+
for idx, child in enumerate(mock_elements_worker.list_elements()):
|
|
2167
|
+
assert child == expected_children[idx]
|
|
2168
|
+
|
|
2169
|
+
assert len(responses.calls) == len(BASE_API_CALLS) + 1
|
|
2170
|
+
assert [
|
|
2171
|
+
(call.request.method, call.request.url) for call in responses.calls
|
|
2172
|
+
] == BASE_API_CALLS + [
|
|
2173
|
+
(
|
|
2174
|
+
"GET",
|
|
2175
|
+
f"http://testserver/api/v1/corpus/{mock_elements_worker.corpus_id}/elements/",
|
|
2176
|
+
),
|
|
2177
|
+
]
|
|
2178
|
+
|
|
2179
|
+
|
|
2180
|
+
def test_list_elements_manual_worker_version(responses, mock_elements_worker):
|
|
2181
|
+
expected_children = [
|
|
2182
|
+
{
|
|
2183
|
+
"id": "0000",
|
|
2184
|
+
"type": "page",
|
|
2185
|
+
"name": "Test",
|
|
2186
|
+
"corpus": {},
|
|
2187
|
+
"thumbnail_url": None,
|
|
2188
|
+
"zone": {},
|
|
2189
|
+
"best_classes": None,
|
|
2190
|
+
"has_children": None,
|
|
2191
|
+
"worker_version_id": None,
|
|
2192
|
+
"worker_run_id": None,
|
|
2193
|
+
}
|
|
2194
|
+
]
|
|
2195
|
+
responses.add(
|
|
2196
|
+
responses.GET,
|
|
2197
|
+
f"http://testserver/api/v1/corpus/{mock_elements_worker.corpus_id}/elements/?worker_version=False",
|
|
2198
|
+
status=200,
|
|
2199
|
+
json={
|
|
2200
|
+
"count": 1,
|
|
2201
|
+
"next": None,
|
|
2202
|
+
"results": expected_children,
|
|
2203
|
+
},
|
|
2204
|
+
)
|
|
2205
|
+
|
|
2206
|
+
with pytest.deprecated_call(
|
|
2207
|
+
match="`worker_version` usage is deprecated. Consider using `worker_run` instead."
|
|
2208
|
+
):
|
|
2209
|
+
for idx, child in enumerate(
|
|
2210
|
+
mock_elements_worker.list_elements(worker_version=False)
|
|
2211
|
+
):
|
|
2212
|
+
assert child == expected_children[idx]
|
|
2213
|
+
|
|
2214
|
+
assert len(responses.calls) == len(BASE_API_CALLS) + 1
|
|
2215
|
+
assert [
|
|
2216
|
+
(call.request.method, call.request.url) for call in responses.calls
|
|
2217
|
+
] == BASE_API_CALLS + [
|
|
2218
|
+
(
|
|
2219
|
+
"GET",
|
|
2220
|
+
f"http://testserver/api/v1/corpus/{mock_elements_worker.corpus_id}/elements/?worker_version=False",
|
|
2221
|
+
),
|
|
2222
|
+
]
|
|
2223
|
+
|
|
2224
|
+
|
|
2225
|
+
def test_list_elements_manual_worker_run(responses, mock_elements_worker):
|
|
2226
|
+
expected_children = [
|
|
2227
|
+
{
|
|
2228
|
+
"id": "0000",
|
|
2229
|
+
"type": "page",
|
|
2230
|
+
"name": "Test",
|
|
2231
|
+
"corpus": {},
|
|
2232
|
+
"thumbnail_url": None,
|
|
2233
|
+
"zone": {},
|
|
2234
|
+
"best_classes": None,
|
|
2235
|
+
"has_children": None,
|
|
2236
|
+
"worker_version_id": None,
|
|
2237
|
+
"worker_run_id": None,
|
|
2238
|
+
}
|
|
2239
|
+
]
|
|
2240
|
+
responses.add(
|
|
2241
|
+
responses.GET,
|
|
2242
|
+
f"http://testserver/api/v1/corpus/{mock_elements_worker.corpus_id}/elements/?worker_run=False",
|
|
2243
|
+
status=200,
|
|
2244
|
+
json={
|
|
2245
|
+
"count": 1,
|
|
2246
|
+
"next": None,
|
|
2247
|
+
"results": expected_children,
|
|
2248
|
+
},
|
|
2249
|
+
)
|
|
2250
|
+
|
|
2251
|
+
for idx, child in enumerate(mock_elements_worker.list_elements(worker_run=False)):
|
|
2252
|
+
assert child == expected_children[idx]
|
|
2253
|
+
|
|
2254
|
+
assert len(responses.calls) == len(BASE_API_CALLS) + 1
|
|
2255
|
+
assert [
|
|
2256
|
+
(call.request.method, call.request.url) for call in responses.calls
|
|
2257
|
+
] == BASE_API_CALLS + [
|
|
2258
|
+
(
|
|
2259
|
+
"GET",
|
|
2260
|
+
f"http://testserver/api/v1/corpus/{mock_elements_worker.corpus_id}/elements/?worker_run=False",
|
|
2261
|
+
),
|
|
2262
|
+
]
|
|
2263
|
+
|
|
2264
|
+
|
|
2265
|
+
def test_list_elements_with_cache_unhandled_param(mock_elements_worker_with_cache):
|
|
2266
|
+
with pytest.raises(
|
|
2267
|
+
AssertionError,
|
|
2268
|
+
match="When using the local cache, you can only filter by 'type' and/or 'worker_version' and/or 'worker_run'",
|
|
2269
|
+
):
|
|
2270
|
+
mock_elements_worker_with_cache.list_elements(with_corpus=True)
|
|
2271
|
+
|
|
2272
|
+
|
|
2273
|
+
@pytest.mark.usefixtures("_mock_cached_elements")
|
|
2274
|
+
@pytest.mark.parametrize(
|
|
2275
|
+
("filters", "expected_ids"),
|
|
2276
|
+
[
|
|
2277
|
+
# Filter on element should give all elements inserted
|
|
2278
|
+
(
|
|
2279
|
+
{},
|
|
2280
|
+
(
|
|
2281
|
+
"99999999-9999-9999-9999-999999999999",
|
|
2282
|
+
"12341234-1234-1234-1234-123412341234",
|
|
2283
|
+
"11111111-1111-1111-1111-111111111111",
|
|
2284
|
+
"22222222-2222-2222-2222-222222222222",
|
|
2285
|
+
"33333333-3333-3333-3333-333333333333",
|
|
2286
|
+
),
|
|
2287
|
+
),
|
|
2288
|
+
# Filter on element and page should give the second element
|
|
2289
|
+
(
|
|
2290
|
+
{"type": "page"},
|
|
2291
|
+
("22222222-2222-2222-2222-222222222222",),
|
|
2292
|
+
),
|
|
2293
|
+
# Filter on element and worker run should give second
|
|
2294
|
+
(
|
|
2295
|
+
{
|
|
2296
|
+
"worker_run": "56785678-5678-5678-5678-567856785678",
|
|
2297
|
+
},
|
|
2298
|
+
(
|
|
2299
|
+
"12341234-1234-1234-1234-123412341234",
|
|
2300
|
+
"22222222-2222-2222-2222-222222222222",
|
|
2301
|
+
),
|
|
2302
|
+
),
|
|
2303
|
+
# Filter on element, manual worker run should give first and third
|
|
2304
|
+
(
|
|
2305
|
+
{"worker_run": False},
|
|
2306
|
+
(
|
|
2307
|
+
"99999999-9999-9999-9999-999999999999",
|
|
2308
|
+
"11111111-1111-1111-1111-111111111111",
|
|
2309
|
+
"33333333-3333-3333-3333-333333333333",
|
|
2310
|
+
),
|
|
2311
|
+
),
|
|
2312
|
+
],
|
|
2313
|
+
)
|
|
2314
|
+
def test_list_elements_with_cache(
|
|
2315
|
+
responses, mock_elements_worker_with_cache, filters, expected_ids
|
|
2316
|
+
):
|
|
2317
|
+
# Check we have 5 elements already present in database
|
|
2318
|
+
assert CachedElement.select().count() == 5
|
|
2319
|
+
|
|
2320
|
+
# Query database through cache
|
|
2321
|
+
elements = mock_elements_worker_with_cache.list_elements(**filters)
|
|
2322
|
+
assert elements.count() == len(expected_ids)
|
|
2323
|
+
for child, expected_id in zip(elements.order_by("id"), expected_ids, strict=True):
|
|
2324
|
+
assert child.id == UUID(expected_id)
|
|
2325
|
+
|
|
2326
|
+
# Check the worker never hits the API for elements
|
|
2327
|
+
assert len(responses.calls) == len(BASE_API_CALLS)
|
|
2328
|
+
assert [
|
|
2329
|
+
(call.request.method, call.request.url) for call in responses.calls
|
|
2330
|
+
] == BASE_API_CALLS
|
|
2331
|
+
|
|
2332
|
+
|
|
2333
|
+
@pytest.mark.usefixtures("_mock_cached_elements")
|
|
2334
|
+
@pytest.mark.parametrize(
|
|
2335
|
+
("filters", "expected_ids"),
|
|
2336
|
+
[
|
|
2337
|
+
# Filter on element and worker version
|
|
2338
|
+
(
|
|
2339
|
+
{
|
|
2340
|
+
"worker_version": "56785678-5678-5678-5678-567856785678",
|
|
2341
|
+
},
|
|
2342
|
+
(
|
|
2343
|
+
"12341234-1234-1234-1234-123412341234",
|
|
2344
|
+
"11111111-1111-1111-1111-111111111111",
|
|
2345
|
+
"22222222-2222-2222-2222-222222222222",
|
|
2346
|
+
),
|
|
2347
|
+
),
|
|
2348
|
+
# Filter on element, type double_page and worker version
|
|
2349
|
+
(
|
|
2350
|
+
{"type": "page", "worker_version": "56785678-5678-5678-5678-567856785678"},
|
|
2351
|
+
("22222222-2222-2222-2222-222222222222",),
|
|
2352
|
+
),
|
|
2353
|
+
# Filter on element, manual worker version
|
|
2354
|
+
(
|
|
2355
|
+
{"worker_version": False},
|
|
2356
|
+
(
|
|
2357
|
+
"99999999-9999-9999-9999-999999999999",
|
|
2358
|
+
"33333333-3333-3333-3333-333333333333",
|
|
2359
|
+
),
|
|
2360
|
+
),
|
|
2361
|
+
],
|
|
2362
|
+
)
|
|
2363
|
+
def test_list_elements_with_cache_deprecation(
|
|
2364
|
+
responses,
|
|
2365
|
+
mock_elements_worker_with_cache,
|
|
2366
|
+
filters,
|
|
2367
|
+
expected_ids,
|
|
2368
|
+
):
|
|
2369
|
+
# Check we have 5 elements already present in database
|
|
2370
|
+
assert CachedElement.select().count() == 5
|
|
2371
|
+
|
|
2372
|
+
with pytest.deprecated_call(
|
|
2373
|
+
match="`worker_version` usage is deprecated. Consider using `worker_run` instead."
|
|
2374
|
+
):
|
|
2375
|
+
# Query database through cache
|
|
2376
|
+
elements = mock_elements_worker_with_cache.list_elements(**filters)
|
|
2377
|
+
assert elements.count() == len(expected_ids)
|
|
2378
|
+
for child, expected_id in zip(elements.order_by("id"), expected_ids, strict=True):
|
|
2379
|
+
assert child.id == UUID(expected_id)
|
|
2380
|
+
|
|
2381
|
+
# Check the worker never hits the API for elements
|
|
2382
|
+
assert len(responses.calls) == len(BASE_API_CALLS)
|
|
2383
|
+
assert [
|
|
2384
|
+
(call.request.method, call.request.url) for call in responses.calls
|
|
2385
|
+
] == BASE_API_CALLS
|
|
2386
|
+
|
|
2387
|
+
|
|
1961
2388
|
def test_list_element_children_wrong_element(mock_elements_worker):
|
|
1962
2389
|
with pytest.raises(
|
|
1963
2390
|
AssertionError,
|