arkindex-base-worker 0.3.7rc9__py3-none-any.whl → 0.4.0__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.7rc9.dist-info → arkindex_base_worker-0.4.0.dist-info}/METADATA +16 -20
- arkindex_base_worker-0.4.0.dist-info/RECORD +61 -0
- {arkindex_base_worker-0.3.7rc9.dist-info → arkindex_base_worker-0.4.0.dist-info}/WHEEL +1 -1
- arkindex_worker/cache.py +1 -1
- arkindex_worker/image.py +120 -1
- arkindex_worker/models.py +6 -0
- arkindex_worker/utils.py +85 -4
- arkindex_worker/worker/__init__.py +68 -162
- arkindex_worker/worker/base.py +39 -34
- arkindex_worker/worker/classification.py +34 -18
- arkindex_worker/worker/corpus.py +86 -0
- arkindex_worker/worker/dataset.py +71 -1
- arkindex_worker/worker/element.py +352 -91
- arkindex_worker/worker/entity.py +11 -11
- arkindex_worker/worker/image.py +21 -0
- arkindex_worker/worker/metadata.py +19 -9
- arkindex_worker/worker/process.py +92 -0
- arkindex_worker/worker/task.py +5 -4
- arkindex_worker/worker/training.py +25 -10
- arkindex_worker/worker/transcription.py +89 -68
- arkindex_worker/worker/version.py +3 -1
- tests/__init__.py +8 -0
- tests/conftest.py +36 -52
- tests/test_base_worker.py +212 -12
- tests/test_dataset_worker.py +21 -45
- tests/test_elements_worker/{test_classifications.py → test_classification.py} +216 -100
- tests/test_elements_worker/test_cli.py +3 -11
- tests/test_elements_worker/test_corpus.py +168 -0
- tests/test_elements_worker/test_dataset.py +7 -12
- tests/test_elements_worker/test_element.py +427 -0
- tests/test_elements_worker/test_element_create_multiple.py +715 -0
- tests/test_elements_worker/test_element_create_single.py +528 -0
- tests/test_elements_worker/test_element_list_children.py +969 -0
- tests/test_elements_worker/test_element_list_parents.py +530 -0
- tests/test_elements_worker/{test_entities.py → test_entity_create.py} +37 -195
- tests/test_elements_worker/test_entity_list_and_check.py +160 -0
- tests/test_elements_worker/test_image.py +66 -0
- tests/test_elements_worker/test_metadata.py +230 -139
- tests/test_elements_worker/test_process.py +89 -0
- tests/test_elements_worker/test_task.py +8 -18
- tests/test_elements_worker/test_training.py +17 -8
- tests/test_elements_worker/test_transcription_create.py +873 -0
- tests/test_elements_worker/test_transcription_create_with_elements.py +951 -0
- tests/test_elements_worker/test_transcription_list.py +450 -0
- tests/test_elements_worker/test_version.py +60 -0
- tests/test_elements_worker/test_worker.py +563 -279
- tests/test_image.py +432 -209
- tests/test_merge.py +1 -2
- tests/test_utils.py +66 -3
- arkindex_base_worker-0.3.7rc9.dist-info/RECORD +0 -47
- tests/test_elements_worker/test_elements.py +0 -2713
- tests/test_elements_worker/test_transcriptions.py +0 -2119
- {arkindex_base_worker-0.3.7rc9.dist-info → arkindex_base_worker-0.4.0.dist-info}/LICENSE +0 -0
- {arkindex_base_worker-0.3.7rc9.dist-info → arkindex_base_worker-0.4.0.dist-info}/top_level.txt +0 -0
|
@@ -2,11 +2,12 @@ import json
|
|
|
2
2
|
import re
|
|
3
3
|
|
|
4
4
|
import pytest
|
|
5
|
-
from apistar.exceptions import ErrorResponse
|
|
6
5
|
|
|
6
|
+
from arkindex.exceptions import ErrorResponse
|
|
7
7
|
from arkindex.mock import MockApiClient
|
|
8
8
|
from arkindex_worker.cache import CachedElement
|
|
9
9
|
from arkindex_worker.models import Element
|
|
10
|
+
from arkindex_worker.utils import DEFAULT_BATCH_SIZE
|
|
10
11
|
from arkindex_worker.worker import MetaType
|
|
11
12
|
|
|
12
13
|
from . import BASE_API_CALLS
|
|
@@ -136,7 +137,7 @@ def test_create_metadata_api_error(responses, mock_elements_worker):
|
|
|
136
137
|
responses.add(
|
|
137
138
|
responses.POST,
|
|
138
139
|
"http://testserver/api/v1/element/12341234-1234-1234-1234-123412341234/metadata/",
|
|
139
|
-
status=
|
|
140
|
+
status=418,
|
|
140
141
|
)
|
|
141
142
|
|
|
142
143
|
with pytest.raises(ErrorResponse):
|
|
@@ -147,31 +148,14 @@ def test_create_metadata_api_error(responses, mock_elements_worker):
|
|
|
147
148
|
value="La Turbine, Grenoble 38000",
|
|
148
149
|
)
|
|
149
150
|
|
|
150
|
-
assert len(responses.calls) == len(BASE_API_CALLS) +
|
|
151
|
+
assert len(responses.calls) == len(BASE_API_CALLS) + 1
|
|
151
152
|
assert [
|
|
152
153
|
(call.request.method, call.request.url) for call in responses.calls
|
|
153
154
|
] == BASE_API_CALLS + [
|
|
154
|
-
# We retry 5 times the API call
|
|
155
|
-
(
|
|
156
|
-
"POST",
|
|
157
|
-
"http://testserver/api/v1/element/12341234-1234-1234-1234-123412341234/metadata/",
|
|
158
|
-
),
|
|
159
|
-
(
|
|
160
|
-
"POST",
|
|
161
|
-
"http://testserver/api/v1/element/12341234-1234-1234-1234-123412341234/metadata/",
|
|
162
|
-
),
|
|
163
|
-
(
|
|
164
|
-
"POST",
|
|
165
|
-
"http://testserver/api/v1/element/12341234-1234-1234-1234-123412341234/metadata/",
|
|
166
|
-
),
|
|
167
|
-
(
|
|
168
|
-
"POST",
|
|
169
|
-
"http://testserver/api/v1/element/12341234-1234-1234-1234-123412341234/metadata/",
|
|
170
|
-
),
|
|
171
155
|
(
|
|
172
156
|
"POST",
|
|
173
157
|
"http://testserver/api/v1/element/12341234-1234-1234-1234-123412341234/metadata/",
|
|
174
|
-
)
|
|
158
|
+
)
|
|
175
159
|
]
|
|
176
160
|
|
|
177
161
|
|
|
@@ -245,143 +229,267 @@ def test_create_metadata_cached_element(responses, mock_elements_worker_with_cac
|
|
|
245
229
|
assert metadata_id == "12345678-1234-1234-1234-123456789123"
|
|
246
230
|
|
|
247
231
|
|
|
248
|
-
@pytest.mark.parametrize(
|
|
249
|
-
|
|
250
|
-
[
|
|
251
|
-
[{"type": MetaType.Text, "name": "fake_name", "value": "fake_value"}],
|
|
252
|
-
[
|
|
253
|
-
{
|
|
254
|
-
"type": MetaType.Text,
|
|
255
|
-
"name": "fake_name",
|
|
256
|
-
"value": "fake_value",
|
|
257
|
-
"entity_id": "fake_entity_id",
|
|
258
|
-
}
|
|
259
|
-
],
|
|
260
|
-
],
|
|
261
|
-
)
|
|
262
|
-
def test_create_metadata_bulk(responses, mock_elements_worker, metadata_list):
|
|
232
|
+
@pytest.mark.parametrize("batch_size", [DEFAULT_BATCH_SIZE, 1])
|
|
233
|
+
def test_create_metadata_bulk(batch_size, responses, mock_elements_worker):
|
|
263
234
|
element = Element({"id": "12341234-1234-1234-1234-123412341234"})
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
"
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
"
|
|
270
|
-
"
|
|
271
|
-
|
|
272
|
-
"id": "fake_metadata_id",
|
|
273
|
-
"type": metadata_list[0]["type"].value,
|
|
274
|
-
"name": metadata_list[0]["name"],
|
|
275
|
-
"value": metadata_list[0]["value"],
|
|
276
|
-
"dates": [],
|
|
277
|
-
"entity_id": metadata_list[0].get("entity_id"),
|
|
278
|
-
}
|
|
279
|
-
],
|
|
235
|
+
|
|
236
|
+
metadata_list = [
|
|
237
|
+
{"type": MetaType.Text, "name": "fake_name", "value": "fake_value"},
|
|
238
|
+
{
|
|
239
|
+
"type": MetaType.Text,
|
|
240
|
+
"name": "Year",
|
|
241
|
+
"value": "2024",
|
|
242
|
+
"entity_id": "entity_id",
|
|
280
243
|
},
|
|
281
|
-
|
|
244
|
+
]
|
|
245
|
+
if batch_size > 1:
|
|
246
|
+
responses.add(
|
|
247
|
+
responses.POST,
|
|
248
|
+
"http://testserver/api/v1/element/12341234-1234-1234-1234-123412341234/metadata/bulk/",
|
|
249
|
+
status=201,
|
|
250
|
+
json={
|
|
251
|
+
"worker_run_id": "56785678-5678-5678-5678-567856785678",
|
|
252
|
+
"metadata_list": [
|
|
253
|
+
{
|
|
254
|
+
"id": "fake_metadata_id1",
|
|
255
|
+
"type": metadata_list[0]["type"].value,
|
|
256
|
+
"name": metadata_list[0]["name"],
|
|
257
|
+
"value": metadata_list[0]["value"],
|
|
258
|
+
"dates": [],
|
|
259
|
+
"entity_id": None,
|
|
260
|
+
},
|
|
261
|
+
{
|
|
262
|
+
"id": "fake_metadata_id2",
|
|
263
|
+
"type": metadata_list[1]["type"].value,
|
|
264
|
+
"name": metadata_list[1]["name"],
|
|
265
|
+
"value": metadata_list[1]["value"],
|
|
266
|
+
"dates": [],
|
|
267
|
+
"entity_id": metadata_list[1]["entity_id"],
|
|
268
|
+
},
|
|
269
|
+
],
|
|
270
|
+
},
|
|
271
|
+
)
|
|
272
|
+
else:
|
|
273
|
+
for idx, meta in enumerate(metadata_list, start=1):
|
|
274
|
+
responses.add(
|
|
275
|
+
responses.POST,
|
|
276
|
+
"http://testserver/api/v1/element/12341234-1234-1234-1234-123412341234/metadata/bulk/",
|
|
277
|
+
status=201,
|
|
278
|
+
json={
|
|
279
|
+
"worker_run_id": "56785678-5678-5678-5678-567856785678",
|
|
280
|
+
"metadata_list": [
|
|
281
|
+
{
|
|
282
|
+
"id": f"fake_metadata_id{idx}",
|
|
283
|
+
"type": meta["type"].value,
|
|
284
|
+
"name": meta["name"],
|
|
285
|
+
"value": meta["value"],
|
|
286
|
+
"dates": [],
|
|
287
|
+
"entity_id": meta.get("entity_id"),
|
|
288
|
+
}
|
|
289
|
+
],
|
|
290
|
+
},
|
|
291
|
+
)
|
|
282
292
|
|
|
283
293
|
created_metadata_list = mock_elements_worker.create_metadata_bulk(
|
|
284
|
-
element, metadata_list
|
|
294
|
+
element, metadata_list, batch_size=batch_size
|
|
285
295
|
)
|
|
286
296
|
|
|
287
|
-
|
|
288
|
-
assert [
|
|
289
|
-
(call.request.method, call.request.url) for call in responses.calls
|
|
290
|
-
] == BASE_API_CALLS + [
|
|
297
|
+
bulk_api_calls = [
|
|
291
298
|
(
|
|
292
299
|
"POST",
|
|
293
300
|
"http://testserver/api/v1/element/12341234-1234-1234-1234-123412341234/metadata/bulk/",
|
|
294
|
-
)
|
|
295
|
-
]
|
|
296
|
-
assert json.loads(responses.calls[-1].request.body)["metadata_list"] == [
|
|
297
|
-
{
|
|
298
|
-
"type": metadata_list[0]["type"].value,
|
|
299
|
-
"name": metadata_list[0]["name"],
|
|
300
|
-
"value": metadata_list[0]["value"],
|
|
301
|
-
"entity_id": metadata_list[0].get("entity_id"),
|
|
302
|
-
}
|
|
301
|
+
)
|
|
303
302
|
]
|
|
303
|
+
if batch_size != DEFAULT_BATCH_SIZE:
|
|
304
|
+
bulk_api_calls.append(
|
|
305
|
+
(
|
|
306
|
+
"POST",
|
|
307
|
+
"http://testserver/api/v1/element/12341234-1234-1234-1234-123412341234/metadata/bulk/",
|
|
308
|
+
)
|
|
309
|
+
)
|
|
310
|
+
|
|
311
|
+
assert len(responses.calls) == len(BASE_API_CALLS) + len(bulk_api_calls)
|
|
312
|
+
assert [
|
|
313
|
+
(call.request.method, call.request.url) for call in responses.calls
|
|
314
|
+
] == BASE_API_CALLS + bulk_api_calls
|
|
315
|
+
|
|
316
|
+
first_meta = {
|
|
317
|
+
**metadata_list[0],
|
|
318
|
+
"type": metadata_list[0]["type"].value,
|
|
319
|
+
"entity_id": None,
|
|
320
|
+
}
|
|
321
|
+
second_meta = {**metadata_list[1], "type": metadata_list[1]["type"].value}
|
|
322
|
+
empty_payload = {
|
|
323
|
+
"worker_run_id": "56785678-5678-5678-5678-567856785678",
|
|
324
|
+
"metadata_list": [],
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
bodies = []
|
|
328
|
+
first_call_idx = None
|
|
329
|
+
if batch_size > 1:
|
|
330
|
+
first_call_idx = -1
|
|
331
|
+
bodies.append({**empty_payload, "metadata_list": [first_meta, second_meta]})
|
|
332
|
+
else:
|
|
333
|
+
first_call_idx = -2
|
|
334
|
+
bodies.append({**empty_payload, "metadata_list": [first_meta]})
|
|
335
|
+
bodies.append({**empty_payload, "metadata_list": [second_meta]})
|
|
336
|
+
|
|
337
|
+
assert [
|
|
338
|
+
json.loads(bulk_call.request.body)
|
|
339
|
+
for bulk_call in responses.calls[first_call_idx:]
|
|
340
|
+
] == bodies
|
|
341
|
+
|
|
304
342
|
assert created_metadata_list == [
|
|
305
343
|
{
|
|
306
|
-
"id": "
|
|
344
|
+
"id": "fake_metadata_id1",
|
|
307
345
|
"type": metadata_list[0]["type"].value,
|
|
308
346
|
"name": metadata_list[0]["name"],
|
|
309
347
|
"value": metadata_list[0]["value"],
|
|
310
348
|
"dates": [],
|
|
311
|
-
"entity_id":
|
|
312
|
-
}
|
|
349
|
+
"entity_id": None,
|
|
350
|
+
},
|
|
351
|
+
{
|
|
352
|
+
"id": "fake_metadata_id2",
|
|
353
|
+
"type": metadata_list[1]["type"].value,
|
|
354
|
+
"name": metadata_list[1]["name"],
|
|
355
|
+
"value": metadata_list[1]["value"],
|
|
356
|
+
"dates": [],
|
|
357
|
+
"entity_id": metadata_list[1]["entity_id"],
|
|
358
|
+
},
|
|
313
359
|
]
|
|
314
360
|
|
|
315
361
|
|
|
316
|
-
@pytest.mark.parametrize(
|
|
317
|
-
"metadata_list",
|
|
318
|
-
[
|
|
319
|
-
[{"type": MetaType.Text, "name": "fake_name", "value": "fake_value"}],
|
|
320
|
-
[
|
|
321
|
-
{
|
|
322
|
-
"type": MetaType.Text,
|
|
323
|
-
"name": "fake_name",
|
|
324
|
-
"value": "fake_value",
|
|
325
|
-
"entity_id": "fake_entity_id",
|
|
326
|
-
}
|
|
327
|
-
],
|
|
328
|
-
],
|
|
329
|
-
)
|
|
362
|
+
@pytest.mark.parametrize("batch_size", [DEFAULT_BATCH_SIZE, 1])
|
|
330
363
|
def test_create_metadata_bulk_cached_element(
|
|
331
|
-
responses, mock_elements_worker_with_cache
|
|
364
|
+
batch_size, responses, mock_elements_worker_with_cache
|
|
332
365
|
):
|
|
333
366
|
element = CachedElement.create(
|
|
334
367
|
id="12341234-1234-1234-1234-123412341234", type="thing"
|
|
335
368
|
)
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
"
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
"
|
|
342
|
-
"
|
|
343
|
-
|
|
344
|
-
"id": "fake_metadata_id",
|
|
345
|
-
"type": metadata_list[0]["type"].value,
|
|
346
|
-
"name": metadata_list[0]["name"],
|
|
347
|
-
"value": metadata_list[0]["value"],
|
|
348
|
-
"dates": [],
|
|
349
|
-
"entity_id": metadata_list[0].get("entity_id"),
|
|
350
|
-
}
|
|
351
|
-
],
|
|
369
|
+
|
|
370
|
+
metadata_list = [
|
|
371
|
+
{"type": MetaType.Text, "name": "fake_name", "value": "fake_value"},
|
|
372
|
+
{
|
|
373
|
+
"type": MetaType.Text,
|
|
374
|
+
"name": "Year",
|
|
375
|
+
"value": "2024",
|
|
376
|
+
"entity_id": "entity_id",
|
|
352
377
|
},
|
|
353
|
-
|
|
378
|
+
]
|
|
379
|
+
if batch_size > 1:
|
|
380
|
+
responses.add(
|
|
381
|
+
responses.POST,
|
|
382
|
+
"http://testserver/api/v1/element/12341234-1234-1234-1234-123412341234/metadata/bulk/",
|
|
383
|
+
status=201,
|
|
384
|
+
json={
|
|
385
|
+
"worker_run_id": "56785678-5678-5678-5678-567856785678",
|
|
386
|
+
"metadata_list": [
|
|
387
|
+
{
|
|
388
|
+
"id": "fake_metadata_id1",
|
|
389
|
+
"type": metadata_list[0]["type"].value,
|
|
390
|
+
"name": metadata_list[0]["name"],
|
|
391
|
+
"value": metadata_list[0]["value"],
|
|
392
|
+
"dates": [],
|
|
393
|
+
"entity_id": None,
|
|
394
|
+
},
|
|
395
|
+
{
|
|
396
|
+
"id": "fake_metadata_id2",
|
|
397
|
+
"type": metadata_list[1]["type"].value,
|
|
398
|
+
"name": metadata_list[1]["name"],
|
|
399
|
+
"value": metadata_list[1]["value"],
|
|
400
|
+
"dates": [],
|
|
401
|
+
"entity_id": metadata_list[1]["entity_id"],
|
|
402
|
+
},
|
|
403
|
+
],
|
|
404
|
+
},
|
|
405
|
+
)
|
|
406
|
+
else:
|
|
407
|
+
for idx, meta in enumerate(metadata_list, start=1):
|
|
408
|
+
responses.add(
|
|
409
|
+
responses.POST,
|
|
410
|
+
"http://testserver/api/v1/element/12341234-1234-1234-1234-123412341234/metadata/bulk/",
|
|
411
|
+
status=201,
|
|
412
|
+
json={
|
|
413
|
+
"worker_run_id": "56785678-5678-5678-5678-567856785678",
|
|
414
|
+
"metadata_list": [
|
|
415
|
+
{
|
|
416
|
+
"id": f"fake_metadata_id{idx}",
|
|
417
|
+
"type": meta["type"].value,
|
|
418
|
+
"name": meta["name"],
|
|
419
|
+
"value": meta["value"],
|
|
420
|
+
"dates": [],
|
|
421
|
+
"entity_id": meta.get("entity_id"),
|
|
422
|
+
}
|
|
423
|
+
],
|
|
424
|
+
},
|
|
425
|
+
)
|
|
354
426
|
|
|
355
427
|
created_metadata_list = mock_elements_worker_with_cache.create_metadata_bulk(
|
|
356
|
-
element, metadata_list
|
|
428
|
+
element, metadata_list, batch_size=batch_size
|
|
357
429
|
)
|
|
358
430
|
|
|
359
|
-
|
|
360
|
-
assert [
|
|
361
|
-
(call.request.method, call.request.url) for call in responses.calls
|
|
362
|
-
] == BASE_API_CALLS + [
|
|
431
|
+
bulk_api_calls = [
|
|
363
432
|
(
|
|
364
433
|
"POST",
|
|
365
434
|
"http://testserver/api/v1/element/12341234-1234-1234-1234-123412341234/metadata/bulk/",
|
|
366
|
-
)
|
|
367
|
-
]
|
|
368
|
-
assert json.loads(responses.calls[-1].request.body)["metadata_list"] == [
|
|
369
|
-
{
|
|
370
|
-
"type": metadata_list[0]["type"].value,
|
|
371
|
-
"name": metadata_list[0]["name"],
|
|
372
|
-
"value": metadata_list[0]["value"],
|
|
373
|
-
"entity_id": metadata_list[0].get("entity_id"),
|
|
374
|
-
}
|
|
435
|
+
)
|
|
375
436
|
]
|
|
437
|
+
if batch_size != DEFAULT_BATCH_SIZE:
|
|
438
|
+
bulk_api_calls.append(
|
|
439
|
+
(
|
|
440
|
+
"POST",
|
|
441
|
+
"http://testserver/api/v1/element/12341234-1234-1234-1234-123412341234/metadata/bulk/",
|
|
442
|
+
)
|
|
443
|
+
)
|
|
444
|
+
|
|
445
|
+
assert len(responses.calls) == len(BASE_API_CALLS) + len(bulk_api_calls)
|
|
446
|
+
assert [
|
|
447
|
+
(call.request.method, call.request.url) for call in responses.calls
|
|
448
|
+
] == BASE_API_CALLS + bulk_api_calls
|
|
449
|
+
|
|
450
|
+
first_meta = {
|
|
451
|
+
**metadata_list[0],
|
|
452
|
+
"type": metadata_list[0]["type"].value,
|
|
453
|
+
"entity_id": None,
|
|
454
|
+
}
|
|
455
|
+
second_meta = {**metadata_list[1], "type": metadata_list[1]["type"].value}
|
|
456
|
+
empty_payload = {
|
|
457
|
+
"worker_run_id": "56785678-5678-5678-5678-567856785678",
|
|
458
|
+
"metadata_list": [],
|
|
459
|
+
}
|
|
460
|
+
|
|
461
|
+
bodies = []
|
|
462
|
+
first_call_idx = None
|
|
463
|
+
if batch_size > 1:
|
|
464
|
+
first_call_idx = -1
|
|
465
|
+
bodies.append({**empty_payload, "metadata_list": [first_meta, second_meta]})
|
|
466
|
+
else:
|
|
467
|
+
first_call_idx = -2
|
|
468
|
+
bodies.append({**empty_payload, "metadata_list": [first_meta]})
|
|
469
|
+
bodies.append({**empty_payload, "metadata_list": [second_meta]})
|
|
470
|
+
|
|
471
|
+
assert [
|
|
472
|
+
json.loads(bulk_call.request.body)
|
|
473
|
+
for bulk_call in responses.calls[first_call_idx:]
|
|
474
|
+
] == bodies
|
|
475
|
+
|
|
376
476
|
assert created_metadata_list == [
|
|
377
477
|
{
|
|
378
|
-
"id": "
|
|
478
|
+
"id": "fake_metadata_id1",
|
|
379
479
|
"type": metadata_list[0]["type"].value,
|
|
380
480
|
"name": metadata_list[0]["name"],
|
|
381
481
|
"value": metadata_list[0]["value"],
|
|
382
482
|
"dates": [],
|
|
383
|
-
"entity_id":
|
|
384
|
-
}
|
|
483
|
+
"entity_id": None,
|
|
484
|
+
},
|
|
485
|
+
{
|
|
486
|
+
"id": "fake_metadata_id2",
|
|
487
|
+
"type": metadata_list[1]["type"].value,
|
|
488
|
+
"name": metadata_list[1]["name"],
|
|
489
|
+
"value": metadata_list[1]["value"],
|
|
490
|
+
"dates": [],
|
|
491
|
+
"entity_id": metadata_list[1]["entity_id"],
|
|
492
|
+
},
|
|
385
493
|
]
|
|
386
494
|
|
|
387
495
|
|
|
@@ -474,37 +582,20 @@ def test_create_metadata_bulk_api_error(responses, mock_elements_worker):
|
|
|
474
582
|
responses.add(
|
|
475
583
|
responses.POST,
|
|
476
584
|
"http://testserver/api/v1/element/12341234-1234-1234-1234-123412341234/metadata/bulk/",
|
|
477
|
-
status=
|
|
585
|
+
status=418,
|
|
478
586
|
)
|
|
479
587
|
|
|
480
588
|
with pytest.raises(ErrorResponse):
|
|
481
589
|
mock_elements_worker.create_metadata_bulk(element, metadata_list)
|
|
482
590
|
|
|
483
|
-
assert len(responses.calls) == len(BASE_API_CALLS) +
|
|
591
|
+
assert len(responses.calls) == len(BASE_API_CALLS) + 1
|
|
484
592
|
assert [
|
|
485
593
|
(call.request.method, call.request.url) for call in responses.calls
|
|
486
594
|
] == BASE_API_CALLS + [
|
|
487
|
-
# We retry 5 times the API call
|
|
488
|
-
(
|
|
489
|
-
"POST",
|
|
490
|
-
"http://testserver/api/v1/element/12341234-1234-1234-1234-123412341234/metadata/bulk/",
|
|
491
|
-
),
|
|
492
|
-
(
|
|
493
|
-
"POST",
|
|
494
|
-
"http://testserver/api/v1/element/12341234-1234-1234-1234-123412341234/metadata/bulk/",
|
|
495
|
-
),
|
|
496
595
|
(
|
|
497
596
|
"POST",
|
|
498
597
|
"http://testserver/api/v1/element/12341234-1234-1234-1234-123412341234/metadata/bulk/",
|
|
499
|
-
)
|
|
500
|
-
(
|
|
501
|
-
"POST",
|
|
502
|
-
"http://testserver/api/v1/element/12341234-1234-1234-1234-123412341234/metadata/bulk/",
|
|
503
|
-
),
|
|
504
|
-
(
|
|
505
|
-
"POST",
|
|
506
|
-
"http://testserver/api/v1/element/12341234-1234-1234-1234-123412341234/metadata/bulk/",
|
|
507
|
-
),
|
|
598
|
+
)
|
|
508
599
|
]
|
|
509
600
|
|
|
510
601
|
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import pytest
|
|
2
|
+
|
|
3
|
+
from tests import PROCESS_ID
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
@pytest.mark.parametrize(
|
|
7
|
+
("with_image", "elements"),
|
|
8
|
+
[
|
|
9
|
+
(
|
|
10
|
+
False,
|
|
11
|
+
[
|
|
12
|
+
{
|
|
13
|
+
"id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa",
|
|
14
|
+
"type_id": "baaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa",
|
|
15
|
+
"name": "element 1",
|
|
16
|
+
"confidence": 1,
|
|
17
|
+
"image_id": None,
|
|
18
|
+
"image_width": None,
|
|
19
|
+
"image_height": None,
|
|
20
|
+
"image_url": None,
|
|
21
|
+
"polygon": None,
|
|
22
|
+
"rotation_angle": 0,
|
|
23
|
+
"mirrored": False,
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaa0",
|
|
27
|
+
"type_id": "baaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa",
|
|
28
|
+
"name": "element 2",
|
|
29
|
+
"confidence": 1,
|
|
30
|
+
"image_id": None,
|
|
31
|
+
"image_width": None,
|
|
32
|
+
"image_height": None,
|
|
33
|
+
"image_url": None,
|
|
34
|
+
"polygon": None,
|
|
35
|
+
"rotation_angle": 0,
|
|
36
|
+
"mirrored": False,
|
|
37
|
+
},
|
|
38
|
+
],
|
|
39
|
+
),
|
|
40
|
+
(
|
|
41
|
+
True,
|
|
42
|
+
[
|
|
43
|
+
{
|
|
44
|
+
"id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa",
|
|
45
|
+
"type_id": "baaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa",
|
|
46
|
+
"name": "element 1",
|
|
47
|
+
"confidence": 1,
|
|
48
|
+
"image_id": "aaa2aaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa",
|
|
49
|
+
"image_width": 76,
|
|
50
|
+
"image_height": 138,
|
|
51
|
+
"image_url": "http://somewhere.com/iiif/image.jpeg",
|
|
52
|
+
"polygon": [[0, 0], [0, 40], [20, 40], [20, 0]],
|
|
53
|
+
"rotation_angle": 0,
|
|
54
|
+
"mirrored": False,
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
"id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaa0",
|
|
58
|
+
"type_id": "baaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa",
|
|
59
|
+
"name": "element 2",
|
|
60
|
+
"confidence": 1,
|
|
61
|
+
"image_id": "aaa2aaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa",
|
|
62
|
+
"image_width": 138,
|
|
63
|
+
"image_height": 76,
|
|
64
|
+
"image_url": "http://somewhere.com/iiif/image.jpeg",
|
|
65
|
+
"polygon": [[0, 0], [0, 40], [20, 40], [20, 0]],
|
|
66
|
+
"rotation_angle": 0,
|
|
67
|
+
"mirrored": False,
|
|
68
|
+
},
|
|
69
|
+
],
|
|
70
|
+
),
|
|
71
|
+
],
|
|
72
|
+
)
|
|
73
|
+
def test_list_process_elements_with_image(
|
|
74
|
+
responses, mock_elements_worker, with_image, elements
|
|
75
|
+
):
|
|
76
|
+
responses.add(
|
|
77
|
+
responses.GET,
|
|
78
|
+
f"http://testserver/api/v1/process/{PROCESS_ID}/elements/?page_size=500&with_count=true&with_image={with_image}",
|
|
79
|
+
status=200,
|
|
80
|
+
json={
|
|
81
|
+
"count": 2,
|
|
82
|
+
"next": None,
|
|
83
|
+
"results": elements,
|
|
84
|
+
},
|
|
85
|
+
)
|
|
86
|
+
assert (
|
|
87
|
+
list(mock_elements_worker.list_process_elements(with_image=with_image))
|
|
88
|
+
== elements
|
|
89
|
+
)
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import uuid
|
|
2
2
|
|
|
3
3
|
import pytest
|
|
4
|
-
from apistar.exceptions import ErrorResponse
|
|
5
4
|
|
|
5
|
+
from arkindex.exceptions import ErrorResponse
|
|
6
6
|
from arkindex_worker.models import Artifact
|
|
7
|
-
from tests
|
|
7
|
+
from tests import FIXTURES_DIR
|
|
8
8
|
from tests.test_elements_worker import BASE_API_CALLS
|
|
9
9
|
|
|
10
10
|
TASK_ID = uuid.UUID("cafecafe-cafe-cafe-cafe-cafecafecafe")
|
|
@@ -33,22 +33,17 @@ def test_list_artifacts_api_error(responses, mock_dataset_worker):
|
|
|
33
33
|
responses.add(
|
|
34
34
|
responses.GET,
|
|
35
35
|
f"http://testserver/api/v1/task/{TASK_ID}/artifacts/",
|
|
36
|
-
status=
|
|
36
|
+
status=418,
|
|
37
37
|
)
|
|
38
38
|
|
|
39
39
|
with pytest.raises(ErrorResponse):
|
|
40
40
|
mock_dataset_worker.list_artifacts(task_id=TASK_ID)
|
|
41
41
|
|
|
42
|
-
assert len(responses.calls) == len(BASE_API_CALLS) +
|
|
42
|
+
assert len(responses.calls) == len(BASE_API_CALLS) + 1
|
|
43
43
|
assert [
|
|
44
44
|
(call.request.method, call.request.url) for call in responses.calls
|
|
45
45
|
] == BASE_API_CALLS + [
|
|
46
|
-
|
|
47
|
-
("GET", f"http://testserver/api/v1/task/{TASK_ID}/artifacts/"),
|
|
48
|
-
("GET", f"http://testserver/api/v1/task/{TASK_ID}/artifacts/"),
|
|
49
|
-
("GET", f"http://testserver/api/v1/task/{TASK_ID}/artifacts/"),
|
|
50
|
-
("GET", f"http://testserver/api/v1/task/{TASK_ID}/artifacts/"),
|
|
51
|
-
("GET", f"http://testserver/api/v1/task/{TASK_ID}/artifacts/"),
|
|
46
|
+
("GET", f"http://testserver/api/v1/task/{TASK_ID}/artifacts/")
|
|
52
47
|
]
|
|
53
48
|
|
|
54
49
|
|
|
@@ -153,7 +148,7 @@ def test_download_artifact_api_error(responses, mock_dataset_worker, default_art
|
|
|
153
148
|
responses.add(
|
|
154
149
|
responses.GET,
|
|
155
150
|
f"http://testserver/api/v1/task/{TASK_ID}/artifact/dataset_id.tar.zst",
|
|
156
|
-
status=
|
|
151
|
+
status=418,
|
|
157
152
|
)
|
|
158
153
|
|
|
159
154
|
with pytest.raises(ErrorResponse):
|
|
@@ -161,16 +156,11 @@ def test_download_artifact_api_error(responses, mock_dataset_worker, default_art
|
|
|
161
156
|
task_id=TASK_ID, artifact=default_artifact
|
|
162
157
|
)
|
|
163
158
|
|
|
164
|
-
assert len(responses.calls) == len(BASE_API_CALLS) +
|
|
159
|
+
assert len(responses.calls) == len(BASE_API_CALLS) + 1
|
|
165
160
|
assert [
|
|
166
161
|
(call.request.method, call.request.url) for call in responses.calls
|
|
167
162
|
] == BASE_API_CALLS + [
|
|
168
|
-
|
|
169
|
-
("GET", f"http://testserver/api/v1/task/{TASK_ID}/artifact/dataset_id.tar.zst"),
|
|
170
|
-
("GET", f"http://testserver/api/v1/task/{TASK_ID}/artifact/dataset_id.tar.zst"),
|
|
171
|
-
("GET", f"http://testserver/api/v1/task/{TASK_ID}/artifact/dataset_id.tar.zst"),
|
|
172
|
-
("GET", f"http://testserver/api/v1/task/{TASK_ID}/artifact/dataset_id.tar.zst"),
|
|
173
|
-
("GET", f"http://testserver/api/v1/task/{TASK_ID}/artifact/dataset_id.tar.zst"),
|
|
163
|
+
("GET", f"http://testserver/api/v1/task/{TASK_ID}/artifact/dataset_id.tar.zst")
|
|
174
164
|
]
|
|
175
165
|
|
|
176
166
|
|