arkindex-base-worker 0.3.7rc4__py3-none-any.whl → 0.5.0a1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. {arkindex_base_worker-0.3.7rc4.dist-info → arkindex_base_worker-0.5.0a1.dist-info}/METADATA +18 -19
  2. arkindex_base_worker-0.5.0a1.dist-info/RECORD +61 -0
  3. {arkindex_base_worker-0.3.7rc4.dist-info → arkindex_base_worker-0.5.0a1.dist-info}/WHEEL +1 -1
  4. {arkindex_base_worker-0.3.7rc4.dist-info → arkindex_base_worker-0.5.0a1.dist-info}/top_level.txt +2 -0
  5. arkindex_worker/cache.py +1 -1
  6. arkindex_worker/image.py +167 -2
  7. arkindex_worker/models.py +18 -0
  8. arkindex_worker/utils.py +98 -4
  9. arkindex_worker/worker/__init__.py +117 -218
  10. arkindex_worker/worker/base.py +39 -46
  11. arkindex_worker/worker/classification.py +45 -29
  12. arkindex_worker/worker/corpus.py +86 -0
  13. arkindex_worker/worker/dataset.py +89 -26
  14. arkindex_worker/worker/element.py +352 -91
  15. arkindex_worker/worker/entity.py +13 -11
  16. arkindex_worker/worker/image.py +21 -0
  17. arkindex_worker/worker/metadata.py +26 -16
  18. arkindex_worker/worker/process.py +92 -0
  19. arkindex_worker/worker/task.py +5 -4
  20. arkindex_worker/worker/training.py +25 -10
  21. arkindex_worker/worker/transcription.py +89 -68
  22. arkindex_worker/worker/version.py +3 -1
  23. hooks/pre_gen_project.py +3 -0
  24. tests/__init__.py +8 -0
  25. tests/conftest.py +47 -58
  26. tests/test_base_worker.py +212 -12
  27. tests/test_dataset_worker.py +294 -437
  28. tests/test_elements_worker/{test_classifications.py → test_classification.py} +313 -200
  29. tests/test_elements_worker/test_cli.py +3 -11
  30. tests/test_elements_worker/test_corpus.py +168 -0
  31. tests/test_elements_worker/test_dataset.py +106 -157
  32. tests/test_elements_worker/test_element.py +427 -0
  33. tests/test_elements_worker/test_element_create_multiple.py +715 -0
  34. tests/test_elements_worker/test_element_create_single.py +528 -0
  35. tests/test_elements_worker/test_element_list_children.py +969 -0
  36. tests/test_elements_worker/test_element_list_parents.py +530 -0
  37. tests/test_elements_worker/{test_entities.py → test_entity_create.py} +37 -195
  38. tests/test_elements_worker/test_entity_list_and_check.py +160 -0
  39. tests/test_elements_worker/test_image.py +66 -0
  40. tests/test_elements_worker/test_metadata.py +252 -161
  41. tests/test_elements_worker/test_process.py +89 -0
  42. tests/test_elements_worker/test_task.py +8 -18
  43. tests/test_elements_worker/test_training.py +17 -8
  44. tests/test_elements_worker/test_transcription_create.py +873 -0
  45. tests/test_elements_worker/test_transcription_create_with_elements.py +951 -0
  46. tests/test_elements_worker/test_transcription_list.py +450 -0
  47. tests/test_elements_worker/test_version.py +60 -0
  48. tests/test_elements_worker/test_worker.py +578 -293
  49. tests/test_image.py +542 -209
  50. tests/test_merge.py +1 -2
  51. tests/test_utils.py +89 -4
  52. worker-demo/tests/__init__.py +0 -0
  53. worker-demo/tests/conftest.py +32 -0
  54. worker-demo/tests/test_worker.py +12 -0
  55. worker-demo/worker_demo/__init__.py +6 -0
  56. worker-demo/worker_demo/worker.py +19 -0
  57. arkindex_base_worker-0.3.7rc4.dist-info/RECORD +0 -41
  58. tests/test_elements_worker/test_elements.py +0 -2713
  59. tests/test_elements_worker/test_transcriptions.py +0 -2119
  60. {arkindex_base_worker-0.3.7rc4.dist-info → arkindex_base_worker-0.5.0a1.dist-info}/LICENSE +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=500,
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) + 5
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
155
  (
168
156
  "POST",
169
157
  "http://testserver/api/v1/element/12341234-1234-1234-1234-123412341234/metadata/",
170
- ),
171
- (
172
- "POST",
173
- "http://testserver/api/v1/element/12341234-1234-1234-1234-123412341234/metadata/",
174
- ),
158
+ )
175
159
  ]
176
160
 
177
161
 
@@ -245,148 +229,272 @@ 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
- "metadata_list",
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_metadatas(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
- responses.add(
265
- responses.POST,
266
- "http://testserver/api/v1/element/12341234-1234-1234-1234-123412341234/metadata/bulk/",
267
- status=201,
268
- json={
269
- "worker_run_id": "56785678-5678-5678-5678-567856785678",
270
- "metadata_list": [
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
- ],
280
- },
281
- )
282
235
 
283
- created_metadata_list = mock_elements_worker.create_metadatas(
284
- element, metadata_list
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",
243
+ },
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
+ )
292
+
293
+ created_metadata_list = mock_elements_worker.create_metadata_bulk(
294
+ element, metadata_list, batch_size=batch_size
285
295
  )
286
296
 
287
- assert len(responses.calls) == len(BASE_API_CALLS) + 1
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": "fake_metadata_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": metadata_list[0].get("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
- )
330
- def test_create_metadatas_cached_element(
331
- responses, mock_elements_worker_with_cache, metadata_list
362
+ @pytest.mark.parametrize("batch_size", [DEFAULT_BATCH_SIZE, 1])
363
+ def test_create_metadata_bulk_cached_element(
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
- responses.add(
337
- responses.POST,
338
- "http://testserver/api/v1/element/12341234-1234-1234-1234-123412341234/metadata/bulk/",
339
- status=201,
340
- json={
341
- "worker_run_id": "56785678-5678-5678-5678-567856785678",
342
- "metadata_list": [
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
- ],
352
- },
353
- )
354
369
 
355
- created_metadata_list = mock_elements_worker_with_cache.create_metadatas(
356
- element, metadata_list
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",
377
+ },
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
+ )
426
+
427
+ created_metadata_list = mock_elements_worker_with_cache.create_metadata_bulk(
428
+ element, metadata_list, batch_size=batch_size
357
429
  )
358
430
 
359
- assert len(responses.calls) == len(BASE_API_CALLS) + 1
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": "fake_metadata_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": metadata_list[0].get("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
 
388
496
  @pytest.mark.parametrize("wrong_element", [None, "not_element_type", 1234, 12.5])
389
- def test_create_metadatas_wrong_element(mock_elements_worker, wrong_element):
497
+ def test_create_metadata_bulk_wrong_element(mock_elements_worker, wrong_element):
390
498
  wrong_metadata_list = [
391
499
  {"type": MetaType.Text, "name": "fake_name", "value": "fake_value"}
392
500
  ]
@@ -394,13 +502,13 @@ def test_create_metadatas_wrong_element(mock_elements_worker, wrong_element):
394
502
  AssertionError,
395
503
  match="element shouldn't be null and should be of type Element or CachedElement",
396
504
  ):
397
- mock_elements_worker.create_metadatas(
398
- element=wrong_element, metadatas=wrong_metadata_list
505
+ mock_elements_worker.create_metadata_bulk(
506
+ element=wrong_element, metadata_list=wrong_metadata_list
399
507
  )
400
508
 
401
509
 
402
510
  @pytest.mark.parametrize("wrong_type", [None, "not_metadata_type", 1234, 12.5])
403
- def test_create_metadatas_wrong_type(mock_elements_worker, wrong_type):
511
+ def test_create_metadata_bulk_wrong_type(mock_elements_worker, wrong_type):
404
512
  element = Element({"id": "12341234-1234-1234-1234-123412341234"})
405
513
  wrong_metadata_list = [
406
514
  {"type": wrong_type, "name": "fake_name", "value": "fake_value"}
@@ -408,13 +516,13 @@ def test_create_metadatas_wrong_type(mock_elements_worker, wrong_type):
408
516
  with pytest.raises(
409
517
  AssertionError, match="type shouldn't be null and should be of type MetaType"
410
518
  ):
411
- mock_elements_worker.create_metadatas(
412
- element=element, metadatas=wrong_metadata_list
519
+ mock_elements_worker.create_metadata_bulk(
520
+ element=element, metadata_list=wrong_metadata_list
413
521
  )
414
522
 
415
523
 
416
524
  @pytest.mark.parametrize("wrong_name", [None, 1234, 12.5, [1, 2, 3, 4]])
417
- def test_create_metadatas_wrong_name(mock_elements_worker, wrong_name):
525
+ def test_create_metadata_bulk_wrong_name(mock_elements_worker, wrong_name):
418
526
  element = Element({"id": "fake_element_id"})
419
527
  wrong_metadata_list = [
420
528
  {"type": MetaType.Text, "name": wrong_name, "value": "fake_value"}
@@ -422,13 +530,13 @@ def test_create_metadatas_wrong_name(mock_elements_worker, wrong_name):
422
530
  with pytest.raises(
423
531
  AssertionError, match="name shouldn't be null and should be of type str"
424
532
  ):
425
- mock_elements_worker.create_metadatas(
426
- element=element, metadatas=wrong_metadata_list
533
+ mock_elements_worker.create_metadata_bulk(
534
+ element=element, metadata_list=wrong_metadata_list
427
535
  )
428
536
 
429
537
 
430
538
  @pytest.mark.parametrize("wrong_value", [None, [1, 2, 3, 4]])
431
- def test_create_metadatas_wrong_value(mock_elements_worker, wrong_value):
539
+ def test_create_metadata_bulk_wrong_value(mock_elements_worker, wrong_value):
432
540
  element = Element({"id": "fake_element_id"})
433
541
  wrong_metadata_list = [
434
542
  {"type": MetaType.Text, "name": "fake_name", "value": wrong_value}
@@ -439,13 +547,13 @@ def test_create_metadatas_wrong_value(mock_elements_worker, wrong_value):
439
547
  "value shouldn't be null and should be of type (str or float or int)"
440
548
  ),
441
549
  ):
442
- mock_elements_worker.create_metadatas(
443
- element=element, metadatas=wrong_metadata_list
550
+ mock_elements_worker.create_metadata_bulk(
551
+ element=element, metadata_list=wrong_metadata_list
444
552
  )
445
553
 
446
554
 
447
555
  @pytest.mark.parametrize("wrong_entity", [[1, 2, 3, 4], 1234, 12.5])
448
- def test_create_metadatas_wrong_entity(mock_elements_worker, wrong_entity):
556
+ def test_create_metadata_bulk_wrong_entity(mock_elements_worker, wrong_entity):
449
557
  element = Element({"id": "fake_element_id"})
450
558
  wrong_metadata_list = [
451
559
  {
@@ -456,12 +564,12 @@ def test_create_metadatas_wrong_entity(mock_elements_worker, wrong_entity):
456
564
  }
457
565
  ]
458
566
  with pytest.raises(AssertionError, match="entity_id should be None or a str"):
459
- mock_elements_worker.create_metadatas(
460
- element=element, metadatas=wrong_metadata_list
567
+ mock_elements_worker.create_metadata_bulk(
568
+ element=element, metadata_list=wrong_metadata_list
461
569
  )
462
570
 
463
571
 
464
- def test_create_metadatas_api_error(responses, mock_elements_worker):
572
+ def test_create_metadata_bulk_api_error(responses, mock_elements_worker):
465
573
  element = Element({"id": "12341234-1234-1234-1234-123412341234"})
466
574
  metadata_list = [
467
575
  {
@@ -474,37 +582,20 @@ def test_create_metadatas_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=500,
585
+ status=418,
478
586
  )
479
587
 
480
588
  with pytest.raises(ErrorResponse):
481
- mock_elements_worker.create_metadatas(element, metadata_list)
589
+ mock_elements_worker.create_metadata_bulk(element, metadata_list)
482
590
 
483
- assert len(responses.calls) == len(BASE_API_CALLS) + 5
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
+ )