nucliadb 6.2.1.post2803__py3-none-any.whl → 6.2.1.post2814__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.
@@ -0,0 +1,61 @@
1
+ # Copyright (C) 2021 Bosutech XXI S.L.
2
+ #
3
+ # nucliadb is offered under the AGPL v3.0 and as commercial software.
4
+ # For commercial licensing, contact us at info@nuclia.com.
5
+ #
6
+ # AGPL:
7
+ # This program is free software: you can redistribute it and/or modify
8
+ # it under the terms of the GNU Affero General Public License as
9
+ # published by the Free Software Foundation, either version 3 of the
10
+ # License, or (at your option) any later version.
11
+ #
12
+ # This program is distributed in the hope that it will be useful,
13
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ # GNU Affero General Public License for more details.
16
+ #
17
+ # You should have received a copy of the GNU Affero General Public License
18
+ # along with this program. If not, see <http://www.gnu.org/licenses/>.
19
+ #
20
+
21
+ """Migration #28
22
+
23
+ Add a key to each vectorset to know how to build the storage key for extracted vectors
24
+ """
25
+
26
+ import logging
27
+
28
+ from nucliadb.common import datamanagers
29
+ from nucliadb.migrator.context import ExecutionContext
30
+ from nucliadb_protos import knowledgebox_pb2
31
+
32
+ logger = logging.getLogger(__name__)
33
+
34
+
35
+ async def migrate(context: ExecutionContext) -> None: ...
36
+
37
+
38
+ async def migrate_kb(context: ExecutionContext, kbid: str) -> None:
39
+ async with datamanagers.with_rw_transaction() as txn:
40
+ vectorsets = [vs async for (_vid, vs) in datamanagers.vectorsets.iter(txn, kbid=kbid)]
41
+
42
+ if len(vectorsets) == 0: # pragma: nocover
43
+ # should never happen, everyone should have at least one
44
+ logger.warning(f"KB has no vectorsets!", extra={"kbid": kbid})
45
+ return
46
+
47
+ elif len(vectorsets) == 1:
48
+ logger.info(f"Migrating KB with a single vectorset", extra={"kbid": kbid})
49
+ vectorset = vectorsets[0]
50
+ vectorset.storage_key_kind = knowledgebox_pb2.VectorSetConfig.StorageKeyKind.LEGACY
51
+ await datamanagers.vectorsets.set(txn, kbid=kbid, config=vectorset)
52
+
53
+ else:
54
+ logger.info(f"Migrating KB with {len(vectorsets)} vectorsets", extra={"kbid": kbid})
55
+ for vectorset in vectorsets:
56
+ vectorset.storage_key_kind = (
57
+ knowledgebox_pb2.VectorSetConfig.StorageKeyKind.VECTORSET_PREFIX
58
+ )
59
+ await datamanagers.vectorsets.set(txn, kbid=kbid, config=vectorset)
60
+
61
+ await txn.commit()
@@ -17,21 +17,25 @@
17
17
  # You should have received a copy of the GNU Affero General Public License
18
18
  # along with this program. If not, see <http://www.gnu.org/licenses/>.
19
19
  #
20
- from typing import TYPE_CHECKING
21
-
22
20
  from fastapi.params import Header
23
21
 
24
- if TYPE_CHECKING: # pragma: no cover
25
- SKIP_STORE_DEFAULT = False
26
- X_NUCLIADB_USER = ""
27
- X_FILE_PASSWORD = None
28
- else:
29
- SKIP_STORE_DEFAULT = Header(
30
- False,
31
- description="If set to true, file fields will not be saved in the blob storage. They will only be sent to process.", # noqa
32
- )
33
- X_NUCLIADB_USER = Header("")
34
- X_FILE_PASSWORD = Header(
35
- None,
36
- description="If a file is password protected, the password must be provided here for the file to be processed", # noqa
37
- )
22
+ X_SKIP_STORE = Header(
23
+ description="If set to true, file fields will not be saved in the blob storage. They will only be sent to process.",
24
+ )
25
+ X_NUCLIADB_USER = Header()
26
+ X_FILE_PASSWORD = Header(
27
+ description="If a file is password protected, the password must be provided here for the file to be processed",
28
+ )
29
+ X_EXTRACT_STRATEGY = Header(
30
+ description="Extract strategy to use when uploading a file. If not provided, the default strategy will be used.",
31
+ )
32
+ X_FILENAME = Header(min_length=1, description="Name of the file being uploaded.")
33
+ X_MD5 = Header(
34
+ min_length=32,
35
+ max_length=32,
36
+ description="MD5 hash of the file being uploaded. This is used to check if the file has been uploaded before.",
37
+ )
38
+ X_PASSWORD = Header(
39
+ min_length=1, description="If the file is password protected, the password must be provided here."
40
+ )
41
+ X_LANGUAGE = Header()
@@ -18,7 +18,7 @@
18
18
  # along with this program. If not, see <http://www.gnu.org/licenses/>.
19
19
  #
20
20
  from inspect import iscoroutinefunction
21
- from typing import TYPE_CHECKING, Callable, Optional, Type, Union
21
+ from typing import TYPE_CHECKING, Annotated, Callable, Optional, Type, Union
22
22
 
23
23
  from fastapi import HTTPException, Response
24
24
  from fastapi_versioning import version
@@ -30,9 +30,9 @@ from nucliadb.ingest.orm.knowledgebox import KnowledgeBox
30
30
  from nucliadb.ingest.processing import PushPayload, Source
31
31
  from nucliadb.writer import SERVICE_NAME
32
32
  from nucliadb.writer.api.constants import (
33
- SKIP_STORE_DEFAULT,
34
33
  X_FILE_PASSWORD,
35
34
  X_NUCLIADB_USER,
35
+ X_SKIP_STORE,
36
36
  )
37
37
  from nucliadb.writer.api.v1 import transaction
38
38
  from nucliadb.writer.api.v1.resource import (
@@ -380,7 +380,7 @@ async def add_resource_field_file_rslug_prefix(
380
380
  rslug: str,
381
381
  field_id: FieldIdString,
382
382
  field_payload: models.FileField,
383
- x_skip_store: bool = SKIP_STORE_DEFAULT,
383
+ x_skip_store: Annotated[bool, X_SKIP_STORE] = False,
384
384
  ) -> ResourceFieldAdded:
385
385
  return await add_field_to_resource_by_slug(
386
386
  request, kbid, rslug, field_id, field_payload, skip_store=x_skip_store
@@ -402,7 +402,7 @@ async def add_resource_field_file_rid_prefix(
402
402
  rid: str,
403
403
  field_id: FieldIdString,
404
404
  field_payload: models.FileField,
405
- x_skip_store: bool = SKIP_STORE_DEFAULT,
405
+ x_skip_store: Annotated[bool, X_SKIP_STORE] = False,
406
406
  ) -> ResourceFieldAdded:
407
407
  return await add_field_to_resource(
408
408
  request, kbid, rid, field_id, field_payload, skip_store=x_skip_store
@@ -503,8 +503,8 @@ async def reprocess_file_field(
503
503
  kbid: str,
504
504
  rid: str,
505
505
  field_id: FieldIdString,
506
- x_nucliadb_user: str = X_NUCLIADB_USER,
507
- x_file_password: Optional[str] = X_FILE_PASSWORD,
506
+ x_nucliadb_user: Annotated[str, X_NUCLIADB_USER] = "",
507
+ x_file_password: Annotated[Optional[str], X_FILE_PASSWORD] = None,
508
508
  ) -> ResourceUpdated:
509
509
  await maybe_back_pressure(request, kbid, resource_uuid=rid)
510
510
 
@@ -20,7 +20,7 @@
20
20
  import asyncio
21
21
  import contextlib
22
22
  from time import time
23
- from typing import Optional
23
+ from typing import Annotated, Optional
24
24
  from uuid import uuid4
25
25
 
26
26
  from fastapi import HTTPException, Query, Response
@@ -35,7 +35,7 @@ from nucliadb.common.maindb.utils import get_driver
35
35
  from nucliadb.ingest.orm.knowledgebox import KnowledgeBox
36
36
  from nucliadb.ingest.processing import ProcessingInfo, PushPayload, Source
37
37
  from nucliadb.writer import SERVICE_NAME, logger
38
- from nucliadb.writer.api.constants import SKIP_STORE_DEFAULT, X_NUCLIADB_USER
38
+ from nucliadb.writer.api.constants import X_NUCLIADB_USER, X_SKIP_STORE
39
39
  from nucliadb.writer.api.v1 import transaction
40
40
  from nucliadb.writer.api.v1.router import (
41
41
  KB_PREFIX,
@@ -90,8 +90,8 @@ async def create_resource(
90
90
  request: Request,
91
91
  item: CreateResourcePayload,
92
92
  kbid: str,
93
- x_skip_store: bool = SKIP_STORE_DEFAULT,
94
- x_nucliadb_user: str = X_NUCLIADB_USER,
93
+ x_skip_store: Annotated[bool, X_SKIP_STORE] = False,
94
+ x_nucliadb_user: Annotated[str, X_NUCLIADB_USER] = "",
95
95
  ):
96
96
  kb_config = await datamanagers.atomic.kb.get_config(kbid=kbid)
97
97
  if item.hidden and not (kb_config and kb_config.hidden_resources_enabled):
@@ -180,8 +180,8 @@ async def modify_resource_rslug_prefix(
180
180
  kbid: str,
181
181
  rslug: str,
182
182
  item: UpdateResourcePayload,
183
- x_skip_store: bool = SKIP_STORE_DEFAULT,
184
- x_nucliadb_user: str = X_NUCLIADB_USER,
183
+ x_skip_store: Annotated[bool, X_SKIP_STORE] = False,
184
+ x_nucliadb_user: Annotated[str, X_NUCLIADB_USER] = "",
185
185
  ):
186
186
  rid = await get_rid_from_slug_or_raise_error(kbid, rslug)
187
187
  return await modify_resource_endpoint(
@@ -208,8 +208,8 @@ async def modify_resource_rid_prefix(
208
208
  kbid: str,
209
209
  rid: str,
210
210
  item: UpdateResourcePayload,
211
- x_skip_store: bool = SKIP_STORE_DEFAULT,
212
- x_nucliadb_user: str = X_NUCLIADB_USER,
211
+ x_nucliadb_user: Annotated[str, X_NUCLIADB_USER] = "",
212
+ x_skip_store: Annotated[bool, X_SKIP_STORE] = False,
213
213
  ):
214
214
  return await modify_resource_endpoint(
215
215
  request,
@@ -371,7 +371,7 @@ async def reprocess_resource_rslug_prefix(
371
371
  request: Request,
372
372
  kbid: str,
373
373
  rslug: str,
374
- x_nucliadb_user: str = X_NUCLIADB_USER,
374
+ x_nucliadb_user: Annotated[str, X_NUCLIADB_USER] = "",
375
375
  ):
376
376
  rid = await get_rid_from_slug_or_raise_error(kbid, rslug)
377
377
  return await _reprocess_resource(request, kbid, rid, x_nucliadb_user=x_nucliadb_user)
@@ -390,7 +390,7 @@ async def reprocess_resource_rid_prefix(
390
390
  request: Request,
391
391
  kbid: str,
392
392
  rid: str,
393
- x_nucliadb_user: str = X_NUCLIADB_USER,
393
+ x_nucliadb_user: Annotated[str, X_NUCLIADB_USER] = "",
394
394
  ):
395
395
  return await _reprocess_resource(request, kbid, rid, x_nucliadb_user=x_nucliadb_user)
396
396
 
@@ -26,7 +26,6 @@ from io import BytesIO
26
26
  from typing import Annotated, Optional
27
27
 
28
28
  from fastapi import HTTPException
29
- from fastapi.params import Header
30
29
  from fastapi.requests import Request
31
30
  from fastapi.responses import Response
32
31
  from fastapi_versioning import version
@@ -37,6 +36,7 @@ from nucliadb.ingest.orm.utils import set_title
37
36
  from nucliadb.ingest.processing import PushPayload, Source
38
37
  from nucliadb.models.responses import HTTPClientError
39
38
  from nucliadb.writer import SERVICE_NAME
39
+ from nucliadb.writer.api.constants import X_EXTRACT_STRATEGY, X_FILENAME, X_LANGUAGE, X_MD5, X_PASSWORD
40
40
  from nucliadb.writer.api.v1 import transaction
41
41
  from nucliadb.writer.api.v1.resource import (
42
42
  get_rid_from_slug_or_raise_error,
@@ -82,10 +82,6 @@ TUS_HEADERS = {
82
82
  "Tus-Extension": "creation-defer-length",
83
83
  }
84
84
 
85
- ExtractStrategyHeader = Header(
86
- description="Extract strategy to use when uploading a file. If not provided, the default strategy will be used.",
87
- )
88
-
89
85
 
90
86
  @api.options(
91
87
  f"/{KB_PREFIX}/{{kbid}}/{RSLUG_PREFIX}/{{rslug}}/file/{{field}}/{TUSUPLOAD}/{{upload_id}}",
@@ -146,7 +142,7 @@ async def tus_post_rslug_prefix(
146
142
  rslug: str,
147
143
  field: FieldIdString,
148
144
  item: Optional[CreateResourcePayload] = None,
149
- x_extract_strategy: Annotated[Optional[str], ExtractStrategyHeader] = None,
145
+ x_extract_strategy: Annotated[Optional[str], X_EXTRACT_STRATEGY] = None,
150
146
  ) -> Response:
151
147
  rid = await get_rid_from_slug_or_raise_error(kbid, rslug)
152
148
  return await _tus_post(
@@ -168,7 +164,7 @@ async def tus_post_rid_prefix(
168
164
  path_rid: str,
169
165
  field: FieldIdString,
170
166
  item: Optional[CreateResourcePayload] = None,
171
- x_extract_strategy: Annotated[Optional[str], ExtractStrategyHeader] = None,
167
+ x_extract_strategy: Annotated[Optional[str], X_EXTRACT_STRATEGY] = None,
172
168
  ) -> Response:
173
169
  return await _tus_post(
174
170
  request, kbid, item, path_rid=path_rid, field_id=field, extract_strategy=x_extract_strategy
@@ -187,7 +183,7 @@ async def tus_post(
187
183
  request: Request,
188
184
  kbid: str,
189
185
  item: Optional[CreateResourcePayload] = None,
190
- x_extract_strategy: Annotated[Optional[str], ExtractStrategyHeader] = None,
186
+ x_extract_strategy: Annotated[Optional[str], X_EXTRACT_STRATEGY] = None,
191
187
  ) -> Response:
192
188
  return await _tus_post(request, kbid, item, extract_strategy=x_extract_strategy)
193
189
 
@@ -616,11 +612,11 @@ async def upload_rslug_prefix(
616
612
  kbid: str,
617
613
  rslug: str,
618
614
  field: FieldIdString,
619
- x_filename: Optional[list[str]] = Header(None), # type: ignore
620
- x_password: Optional[list[str]] = Header(None), # type: ignore
621
- x_language: Optional[list[str]] = Header(None), # type: ignore
622
- x_md5: Optional[list[str]] = Header(None), # type: ignore
623
- x_extract_strategy: Annotated[Optional[str], ExtractStrategyHeader] = None,
615
+ x_filename: Annotated[Optional[str], X_FILENAME] = None,
616
+ x_password: Annotated[Optional[str], X_PASSWORD] = None,
617
+ x_language: Annotated[Optional[str], X_LANGUAGE] = None,
618
+ x_md5: Annotated[Optional[str], X_MD5] = None,
619
+ x_extract_strategy: Annotated[Optional[str], X_EXTRACT_STRATEGY] = None,
624
620
  ) -> ResourceFileUploaded:
625
621
  rid = await get_rid_from_slug_or_raise_error(kbid, rslug)
626
622
  return await _upload(
@@ -650,11 +646,11 @@ async def upload_rid_prefix(
650
646
  kbid: str,
651
647
  path_rid: str,
652
648
  field: FieldIdString,
653
- x_filename: Optional[list[str]] = Header(None), # type: ignore
654
- x_password: Optional[list[str]] = Header(None), # type: ignore
655
- x_language: Optional[list[str]] = Header(None), # type: ignore
656
- x_md5: Optional[list[str]] = Header(None), # type: ignore
657
- x_extract_strategy: Annotated[Optional[str], ExtractStrategyHeader] = None,
649
+ x_filename: Annotated[Optional[str], X_FILENAME] = None,
650
+ x_password: Annotated[Optional[str], X_PASSWORD] = None,
651
+ x_language: Annotated[Optional[str], X_LANGUAGE] = None,
652
+ x_md5: Annotated[Optional[str], X_MD5] = None,
653
+ x_extract_strategy: Annotated[Optional[str], X_EXTRACT_STRATEGY] = None,
658
654
  ) -> ResourceFileUploaded:
659
655
  return await _upload(
660
656
  request,
@@ -681,11 +677,11 @@ async def upload_rid_prefix(
681
677
  async def upload(
682
678
  request: StarletteRequest,
683
679
  kbid: str,
684
- x_filename: Optional[list[str]] = Header(None), # type: ignore
685
- x_password: Optional[list[str]] = Header(None), # type: ignore
686
- x_language: Optional[list[str]] = Header(None), # type: ignore
687
- x_md5: Optional[list[str]] = Header(None), # type: ignore
688
- x_extract_strategy: Annotated[Optional[str], ExtractStrategyHeader] = None,
680
+ x_filename: Annotated[Optional[str], X_FILENAME] = None,
681
+ x_password: Annotated[Optional[str], X_PASSWORD] = None,
682
+ x_language: Annotated[Optional[str], X_LANGUAGE] = None,
683
+ x_md5: Annotated[Optional[str], X_MD5] = None,
684
+ x_extract_strategy: Annotated[Optional[str], X_EXTRACT_STRATEGY] = None,
689
685
  ) -> ResourceFileUploaded:
690
686
  return await _upload(
691
687
  request,
@@ -704,10 +700,10 @@ async def _upload(
704
700
  kbid: str,
705
701
  path_rid: Optional[str] = None,
706
702
  field: Optional[str] = None,
707
- x_filename: Optional[list[str]] = Header(None), # type: ignore
708
- x_password: Optional[list[str]] = Header(None), # type: ignore
709
- x_language: Optional[list[str]] = Header(None), # type: ignore
710
- x_md5: Optional[list[str]] = Header(None), # type: ignore
703
+ x_filename: Optional[str] = None,
704
+ x_password: Optional[str] = None,
705
+ x_language: Optional[str] = None,
706
+ x_md5: Optional[str] = None,
711
707
  x_extract_strategy: Optional[str] = None,
712
708
  ) -> ResourceFileUploaded:
713
709
  if path_rid is not None:
@@ -715,7 +711,7 @@ async def _upload(
715
711
 
716
712
  await maybe_back_pressure(request, kbid, resource_uuid=path_rid)
717
713
 
718
- md5_user = x_md5[0] if x_md5 is not None and len(x_md5) > 0 else None
714
+ md5_user = x_md5
719
715
  path, rid, valid_field = await validate_field_upload(kbid, path_rid, field, md5_user)
720
716
  dm = get_dm()
721
717
  storage_manager = get_storage_manager()
@@ -736,8 +732,8 @@ async def _upload(
736
732
 
737
733
  await dm.start(request)
738
734
 
739
- if x_filename and len(x_filename):
740
- filename = maybe_b64decode(x_filename[0])
735
+ if x_filename is not None:
736
+ filename = maybe_b64decode(x_filename)
741
737
  else:
742
738
  filename = uuid.uuid4().hex
743
739
 
@@ -793,9 +789,9 @@ async def _upload(
793
789
  content_type=content_type,
794
790
  override_resource_title=implies_resource_creation,
795
791
  filename=filename,
796
- password=x_password[0] if x_password and len(x_password) else None,
797
- language=x_language[0] if x_language and len(x_language) else None,
798
- md5=x_md5[0] if x_md5 and len(x_md5) else None,
792
+ password=x_password,
793
+ language=x_language,
794
+ md5=x_md5,
799
795
  field=valid_field,
800
796
  source=storage_manager.storage.source,
801
797
  rid=rid,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: nucliadb
3
- Version: 6.2.1.post2803
3
+ Version: 6.2.1.post2814
4
4
  Home-page: https://docs.nuclia.dev/docs/management/nucliadb/intro
5
5
  Author: NucliaDB Community
6
6
  Author-email: nucliadb@nuclia.com
@@ -22,10 +22,10 @@ Classifier: Programming Language :: Python :: 3.12
22
22
  Classifier: Programming Language :: Python :: 3 :: Only
23
23
  Requires-Python: >=3.9, <4
24
24
  Description-Content-Type: text/markdown
25
- Requires-Dist: nucliadb-telemetry[all]>=6.2.1.post2803
26
- Requires-Dist: nucliadb-utils[cache,fastapi,storages]>=6.2.1.post2803
27
- Requires-Dist: nucliadb-protos>=6.2.1.post2803
28
- Requires-Dist: nucliadb-models>=6.2.1.post2803
25
+ Requires-Dist: nucliadb-telemetry[all]>=6.2.1.post2814
26
+ Requires-Dist: nucliadb-utils[cache,fastapi,storages]>=6.2.1.post2814
27
+ Requires-Dist: nucliadb-protos>=6.2.1.post2814
28
+ Requires-Dist: nucliadb-models>=6.2.1.post2814
29
29
  Requires-Dist: nucliadb-admin-assets>=1.0.0.post1224
30
30
  Requires-Dist: nucliadb-node-binding>=2.26.0
31
31
  Requires-Dist: nuclia-models>=0.24.2
@@ -23,6 +23,7 @@ migrations/0023_backfill_pg_catalog.py,sha256=gw22pU5cAtg2a7n7xVaVqT2itjAoDMNtzW
23
23
  migrations/0025_assign_models_to_kbs_v2.py,sha256=QC6nDF2Wyc6zQMqNoKzvz-3507UpDyJztlbIsvlwHss,4678
24
24
  migrations/0026_fix_high_cardinality_content_types.py,sha256=BsbBkvZDzjRHQfoouZNNtHA1xMxTKm8wOVnp_WAS9j4,2322
25
25
  migrations/0027_rollover_texts3.py,sha256=UQDaMOayVuqDisf82NDrPStoEVveHvdjkSmzbIcU9o4,2730
26
+ migrations/0028_extracted_vectors_reference.py,sha256=49DHCIlBpjofU8cYVHTdWv0EBIlnPTWV2WCezf0rJUo,2392
26
27
  migrations/__init__.py,sha256=cp15ZcFnHvpcu_5-aK2A4uUyvuZVV_MJn4bIXMa20ks,835
27
28
  migrations/pg/0001_bootstrap.py,sha256=Fsqkeof50m7fKiJN05kmNEMwiKDlOrAgcAS5sLLkutA,1256
28
29
  migrations/pg/0002_catalog.py,sha256=Rsleecu351Ty19kYZgOpqX5G3MEAY8nMxCJrAeuS2Mw,1690
@@ -308,19 +309,19 @@ nucliadb/writer/settings.py,sha256=32Umt2SqeIL8PW4_C6hkuq01QT1YmcROiWpmoy1D5Wk,3
308
309
  nucliadb/writer/utilities.py,sha256=AZ5qEny1Xm0IDsFtH13oJa2usvJZK8f0FdgF1LrnLCw,1036
309
310
  nucliadb/writer/vectorsets.py,sha256=ocUTieBzStbNRgKX32wzrNJIuSaS9NjntMYbpzbBbQ4,5520
310
311
  nucliadb/writer/api/__init__.py,sha256=cp15ZcFnHvpcu_5-aK2A4uUyvuZVV_MJn4bIXMa20ks,835
311
- nucliadb/writer/api/constants.py,sha256=b63uWvu7_bwg51R6EL5DaJwoT550Ih4GhVXzvEYLQNQ,1429
312
+ nucliadb/writer/api/constants.py,sha256=qWEDjFUycrEZnSJyLnNK4PQNodU2oVmkO4NycaEZtio,1738
312
313
  nucliadb/writer/api/utils.py,sha256=wIQHlU8RQiIGVLI72suvyVIKlCU44Unh0Ae0IiN6Qwo,1313
313
314
  nucliadb/writer/api/v1/__init__.py,sha256=FVn7N9VJ6bsEoy4TRnkclr4Umd5hECiwPXVqRnJ8BME,1095
314
315
  nucliadb/writer/api/v1/export_import.py,sha256=6_gn0-emCjmK6bCUX5kgMvG0qkZr4HlfGmBXhhngsxo,8243
315
- nucliadb/writer/api/v1/field.py,sha256=PT5NfnD6TmX0oh-ehGiMJ7YiEtduIrMalqysQANjciY,17213
316
+ nucliadb/writer/api/v1/field.py,sha256=gYa2SMYGSr9ORi_lrN9EQpek7nj4-PW1JEoJ_hJzMGc,17274
316
317
  nucliadb/writer/api/v1/knowledgebox.py,sha256=Mr1vJSWOtiraDdtoTqQ1V2rSirMdojL4wN0Q3cOiX4k,10929
317
318
  nucliadb/writer/api/v1/learning_config.py,sha256=GaYaagjBrVG9ZxrWQyVQfqGMQV3tAJjqJ5CStaKhktU,2058
318
- nucliadb/writer/api/v1/resource.py,sha256=clUu0SZryLIZqvM9URM3fcDNnh6mhRoO7dt4SlRVE8I,18313
319
+ nucliadb/writer/api/v1/resource.py,sha256=bXaksvUoyYcHMrLmv3Ufrc_nA9hywuonfV6U6kL5kdE,18429
319
320
  nucliadb/writer/api/v1/router.py,sha256=RjuoWLpZer6Kl2BW_wznpNo6XL3BOpdTGqXZCn3QrrQ,1034
320
321
  nucliadb/writer/api/v1/services.py,sha256=U8OGxhA1tdt-wxw2uDAjFpwFXFEXSDTfBe1iV5nfmx8,9897
321
322
  nucliadb/writer/api/v1/slug.py,sha256=xlVBDBpRi9bNulpBHZwhyftVvulfE0zFm1XZIWl-AKY,2389
322
323
  nucliadb/writer/api/v1/transaction.py,sha256=d2Vbgnkk_-FLGSTt3vfldwiJIUf0XoyD0wP1jQNz_DY,2430
323
- nucliadb/writer/api/v1/upload.py,sha256=q2_YmQBz6MyFfX4xPHNLMwO0BvHdCFOewi9dlGg0Cq8,33384
324
+ nucliadb/writer/api/v1/upload.py,sha256=Lb5yTh8MfpyhFYT4UCn26NfaYohu44mK_em3v4NUp6Q,32869
324
325
  nucliadb/writer/resource/__init__.py,sha256=cp15ZcFnHvpcu_5-aK2A4uUyvuZVV_MJn4bIXMa20ks,835
325
326
  nucliadb/writer/resource/audit.py,sha256=FvxMZPzrNHtd31HgpZEvxzwAkbxJTZRhPLqRYYJi3tA,1426
326
327
  nucliadb/writer/resource/basic.py,sha256=l9zD-Qiq4eUkHezMf0w1Ksx2izKYLYuNoMIlXcNxxpM,11163
@@ -335,9 +336,9 @@ nucliadb/writer/tus/local.py,sha256=7jYa_w9b-N90jWgN2sQKkNcomqn6JMVBOVeDOVYJHto,
335
336
  nucliadb/writer/tus/s3.py,sha256=vF0NkFTXiXhXq3bCVXXVV-ED38ECVoUeeYViP8uMqcU,8357
336
337
  nucliadb/writer/tus/storage.py,sha256=ToqwjoYnjI4oIcwzkhha_MPxi-k4Jk3Lt55zRwaC1SM,2903
337
338
  nucliadb/writer/tus/utils.py,sha256=MSdVbRsRSZVdkaum69_0wku7X3p5wlZf4nr6E0GMKbw,2556
338
- nucliadb-6.2.1.post2803.dist-info/METADATA,sha256=NZ6FUiG4RGSNyA919ez19edmW1geeUPg9AIFVSRrt4k,4689
339
- nucliadb-6.2.1.post2803.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
340
- nucliadb-6.2.1.post2803.dist-info/entry_points.txt,sha256=XqGfgFDuY3zXQc8ewXM2TRVjTModIq851zOsgrmaXx4,1268
341
- nucliadb-6.2.1.post2803.dist-info/top_level.txt,sha256=hwYhTVnX7jkQ9gJCkVrbqEG1M4lT2F_iPQND1fCzF80,20
342
- nucliadb-6.2.1.post2803.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
343
- nucliadb-6.2.1.post2803.dist-info/RECORD,,
339
+ nucliadb-6.2.1.post2814.dist-info/METADATA,sha256=gq5C5Cq45euXf1PEyx2sYbBYezmItHclxAPtqmNhRkg,4689
340
+ nucliadb-6.2.1.post2814.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
341
+ nucliadb-6.2.1.post2814.dist-info/entry_points.txt,sha256=XqGfgFDuY3zXQc8ewXM2TRVjTModIq851zOsgrmaXx4,1268
342
+ nucliadb-6.2.1.post2814.dist-info/top_level.txt,sha256=hwYhTVnX7jkQ9gJCkVrbqEG1M4lT2F_iPQND1fCzF80,20
343
+ nucliadb-6.2.1.post2814.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
344
+ nucliadb-6.2.1.post2814.dist-info/RECORD,,