arkindex-base-worker 0.3.7rc2__py3-none-any.whl → 0.3.7rc4__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.
@@ -139,12 +139,26 @@ def test_list_dataset_elements_wrong_param_dataset(mock_dataset_worker, payload,
139
139
  mock_dataset_worker.list_dataset_elements(**payload)
140
140
 
141
141
 
142
+ @pytest.mark.parametrize(
143
+ "sets",
144
+ [
145
+ ["set_1"],
146
+ ["set_1", "set_2", "set_3"],
147
+ ["set_1", "set_2", "set_3", "set_4"],
148
+ ],
149
+ )
142
150
  def test_list_dataset_elements_api_error(
143
- responses, mock_dataset_worker, default_dataset
151
+ responses, mock_dataset_worker, sets, default_dataset
144
152
  ):
153
+ default_dataset.selected_sets = sets
154
+ query_params = (
155
+ "?with_count=true"
156
+ if sets == default_dataset.sets
157
+ else "?set=set_1&with_count=true"
158
+ )
145
159
  responses.add(
146
160
  responses.GET,
147
- f"http://testserver/api/v1/datasets/{default_dataset.id}/elements/",
161
+ f"http://testserver/api/v1/datasets/{default_dataset.id}/elements/{query_params}",
148
162
  status=500,
149
163
  )
150
164
 
@@ -160,122 +174,107 @@ def test_list_dataset_elements_api_error(
160
174
  # The API call is retried 5 times
161
175
  (
162
176
  "GET",
163
- f"http://testserver/api/v1/datasets/{default_dataset.id}/elements/?with_count=true",
177
+ f"http://testserver/api/v1/datasets/{default_dataset.id}/elements/{query_params}",
164
178
  ),
165
179
  (
166
180
  "GET",
167
- f"http://testserver/api/v1/datasets/{default_dataset.id}/elements/?with_count=true",
181
+ f"http://testserver/api/v1/datasets/{default_dataset.id}/elements/{query_params}",
168
182
  ),
169
183
  (
170
184
  "GET",
171
- f"http://testserver/api/v1/datasets/{default_dataset.id}/elements/?with_count=true",
185
+ f"http://testserver/api/v1/datasets/{default_dataset.id}/elements/{query_params}",
172
186
  ),
173
187
  (
174
188
  "GET",
175
- f"http://testserver/api/v1/datasets/{default_dataset.id}/elements/?with_count=true",
189
+ f"http://testserver/api/v1/datasets/{default_dataset.id}/elements/{query_params}",
176
190
  ),
177
191
  (
178
192
  "GET",
179
- f"http://testserver/api/v1/datasets/{default_dataset.id}/elements/?with_count=true",
193
+ f"http://testserver/api/v1/datasets/{default_dataset.id}/elements/{query_params}",
180
194
  ),
181
195
  ]
182
196
 
183
197
 
198
+ @pytest.mark.parametrize(
199
+ "sets",
200
+ [
201
+ ["set_1"],
202
+ ["set_1", "set_2", "set_3"],
203
+ ["set_1", "set_2", "set_3", "set_4"],
204
+ ],
205
+ )
184
206
  def test_list_dataset_elements(
185
207
  responses,
186
208
  mock_dataset_worker,
209
+ sets,
187
210
  default_dataset,
188
211
  ):
189
- expected_results = [
190
- {
191
- "set": "set_1",
192
- "element": {
193
- "id": "0000",
194
- "type": "page",
195
- "name": "Test",
196
- "corpus": {},
197
- "thumbnail_url": None,
198
- "zone": {},
199
- "best_classes": None,
200
- "has_children": None,
201
- "worker_version_id": None,
202
- "worker_run_id": None,
203
- },
204
- },
205
- {
206
- "set": "set_1",
207
- "element": {
208
- "id": "1111",
209
- "type": "page",
210
- "name": "Test 2",
211
- "corpus": {},
212
- "thumbnail_url": None,
213
- "zone": {},
214
- "best_classes": None,
215
- "has_children": None,
216
- "worker_version_id": None,
217
- "worker_run_id": None,
218
- },
219
- },
220
- {
221
- "set": "set_2",
222
- "element": {
223
- "id": "2222",
224
- "type": "page",
225
- "name": "Test 3",
226
- "corpus": {},
227
- "thumbnail_url": None,
228
- "zone": {},
229
- "best_classes": None,
230
- "has_children": None,
231
- "worker_version_id": None,
232
- "worker_run_id": None,
233
- },
234
- },
235
- {
236
- "set": "set_3",
237
- "element": {
238
- "id": "3333",
239
- "type": "page",
240
- "name": "Test 4",
241
- "corpus": {},
242
- "thumbnail_url": None,
243
- "zone": {},
244
- "best_classes": None,
245
- "has_children": None,
246
- "worker_version_id": None,
247
- "worker_run_id": None,
212
+ default_dataset.selected_sets = sets
213
+
214
+ dataset_elements = []
215
+ for split in default_dataset.sets:
216
+ index = split[-1]
217
+ dataset_elements.append(
218
+ {
219
+ "set": split,
220
+ "element": {
221
+ "id": str(index) * 4,
222
+ "type": "page",
223
+ "name": f"Test {index}",
224
+ "corpus": {},
225
+ "thumbnail_url": None,
226
+ "zone": {},
227
+ "best_classes": None,
228
+ "has_children": None,
229
+ "worker_version_id": None,
230
+ "worker_run_id": None,
231
+ },
232
+ }
233
+ )
234
+ if split == "set_1":
235
+ dataset_elements.append({**dataset_elements[-1]})
236
+ dataset_elements[-1]["element"]["name"] = f"Test {index} (bis)"
237
+
238
+ # All sets are selected, we call the unfiltered endpoint once
239
+ if default_dataset.sets == default_dataset.selected_sets:
240
+ expected_results = dataset_elements
241
+ responses.add(
242
+ responses.GET,
243
+ f"http://testserver/api/v1/datasets/{default_dataset.id}/elements/?with_count=true",
244
+ status=200,
245
+ json={
246
+ "count": len(expected_results),
247
+ "next": None,
248
+ "results": expected_results,
248
249
  },
249
- },
250
- ]
251
- responses.add(
252
- responses.GET,
253
- f"http://testserver/api/v1/datasets/{default_dataset.id}/elements/",
254
- status=200,
255
- json={
256
- "count": 4,
257
- "next": None,
258
- "results": expected_results
259
- # `set_4` is not in `default_dataset.selected_sets`
260
- + [
261
- {
262
- "set": "set_4",
263
- "element": {
264
- "id": "4444",
265
- "type": "page",
266
- "name": "Test 5",
267
- "corpus": {},
268
- "thumbnail_url": None,
269
- "zone": {},
270
- "best_classes": None,
271
- "has_children": None,
272
- "worker_version_id": None,
273
- "worker_run_id": None,
274
- },
275
- }
276
- ],
277
- },
278
- )
250
+ )
251
+ expected_calls = [
252
+ f"http://testserver/api/v1/datasets/{default_dataset.id}/elements/?with_count=true"
253
+ ]
254
+
255
+ # Not all sets are selected, we call the filtered endpoint multiple times, once per set
256
+ else:
257
+ expected_results, expected_calls = [], []
258
+ for selected_set in default_dataset.selected_sets:
259
+ partial_results = [
260
+ element
261
+ for element in dataset_elements
262
+ if element["set"] == selected_set
263
+ ]
264
+ expected_results += partial_results
265
+ responses.add(
266
+ responses.GET,
267
+ f"http://testserver/api/v1/datasets/{default_dataset.id}/elements/?set={selected_set}&with_count=true",
268
+ status=200,
269
+ json={
270
+ "count": len(partial_results),
271
+ "next": None,
272
+ "results": partial_results,
273
+ },
274
+ )
275
+ expected_calls += [
276
+ f"http://testserver/api/v1/datasets/{default_dataset.id}/elements/?set={selected_set}&with_count=true"
277
+ ]
279
278
 
280
279
  for idx, element in enumerate(
281
280
  mock_dataset_worker.list_dataset_elements(dataset=default_dataset)
@@ -285,15 +284,10 @@ def test_list_dataset_elements(
285
284
  expected_results[idx]["element"],
286
285
  )
287
286
 
288
- assert len(responses.calls) == len(BASE_API_CALLS) + 1
287
+ assert len(responses.calls) == len(BASE_API_CALLS) + len(expected_calls)
289
288
  assert [
290
289
  (call.request.method, call.request.url) for call in responses.calls
291
- ] == BASE_API_CALLS + [
292
- (
293
- "GET",
294
- f"http://testserver/api/v1/datasets/{default_dataset.id}/elements/?with_count=true",
295
- ),
296
- ]
290
+ ] == BASE_API_CALLS + [("GET", expected_call) for expected_call in expected_calls]
297
291
 
298
292
 
299
293
  @pytest.mark.parametrize(
@@ -1797,9 +1797,12 @@ def test_list_element_children_wrong_worker_version(
1797
1797
  elt = Element({"id": "12341234-1234-1234-1234-123412341234"})
1798
1798
 
1799
1799
  # WARNING: pytest.deprecated_call must be placed BEFORE pytest.raises, otherwise `match` argument won't be checked
1800
- with pytest.deprecated_call(
1801
- match=f"`{param}` usage is deprecated. Consider using `{alternative}` instead."
1802
- ), pytest.raises(AssertionError, match=f"{param} should be of type str or bool"):
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
+ ):
1803
1806
  mock_elements_worker.list_element_children(
1804
1807
  element=elt,
1805
1808
  **{param: value},
@@ -1838,10 +1841,13 @@ def test_list_element_children_wrong_bool_worker_version(
1838
1841
  elt = Element({"id": "12341234-1234-1234-1234-123412341234"})
1839
1842
 
1840
1843
  # WARNING: pytest.deprecated_call must be placed BEFORE pytest.raises, otherwise `match` argument won't be checked
1841
- with pytest.deprecated_call(
1842
- match=f"`{param}` usage is deprecated. Consider using `{alternative}` instead."
1843
- ), pytest.raises(
1844
- AssertionError, match=f"if of type bool, {param} can only be set to False"
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
+ ),
1845
1851
  ):
1846
1852
  mock_elements_worker.list_element_children(
1847
1853
  element=elt,
@@ -2323,9 +2329,12 @@ def test_list_element_parents_wrong_worker_version(
2323
2329
  elt = Element({"id": "12341234-1234-1234-1234-123412341234"})
2324
2330
 
2325
2331
  # WARNING: pytest.deprecated_call must be placed BEFORE pytest.raises, otherwise `match` argument won't be checked
2326
- with pytest.deprecated_call(
2327
- match=f"`{param}` usage is deprecated. Consider using `{alternative}` instead."
2328
- ), pytest.raises(AssertionError, match=f"{param} should be of type str or bool"):
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
+ ):
2329
2338
  mock_elements_worker.list_element_parents(
2330
2339
  element=elt,
2331
2340
  **{param: value},
@@ -2364,10 +2373,13 @@ def test_list_element_parents_wrong_bool_worker_version(
2364
2373
  elt = Element({"id": "12341234-1234-1234-1234-123412341234"})
2365
2374
 
2366
2375
  # WARNING: pytest.deprecated_call must be placed BEFORE pytest.raises, otherwise `match` argument won't be checked
2367
- with pytest.deprecated_call(
2368
- match=f"`{param}` usage is deprecated. Consider using `{alternative}` instead."
2369
- ), pytest.raises(
2370
- AssertionError, match=f"if of type bool, {param} can only be set to False"
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
+ ),
2371
2383
  ):
2372
2384
  mock_elements_worker.list_element_parents(
2373
2385
  element=elt,
@@ -1727,10 +1727,13 @@ def test_list_transcriptions_wrong_worker_version(mock_elements_worker):
1727
1727
  elt = Element({"id": "12341234-1234-1234-1234-123412341234"})
1728
1728
 
1729
1729
  # WARNING: pytest.deprecated_call must be placed BEFORE pytest.raises, otherwise `match` argument won't be checked
1730
- with pytest.deprecated_call(
1731
- match="`worker_version` usage is deprecated. Consider using `worker_run` instead."
1732
- ), pytest.raises(
1733
- AssertionError, match="worker_version should be of type str or bool"
1730
+ with (
1731
+ pytest.deprecated_call(
1732
+ match="`worker_version` usage is deprecated. Consider using `worker_run` instead."
1733
+ ),
1734
+ pytest.raises(
1735
+ AssertionError, match="worker_version should be of type str or bool"
1736
+ ),
1734
1737
  ):
1735
1738
  mock_elements_worker.list_transcriptions(
1736
1739
  element=elt,
@@ -1754,10 +1757,14 @@ def test_list_transcriptions_wrong_bool_worker_version(mock_elements_worker):
1754
1757
  elt = Element({"id": "12341234-1234-1234-1234-123412341234"})
1755
1758
 
1756
1759
  # WARNING: pytest.deprecated_call must be placed BEFORE pytest.raises, otherwise `match` argument won't be checked
1757
- with pytest.deprecated_call(
1758
- match="`worker_version` usage is deprecated. Consider using `worker_run` instead."
1759
- ), pytest.raises(
1760
- AssertionError, match="if of type bool, worker_version can only be set to False"
1760
+ with (
1761
+ pytest.deprecated_call(
1762
+ match="`worker_version` usage is deprecated. Consider using `worker_run` instead."
1763
+ ),
1764
+ pytest.raises(
1765
+ AssertionError,
1766
+ match="if of type bool, worker_version can only be set to False",
1767
+ ),
1761
1768
  ):
1762
1769
  mock_elements_worker.list_transcriptions(
1763
1770
  element=elt,
@@ -62,9 +62,10 @@ def test_get_worker_version_slug(mocker, fake_dummy_worker):
62
62
 
63
63
  def test_get_worker_version_slug_none(fake_dummy_worker):
64
64
  # WARNING: pytest.deprecated_call must be placed BEFORE pytest.raises, otherwise `match` argument won't be checked
65
- with pytest.deprecated_call(
66
- match="WorkerVersion usage is deprecated."
67
- ), pytest.raises(ValueError, match="No worker version ID"):
65
+ with (
66
+ pytest.deprecated_call(match="WorkerVersion usage is deprecated."),
67
+ pytest.raises(ValueError, match="No worker version ID"),
68
+ ):
68
69
  fake_dummy_worker.get_worker_version_slug(None)
69
70
 
70
71
 
@@ -309,7 +310,7 @@ def test_start_activity_error(
309
310
  ),
310
311
  ]
311
312
  assert logger.error.call_args_list == [
312
- mocker.call("Ran on 1 elements: 0 completed, 1 failed")
313
+ mocker.call("Ran on 1 element: 0 completed, 1 failed")
313
314
  ]
314
315
 
315
316
 
@@ -467,6 +468,10 @@ def test_worker_config_multiple_source(
467
468
  "id": "12341234-1234-1234-1234-123412341234",
468
469
  "name": "Model version 1337",
469
470
  "configuration": model_config,
471
+ "model": {
472
+ "id": "hahahaha-haha-haha-haha-hahahahahaha",
473
+ "name": "My model",
474
+ },
470
475
  },
471
476
  "process": {
472
477
  "name": None,
tests/test_image.py CHANGED
@@ -7,6 +7,7 @@ from pathlib import Path
7
7
 
8
8
  import pytest
9
9
  from PIL import Image, ImageChops, ImageOps
10
+ from requests import HTTPError
10
11
 
11
12
  from arkindex_worker.cache import CachedElement, create_tables, init_cache_db
12
13
  from arkindex_worker.image import (
@@ -19,6 +20,7 @@ from arkindex_worker.image import (
19
20
  polygon_bounding_box,
20
21
  revert_orientation,
21
22
  trim_polygon,
23
+ upload_image,
22
24
  )
23
25
  from arkindex_worker.models import Element
24
26
 
@@ -547,3 +549,38 @@ def test_download_image_retry_with_max(responses):
547
549
  assert list(map(attrgetter("request.url"), responses.calls)) == [full_url] * 3 + [
548
550
  max_url
549
551
  ]
552
+
553
+
554
+ def test_upload_image_retries(responses):
555
+ dest_url = "https://blabla.com/iiif/2/image_path.jpg/full/full/0/default.jpg"
556
+ responses.add(
557
+ responses.PUT,
558
+ dest_url,
559
+ status=400,
560
+ )
561
+
562
+ image = Image.open(FULL_IMAGE).convert("RGB")
563
+ with pytest.raises(
564
+ HTTPError, match=f"400 Client Error: Bad Request for url: {dest_url}"
565
+ ):
566
+ upload_image(image, dest_url)
567
+
568
+ # We try 3 times
569
+ assert len(responses.calls) == 3
570
+ assert list(map(attrgetter("request.url"), responses.calls)) == [dest_url] * 3
571
+
572
+
573
+ def test_upload_image(responses):
574
+ dest_url = "https://blabla.com/iiif/2/image_path.jpg/full/full/0/default.jpg"
575
+ responses.add(
576
+ responses.PUT,
577
+ dest_url,
578
+ status=200,
579
+ )
580
+
581
+ image = Image.open(FULL_IMAGE).convert("RGB")
582
+ resp = upload_image(image, dest_url)
583
+ assert resp
584
+
585
+ assert len(responses.calls) == 1
586
+ assert list(map(attrgetter("request.url"), responses.calls)) == [dest_url]
@@ -1,41 +0,0 @@
1
- arkindex_worker/__init__.py,sha256=OlgCtTC9MaWeejviY0a3iQpALcRQGMVArFVVYwTF6I8,162
2
- arkindex_worker/cache.py,sha256=FTlB0coXofn5zTNRTcVIvh709mcw4a1bPGqkwWjKs3w,11248
3
- arkindex_worker/image.py,sha256=uwfUE9hy0Iw-e3vU7OHmLSqouxbznWq08SykXmPD1Cs,14107
4
- arkindex_worker/models.py,sha256=DVrZPIurSiOoHvj3t_Szwd0j1t6pnwBx_dqwhNakzN0,9528
5
- arkindex_worker/utils.py,sha256=_lC1-RYvNWXEkK-AuF4_FraoggP1tYPdalNFSj4jDb4,6885
6
- arkindex_worker/worker/__init__.py,sha256=ev_EI7AA4qrQhH4B5WJf2LClcMVWPcxmaz_6L6Fp1V8,19383
7
- arkindex_worker/worker/base.py,sha256=qPcf-oOFtf7fLPFsQOukcLpkdeXBW4tpw99wCbio6Hw,19599
8
- arkindex_worker/worker/classification.py,sha256=0OiwxV9lb97Zs3kODm3hzyk0V7IxBTiW5SL6AYgRH1M,10351
9
- arkindex_worker/worker/dataset.py,sha256=IaXQXO9Zj-u7H0fvuDXOzf9FRga22eub_X-LYQHEpYY,3026
10
- arkindex_worker/worker/element.py,sha256=4f893hTSbk8QBD48xUKgHIzpr4wMxyxy634MqSwqebg,33847
11
- arkindex_worker/worker/entity.py,sha256=YT2Ttdn-L5TRoDdhOI3Z4GE1vtkWl7tKZqbYrtxZ2Ug,14630
12
- arkindex_worker/worker/metadata.py,sha256=XEKkwFeOflw0EsNwJhcCfv32iCCZwvQqYIyaqSEMNQc,6670
13
- arkindex_worker/worker/task.py,sha256=cz3wJNPgogZv1lm_3lm7WScitQtYQtL6H6I7Xokq208,1475
14
- arkindex_worker/worker/training.py,sha256=rhg4TPFo0ignnCkgbekUYmNXX8u2iZGyeM1VCs1R5kI,10140
15
- arkindex_worker/worker/transcription.py,sha256=6R7ofcGnNqX4rjT0kRKIE-G9FHq2TJ1tfztNM5sTqYE,20464
16
- arkindex_worker/worker/version.py,sha256=ogEpGdJ9GVA-eer6GMt6tiIvnuwfad6lDjdLNa6fiUQ,1926
17
- tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
18
- tests/conftest.py,sha256=wzKXRnS7OKQCNHrlDaQhMC8EXlsQTY_S4L9U_hXbjpM,22004
19
- tests/test_base_worker.py,sha256=Uq6_MpLW23gmKFXkU-SyDUaA_4dlViLBGG4e3gpBBz0,24512
20
- tests/test_cache.py,sha256=ii0gyr0DrG7ChEs7pmT8hMdSguAOAcCze4bRMiFQxuk,10640
21
- tests/test_dataset_worker.py,sha256=Y-g354MroQ1aYAZnqM5dhqgZZoDgpbHxpEZrcaN7SJY,29305
22
- tests/test_element.py,sha256=2G9M15TLxQRmvrWM9Kw2ucnElh4kSv_oF_5FYwwAxTY,13181
23
- tests/test_image.py,sha256=nIT0NhmuHtD9I1rcMSvqSfjQqvTE5Ko8tAQGLIkm_zo,15232
24
- tests/test_merge.py,sha256=Q4zCbtZbe0wBfqE56gvAD06c6pDuhqnjKaioFqIgAQw,8331
25
- tests/test_utils.py,sha256=pFXegcBvIuy1tJDDSgQtCbC_tRaoLjd2055R5lu3hS0,1236
26
- tests/test_elements_worker/__init__.py,sha256=Fh4nkbbyJSMv_VtjQxnWrOqTnxXaaWI8S9WU0VrzCHs,179
27
- tests/test_elements_worker/test_classifications.py,sha256=0_6vryoQc2-s3CQWANsEvajkyC3aub34cxb3r97pRsk,32027
28
- tests/test_elements_worker/test_cli.py,sha256=BsFTswLti63WAZ2pf6ipiZKWJJyCQuSfuKnSlESuK8g,2878
29
- tests/test_elements_worker/test_dataset.py,sha256=uqgu5Jpazp2mH8p26jCn7RkJ7jdWpYKdJimWpeqaK1o,13251
30
- tests/test_elements_worker/test_elements.py,sha256=DOw1LKgJeCCFtvtQssBytIvE21mgiikhbkPglcpqRtA,84823
31
- tests/test_elements_worker/test_entities.py,sha256=yi1mXzvKvNwUNMzo0UZ56YOIJstYHcLyeepPJ8f10MQ,34557
32
- tests/test_elements_worker/test_metadata.py,sha256=b9CNv4W31TRJqYauvX_pRIN2SvnybaLqF-FWoFwa2Vc,18672
33
- tests/test_elements_worker/test_task.py,sha256=FCpxE9UpouKXgjGvWgNHEai_Hiy2d1YmqRG-_v2s27s,6312
34
- tests/test_elements_worker/test_training.py,sha256=WeG-cDuJ-YhPgfKH47TtXBxyargtLuk7c8tsik2WnL8,8414
35
- tests/test_elements_worker/test_transcriptions.py,sha256=w-Fs4dS8RNDChp-9BgC087LiKGJYlIWyI8OreWEj-E4,73373
36
- tests/test_elements_worker/test_worker.py,sha256=3T4f4SkZbyk_lRPikINKnzToNnLVGHcYxc3kylGSae4,17017
37
- arkindex_base_worker-0.3.7rc2.dist-info/LICENSE,sha256=NVshRi1efwVezMfW7xXYLrdDr2Li1AfwfGOd5WuH1kQ,1063
38
- arkindex_base_worker-0.3.7rc2.dist-info/METADATA,sha256=6iGFf8SnxJmqnaBHh9UCmCEV1sPxzhwuHApKOng_lVQ,3411
39
- arkindex_base_worker-0.3.7rc2.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
40
- arkindex_base_worker-0.3.7rc2.dist-info/top_level.txt,sha256=TtagLI8LSv7GE7nG8MQqDFAJ5bNDPJn7Z5vizOgrWkA,22
41
- arkindex_base_worker-0.3.7rc2.dist-info/RECORD,,