nucliadb 6.3.4.post3632__py3-none-any.whl → 6.3.4.post3656__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.
nucliadb/backups/const.py CHANGED
@@ -37,6 +37,8 @@ class StorageKeys:
37
37
  RESOURCE = "backups/{backup_id}/resources/{resource_id}.tar"
38
38
  ENTITIES = "backups/{backup_id}/entities.pb"
39
39
  LABELS = "backups/{backup_id}/labels.pb"
40
+ SYNONYMS = "backups/{backup_id}/synonyms.pb"
41
+ SEARCH_CONFIGURATIONS = "backups/{backup_id}/search_configurations.pb"
40
42
 
41
43
 
42
44
  class BackupFinishedStream:
@@ -18,6 +18,7 @@
18
18
  # along with this program. If not, see <http://www.gnu.org/licenses/>.
19
19
  #
20
20
  import asyncio
21
+ import json
21
22
  import logging
22
23
  import tarfile
23
24
  from datetime import datetime, timezone
@@ -38,6 +39,8 @@ from nucliadb.export_import.utils import (
38
39
  get_cloud_files,
39
40
  get_entities,
40
41
  get_labels,
42
+ get_search_configurations,
43
+ get_synonyms,
41
44
  )
42
45
  from nucliadb.tasks.retries import TaskRetryHandler
43
46
  from nucliadb_protos import backups_pb2, resources_pb2, writer_pb2
@@ -74,6 +77,8 @@ async def backup_kb(context: ApplicationContext, kbid: str, backup_id: str):
74
77
  await backup_resources(context, kbid, backup_id)
75
78
  await backup_labels(context, kbid, backup_id)
76
79
  await backup_entities(context, kbid, backup_id)
80
+ await backup_synonyms(context, kbid, backup_id)
81
+ await backup_search_configurations(context, kbid, backup_id)
77
82
  await notify_backup_completed(context, kbid, backup_id)
78
83
  await delete_metadata(context, kbid, backup_id)
79
84
 
@@ -216,7 +221,7 @@ async def backup_resource_with_binaries(
216
221
  await upload_to_bucket(
217
222
  context,
218
223
  resource_data_iterator(),
219
- key=StorageKeys.RESOURCE.format(kbid=kbid, backup_id=backup_id, resource_id=rid),
224
+ key=StorageKeys.RESOURCE.format(backup_id=backup_id, resource_id=rid),
220
225
  )
221
226
  return total_size
222
227
 
@@ -225,7 +230,7 @@ async def backup_labels(context: ApplicationContext, kbid: str, backup_id: str):
225
230
  labels = await get_labels(context, kbid)
226
231
  await context.blob_storage.upload_object(
227
232
  bucket=settings.backups_bucket,
228
- key=StorageKeys.LABELS.format(kbid=kbid, backup_id=backup_id),
233
+ key=StorageKeys.LABELS.format(backup_id=backup_id),
229
234
  data=labels.SerializeToString(),
230
235
  )
231
236
 
@@ -234,11 +239,33 @@ async def backup_entities(context: ApplicationContext, kbid: str, backup_id: str
234
239
  entities = await get_entities(context, kbid)
235
240
  await context.blob_storage.upload_object(
236
241
  bucket=settings.backups_bucket,
237
- key=StorageKeys.ENTITIES.format(kbid=kbid, backup_id=backup_id),
242
+ key=StorageKeys.ENTITIES.format(backup_id=backup_id),
238
243
  data=entities.SerializeToString(),
239
244
  )
240
245
 
241
246
 
247
+ async def backup_synonyms(context: ApplicationContext, kbid: str, backup_id: str):
248
+ synonyms = await get_synonyms(context, kbid)
249
+ await context.blob_storage.upload_object(
250
+ bucket=settings.backups_bucket,
251
+ key=StorageKeys.SYNONYMS.format(backup_id=backup_id),
252
+ data=synonyms.SerializeToString(),
253
+ )
254
+
255
+
256
+ async def backup_search_configurations(context: ApplicationContext, kbid: str, backup_id: str):
257
+ search_configurations = await get_search_configurations(context, kbid=kbid)
258
+ serialized_search_configs = {
259
+ config_id: config.model_dump(mode="python", exclude_unset=True)
260
+ for config_id, config in search_configurations.items()
261
+ }
262
+ await context.blob_storage.upload_object(
263
+ bucket=settings.backups_bucket,
264
+ key=StorageKeys.SEARCH_CONFIGURATIONS.format(backup_id=backup_id),
265
+ data=json.dumps(serialized_search_configs).encode(),
266
+ )
267
+
268
+
242
269
  async def get_metadata(
243
270
  context: ApplicationContext, kbid: str, backup_id: str
244
271
  ) -> Optional[BackupMetadata]:
@@ -21,9 +21,12 @@
21
21
 
22
22
  import asyncio
23
23
  import functools
24
+ import json
24
25
  import logging
25
26
  import tarfile
26
- from typing import AsyncIterator, Callable, Optional, Union
27
+ from typing import Any, AsyncIterator, Callable, Optional, Union
28
+
29
+ from pydantic import TypeAdapter
27
30
 
28
31
  from nucliadb.backups.const import MaindbKeys, StorageKeys
29
32
  from nucliadb.backups.models import RestoreBackupRequest
@@ -34,8 +37,11 @@ from nucliadb.export_import.utils import (
34
37
  restore_broker_message,
35
38
  set_entities_groups,
36
39
  set_labels,
40
+ set_search_configurations,
41
+ set_synonyms,
37
42
  )
38
43
  from nucliadb.tasks.retries import TaskRetryHandler
44
+ from nucliadb_models.configuration import SearchConfiguration
39
45
  from nucliadb_protos import knowledgebox_pb2 as kb_pb2
40
46
  from nucliadb_protos.resources_pb2 import CloudFile
41
47
  from nucliadb_protos.writer_pb2 import BrokerMessage
@@ -69,6 +75,8 @@ async def restore_kb(context: ApplicationContext, kbid: str, backup_id: str):
69
75
  await restore_resources(context, kbid, backup_id)
70
76
  await restore_labels(context, kbid, backup_id)
71
77
  await restore_entities(context, kbid, backup_id)
78
+ await restore_synonyms(context, kbid, backup_id)
79
+ await restore_search_configurations(context, kbid, backup_id)
72
80
  await delete_last_restored(context, kbid, backup_id)
73
81
 
74
82
 
@@ -77,7 +85,7 @@ async def restore_resources(context: ApplicationContext, kbid: str, backup_id: s
77
85
  tasks = []
78
86
  async for object_info in context.blob_storage.iterate_objects(
79
87
  bucket=settings.backups_bucket,
80
- prefix=StorageKeys.RESOURCES_PREFIX.format(kbid=kbid, backup_id=backup_id),
88
+ prefix=StorageKeys.RESOURCES_PREFIX.format(backup_id=backup_id),
81
89
  start=last_restored,
82
90
  ):
83
91
  key = object_info.name
@@ -210,7 +218,7 @@ class ResourceBackupReader:
210
218
  async def restore_resource(context: ApplicationContext, kbid: str, backup_id: str, resource_id: str):
211
219
  download_stream = context.blob_storage.download(
212
220
  bucket=settings.backups_bucket,
213
- key=StorageKeys.RESOURCE.format(kbid=kbid, backup_id=backup_id, resource_id=resource_id),
221
+ key=StorageKeys.RESOURCE.format(backup_id=backup_id, resource_id=resource_id),
214
222
  )
215
223
  reader = ResourceBackupReader(download_stream)
216
224
  bm = None
@@ -242,7 +250,7 @@ async def restore_resource(context: ApplicationContext, kbid: str, backup_id: st
242
250
  async def restore_labels(context: ApplicationContext, kbid: str, backup_id: str):
243
251
  raw = await context.blob_storage.downloadbytes(
244
252
  bucket=settings.backups_bucket,
245
- key=StorageKeys.LABELS.format(kbid=kbid, backup_id=backup_id),
253
+ key=StorageKeys.LABELS.format(backup_id=backup_id),
246
254
  )
247
255
  labels = kb_pb2.Labels()
248
256
  labels.ParseFromString(raw.getvalue())
@@ -252,8 +260,31 @@ async def restore_labels(context: ApplicationContext, kbid: str, backup_id: str)
252
260
  async def restore_entities(context: ApplicationContext, kbid: str, backup_id: str):
253
261
  raw = await context.blob_storage.downloadbytes(
254
262
  bucket=settings.backups_bucket,
255
- key=StorageKeys.ENTITIES.format(kbid=kbid, backup_id=backup_id),
263
+ key=StorageKeys.ENTITIES.format(backup_id=backup_id),
256
264
  )
257
265
  entities = kb_pb2.EntitiesGroups()
258
266
  entities.ParseFromString(raw.getvalue())
259
267
  await set_entities_groups(context, kbid, entities)
268
+
269
+
270
+ async def restore_synonyms(context: ApplicationContext, kbid: str, backup_id: str):
271
+ raw = await context.blob_storage.downloadbytes(
272
+ bucket=settings.backups_bucket,
273
+ key=StorageKeys.SYNONYMS.format(backup_id=backup_id),
274
+ )
275
+ synonyms = kb_pb2.Synonyms()
276
+ synonyms.ParseFromString(raw.getvalue())
277
+ await set_synonyms(context, kbid, synonyms)
278
+
279
+
280
+ async def restore_search_configurations(context: ApplicationContext, kbid: str, backup_id: str):
281
+ raw = await context.blob_storage.downloadbytes(
282
+ bucket=settings.backups_bucket,
283
+ key=StorageKeys.SEARCH_CONFIGURATIONS.format(backup_id=backup_id),
284
+ )
285
+ as_dict: dict[str, dict[str, Any]] = json.loads(raw.getvalue())
286
+ search_configurations: dict[str, SearchConfiguration] = {}
287
+ for name, data in as_dict.items():
288
+ config: SearchConfiguration = TypeAdapter(SearchConfiguration).validate_python(data)
289
+ search_configurations[name] = config
290
+ await set_search_configurations(context, kbid, search_configurations)
@@ -34,6 +34,7 @@ from nucliadb.export_import.exceptions import (
34
34
  )
35
35
  from nucliadb.export_import.models import ExportedItemType, ExportItem, Metadata
36
36
  from nucliadb.ingest.orm.broker_message import generate_broker_message
37
+ from nucliadb_models.configuration import SearchConfiguration
37
38
  from nucliadb_models.export_import import Status
38
39
  from nucliadb_protos import knowledgebox_pb2 as kb_pb2
39
40
  from nucliadb_protos import resources_pb2, writer_pb2
@@ -45,23 +46,61 @@ BinaryStream = AsyncIterator[bytes]
45
46
  BinaryStreamGenerator = Callable[[int], BinaryStream]
46
47
 
47
48
 
48
- # Broker message fields that are populated by the processing pipeline
49
- PROCESSING_BM_FIELDS = [
50
- "link_extracted_data",
51
- "file_extracted_data",
52
- "extracted_text",
53
- "field_metadata",
54
- "field_vectors",
55
- "field_large_metadata",
56
- ]
57
-
58
- # Broker message fields that are populated by the nucliadb writer component
59
- WRITER_BM_FIELDS = [
60
- "links",
61
- "files",
62
- "texts",
63
- "conversations",
64
- ]
49
+ # Map that indicates which fields are written by the writer
50
+ # and which are written by the processor.
51
+ BM_FIELDS = {
52
+ "common": [
53
+ "kbid",
54
+ "uuid",
55
+ "type",
56
+ "source",
57
+ "reindex",
58
+ ],
59
+ "writer": [
60
+ "slug",
61
+ "basic",
62
+ "origin",
63
+ "user_relations",
64
+ "conversations",
65
+ "texts",
66
+ "links",
67
+ "files",
68
+ "extra",
69
+ "security",
70
+ ],
71
+ "processor": [
72
+ "link_extracted_data",
73
+ "file_extracted_data",
74
+ "extracted_text",
75
+ "field_metadata",
76
+ "field_vectors",
77
+ "field_large_metadata",
78
+ "question_answers",
79
+ "relations",
80
+ "field_statuses",
81
+ ],
82
+ # These fields are mostly used for internal purposes and they are not part of
83
+ # the representation of the exported resource as broker message.
84
+ "ignored": [
85
+ "audit",
86
+ "multiid",
87
+ "origin_seq",
88
+ "slow_processing_time",
89
+ "pre_processing_time",
90
+ "done_time",
91
+ "processing_id",
92
+ "account_seq",
93
+ "delete_fields",
94
+ "delete_question_answers",
95
+ "errors",
96
+ "generated_by",
97
+ ],
98
+ # No longer used fields
99
+ "deprecated": [
100
+ "txseqid",
101
+ "user_vectors",
102
+ ],
103
+ }
65
104
 
66
105
 
67
106
  async def import_broker_message(
@@ -125,7 +164,7 @@ async def transaction_commit(
125
164
  def get_writer_bm(bm: writer_pb2.BrokerMessage) -> writer_pb2.BrokerMessage:
126
165
  wbm = writer_pb2.BrokerMessage()
127
166
  wbm.CopyFrom(bm)
128
- for field in PROCESSING_BM_FIELDS:
167
+ for field in BM_FIELDS["processor"]:
129
168
  wbm.ClearField(field) # type: ignore
130
169
  wbm.type = writer_pb2.BrokerMessage.MessageType.AUTOCOMMIT
131
170
  wbm.source = writer_pb2.BrokerMessage.MessageSource.WRITER
@@ -135,7 +174,7 @@ def get_writer_bm(bm: writer_pb2.BrokerMessage) -> writer_pb2.BrokerMessage:
135
174
  def get_processor_bm(bm: writer_pb2.BrokerMessage) -> writer_pb2.BrokerMessage:
136
175
  pbm = writer_pb2.BrokerMessage()
137
176
  pbm.CopyFrom(bm)
138
- for field in WRITER_BM_FIELDS:
177
+ for field in BM_FIELDS["writer"]:
139
178
  pbm.ClearField(field) # type: ignore
140
179
  pbm.type = writer_pb2.BrokerMessage.MessageType.AUTOCOMMIT
141
180
  pbm.source = writer_pb2.BrokerMessage.MessageSource.PROCESSOR
@@ -173,6 +212,21 @@ async def set_entities_groups(
173
212
  await txn.commit()
174
213
 
175
214
 
215
+ async def set_synonyms(context: ApplicationContext, kbid: str, synonyms: kb_pb2.Synonyms) -> None:
216
+ async with datamanagers.with_transaction() as txn:
217
+ await datamanagers.synonyms.set(txn, kbid=kbid, synonyms=synonyms)
218
+ await txn.commit()
219
+
220
+
221
+ async def set_search_configurations(
222
+ context: ApplicationContext, kbid: str, search_configurations: dict[str, SearchConfiguration]
223
+ ) -> None:
224
+ async with datamanagers.with_transaction() as txn:
225
+ for name, config in search_configurations.items():
226
+ await datamanagers.search_configurations.set(txn, kbid=kbid, name=name, config=config)
227
+ await txn.commit()
228
+
229
+
176
230
  async def set_labels(context: ApplicationContext, kbid: str, labels: kb_pb2.Labels) -> None:
177
231
  async with datamanagers.with_transaction() as txn:
178
232
  await datamanagers.labels.set_labels(txn, kbid=kbid, labels=labels)
@@ -273,6 +327,18 @@ async def get_labels(context: ApplicationContext, kbid: str) -> kb_pb2.Labels:
273
327
  return await datamanagers.labels.get_labels(txn, kbid=kbid)
274
328
 
275
329
 
330
+ async def get_synonyms(context: ApplicationContext, kbid: str) -> kb_pb2.Synonyms:
331
+ async with datamanagers.with_ro_transaction() as txn:
332
+ return await datamanagers.synonyms.get(txn, kbid=kbid) or kb_pb2.Synonyms()
333
+
334
+
335
+ async def get_search_configurations(
336
+ context: ApplicationContext, kbid: str
337
+ ) -> dict[str, SearchConfiguration]:
338
+ async with datamanagers.with_ro_transaction() as txn:
339
+ return await datamanagers.search_configurations.list(txn, kbid=kbid)
340
+
341
+
276
342
  class EndOfStream(Exception): ...
277
343
 
278
344
 
@@ -26,6 +26,7 @@ from nucliadb.ingest.fields.conversation import Conversation
26
26
  from nucliadb.ingest.fields.file import File
27
27
  from nucliadb.ingest.fields.link import Link
28
28
  from nucliadb.ingest.orm.resource import Resource
29
+ from nucliadb_protos import writer_pb2
29
30
  from nucliadb_protos.knowledgebox_pb2 import VectorSetConfig
30
31
  from nucliadb_protos.resources_pb2 import (
31
32
  ExtractedTextWrapper,
@@ -34,7 +35,7 @@ from nucliadb_protos.resources_pb2 import (
34
35
  FieldType,
35
36
  LargeComputedMetadataWrapper,
36
37
  )
37
- from nucliadb_protos.writer_pb2 import BrokerMessage
38
+ from nucliadb_protos.writer_pb2 import BrokerMessage, FieldIDStatus
38
39
 
39
40
 
40
41
  async def generate_broker_message(resource: Resource) -> BrokerMessage:
@@ -102,8 +103,25 @@ class _BrokerMessageBuilder:
102
103
  # Large metadata
103
104
  await self.generate_field_large_computed_metadata(type_id, field_id, field)
104
105
 
106
+ # Field status
107
+ await self.generate_field_status(type_id, field_id, field)
108
+
105
109
  return self.bm
106
110
 
111
+ async def generate_field_status(
112
+ self,
113
+ type_id: FieldType.ValueType,
114
+ field_id: str,
115
+ field: Field,
116
+ ):
117
+ fid = writer_pb2.FieldID(field_type=type_id, field=field_id)
118
+ status = await field.get_status()
119
+ if status is not None:
120
+ field_id_status = FieldIDStatus()
121
+ field_id_status.id.CopyFrom(fid)
122
+ field_id_status.status = status.status
123
+ self.bm.field_statuses.append(field_id_status)
124
+
107
125
  async def generate_field(
108
126
  self,
109
127
  type_id: FieldType.ValueType,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: nucliadb
3
- Version: 6.3.4.post3632
3
+ Version: 6.3.4.post3656
4
4
  Summary: NucliaDB
5
5
  Author-email: Nuclia <nucliadb@nuclia.com>
6
6
  License: AGPL
@@ -20,11 +20,11 @@ Classifier: Programming Language :: Python :: 3.12
20
20
  Classifier: Programming Language :: Python :: 3 :: Only
21
21
  Requires-Python: <4,>=3.9
22
22
  Description-Content-Type: text/markdown
23
- Requires-Dist: nucliadb-telemetry[all]>=6.3.4.post3632
24
- Requires-Dist: nucliadb-utils[cache,fastapi,storages]>=6.3.4.post3632
25
- Requires-Dist: nucliadb-protos>=6.3.4.post3632
26
- Requires-Dist: nucliadb-models>=6.3.4.post3632
27
- Requires-Dist: nidx-protos>=6.3.4.post3632
23
+ Requires-Dist: nucliadb-telemetry[all]>=6.3.4.post3656
24
+ Requires-Dist: nucliadb-utils[cache,fastapi,storages]>=6.3.4.post3656
25
+ Requires-Dist: nucliadb-protos>=6.3.4.post3656
26
+ Requires-Dist: nucliadb-models>=6.3.4.post3656
27
+ Requires-Dist: nidx-protos>=6.3.4.post3656
28
28
  Requires-Dist: nucliadb-admin-assets>=1.0.0.post1224
29
29
  Requires-Dist: nuclia-models>=0.24.2
30
30
  Requires-Dist: uvicorn
@@ -40,11 +40,11 @@ nucliadb/metrics_exporter.py,sha256=6u0geEYFxgE5I2Fhl_sxsvGN-ZkaFZNGutSXwrzrsVs,
40
40
  nucliadb/openapi.py,sha256=wDiw0dVEvTpJvbatkJ0JZLkKm9RItZT5PWRHjqRfqTA,2272
41
41
  nucliadb/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
42
42
  nucliadb/backups/__init__.py,sha256=cp15ZcFnHvpcu_5-aK2A4uUyvuZVV_MJn4bIXMa20ks,835
43
- nucliadb/backups/const.py,sha256=9vPAhLxQO_gNAjSdPxWuv3V66s9WcdpjOQ89CZlfmuk,1894
44
- nucliadb/backups/create.py,sha256=TJtYewhD0jkYV_h3rNUhKzhqB2QHAhLWYOgRVlGysGs,11450
43
+ nucliadb/backups/const.py,sha256=AaIsBB04WerR-V6t8NoCUScxO1ojMYJzfHgdkF2qh4M,2018
44
+ nucliadb/backups/create.py,sha256=D0MEpIYu74AhbZXeybinQo8cm_A2-T9JxDGLrp5lavA,12507
45
45
  nucliadb/backups/delete.py,sha256=AAs-WP-ujejj6c1LJgiMn7Ht67N_j0a1sKQlUepHpEA,2659
46
46
  nucliadb/backups/models.py,sha256=-hITU4Mv6AxePu12toBu_fjpEv6vVGcwNVxV22O9jQA,1273
47
- nucliadb/backups/restore.py,sha256=YD3Bbo9ry4YLMM6imB-DXbOAMXfGxVzJtTAAUFDvB0I,10153
47
+ nucliadb/backups/restore.py,sha256=KAly9iTXUP32mFFnW6neJm7qyNSZJ7fO5LGbC46vSAM,11416
48
48
  nucliadb/backups/settings.py,sha256=SyzsInj1BRbBI0atg5IXWbMbOZ_eVg4eSQ3IcnUhCxQ,1357
49
49
  nucliadb/backups/tasks.py,sha256=WkL1LgdYBHbV_A5ilyYv5p3zmXwxH68TDudytN5f7zk,4225
50
50
  nucliadb/backups/utils.py,sha256=_Vogjqcru5oqNZM-bZ0q7Ju79Bv1PD-LVFEa7Z-Q13I,1261
@@ -110,7 +110,7 @@ nucliadb/export_import/exporter.py,sha256=k2QVx1EjqFlDYiggriWiEJzwtMXzHbldsqWdpG
110
110
  nucliadb/export_import/importer.py,sha256=v5cq9Nn8c2zrY_K_00mydR52f8mdFxR7tLdtNLQ0qvk,4229
111
111
  nucliadb/export_import/models.py,sha256=dbjScNkiMRv4X3Ktudy1JRliD25bfoDTy3JmEZgQSCc,2121
112
112
  nucliadb/export_import/tasks.py,sha256=DWbdqY97ffoyfipelGXz3Jqz1iam6JCjQSh367Fc3NA,2947
113
- nucliadb/export_import/utils.py,sha256=DlGUHaqT43b3jG9U-vZ48GpC4O2OgD2WSP_0-hrYW9k,20774
113
+ nucliadb/export_import/utils.py,sha256=aBBB7p05GfKknpb9LQa8Krtz0LlFoP5NUTiPy7PwPBY,22840
114
114
  nucliadb/ingest/__init__.py,sha256=fsw3C38VP50km3R-nHL775LNGPpJ4JxqXJ2Ib1f5SqE,1011
115
115
  nucliadb/ingest/app.py,sha256=TaVgh5B2riFVmcsrbPb7a5YCzmnybjx-NK0BXgTwGAY,7535
116
116
  nucliadb/ingest/partitions.py,sha256=2NIhMYbNT0TNBL6bX1UMSi7vxFGICstCKEqsB0TXHOE,2410
@@ -138,7 +138,7 @@ nucliadb/ingest/fields/link.py,sha256=kN_gjRUEEj5cy8K_BwPijYg3TiWhedc24apXYlTbRJ
138
138
  nucliadb/ingest/fields/text.py,sha256=tFvSQJAe0W7ePpp2_WDfLiE2yglR1OTU0Zht9acvOFw,1594
139
139
  nucliadb/ingest/orm/__init__.py,sha256=cp15ZcFnHvpcu_5-aK2A4uUyvuZVV_MJn4bIXMa20ks,835
140
140
  nucliadb/ingest/orm/brain.py,sha256=JwHRneyE2sAo6PwYJnnyUMXKiGBWXLv4JI_aemodB3U,28479
141
- nucliadb/ingest/orm/broker_message.py,sha256=ZEMueoGuuRKO4tHgzc0P0AM1Ls1TTYey_4UvRQf0BpY,6915
141
+ nucliadb/ingest/orm/broker_message.py,sha256=vFDdfo_kz_GRai2MGq_3qKRynRXOGR7lawogNx6ZsfA,7553
142
142
  nucliadb/ingest/orm/entities.py,sha256=3_n6lKhBy2GsdmNmkh0_mvxP8md20OZsbtTNEmfJ8Hg,14888
143
143
  nucliadb/ingest/orm/exceptions.py,sha256=k4Esv4NtL4TrGTcsQpwrSfDhPQpiYcRbB1SpYmBX5MY,1432
144
144
  nucliadb/ingest/orm/knowledgebox.py,sha256=IGOPvBR1qXqDxE5DeiOdYCLdPgjzOVVpsASJ2zYvWwQ,23651
@@ -352,8 +352,8 @@ nucliadb/writer/tus/local.py,sha256=7jYa_w9b-N90jWgN2sQKkNcomqn6JMVBOVeDOVYJHto,
352
352
  nucliadb/writer/tus/s3.py,sha256=vF0NkFTXiXhXq3bCVXXVV-ED38ECVoUeeYViP8uMqcU,8357
353
353
  nucliadb/writer/tus/storage.py,sha256=ToqwjoYnjI4oIcwzkhha_MPxi-k4Jk3Lt55zRwaC1SM,2903
354
354
  nucliadb/writer/tus/utils.py,sha256=MSdVbRsRSZVdkaum69_0wku7X3p5wlZf4nr6E0GMKbw,2556
355
- nucliadb-6.3.4.post3632.dist-info/METADATA,sha256=E9EwhgMpHBedx-lBN5jEClmDHciojyPZQB3q0zpSP5o,4291
356
- nucliadb-6.3.4.post3632.dist-info/WHEEL,sha256=52BFRY2Up02UkjOa29eZOS2VxUrpPORXg1pkohGGUS8,91
357
- nucliadb-6.3.4.post3632.dist-info/entry_points.txt,sha256=XqGfgFDuY3zXQc8ewXM2TRVjTModIq851zOsgrmaXx4,1268
358
- nucliadb-6.3.4.post3632.dist-info/top_level.txt,sha256=hwYhTVnX7jkQ9gJCkVrbqEG1M4lT2F_iPQND1fCzF80,20
359
- nucliadb-6.3.4.post3632.dist-info/RECORD,,
355
+ nucliadb-6.3.4.post3656.dist-info/METADATA,sha256=spsdbVapfZnp-QuN7s9NBMX7yMWkHmsKvcgPAwKrckk,4291
356
+ nucliadb-6.3.4.post3656.dist-info/WHEEL,sha256=52BFRY2Up02UkjOa29eZOS2VxUrpPORXg1pkohGGUS8,91
357
+ nucliadb-6.3.4.post3656.dist-info/entry_points.txt,sha256=XqGfgFDuY3zXQc8ewXM2TRVjTModIq851zOsgrmaXx4,1268
358
+ nucliadb-6.3.4.post3656.dist-info/top_level.txt,sha256=hwYhTVnX7jkQ9gJCkVrbqEG1M4lT2F_iPQND1fCzF80,20
359
+ nucliadb-6.3.4.post3656.dist-info/RECORD,,