nucliadb 6.3.1.post3524__py3-none-any.whl → 6.3.1.post3531__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.
@@ -20,6 +20,8 @@
20
20
  import uuid
21
21
  from typing import AsyncIterator
22
22
 
23
+ from nucliadb.backups import tasks as backup_tasks
24
+ from nucliadb.backups import utils as backup_utils
23
25
  from nucliadb.common import datamanagers
24
26
  from nucliadb.common.cluster.exceptions import AlreadyExists, EntitiesGroupNotFound
25
27
  from nucliadb.common.cluster.manager import get_nidx_fake_node
@@ -471,14 +473,37 @@ class WriterServicer(writer_pb2_grpc.WriterServicer):
471
473
  async def CreateBackup(
472
474
  self, request: backups_pb2.CreateBackupRequest, context=None
473
475
  ) -> backups_pb2.CreateBackupResponse:
474
- return backups_pb2.CreateBackupResponse()
476
+ if not await exists_kb(request.kbid):
477
+ return backups_pb2.CreateBackupResponse(
478
+ status=backups_pb2.CreateBackupResponse.Status.KB_NOT_FOUND
479
+ )
480
+ await backup_tasks.create(request.kbid, request.backup_id)
481
+ return backups_pb2.CreateBackupResponse(status=backups_pb2.CreateBackupResponse.Status.OK)
475
482
 
476
483
  async def DeleteBackup(
477
484
  self, request: backups_pb2.DeleteBackupRequest, context=None
478
485
  ) -> backups_pb2.DeleteBackupResponse:
479
- return backups_pb2.DeleteBackupResponse()
486
+ if not await backup_utils.exists_backup(self.storage, request.backup_id):
487
+ return backups_pb2.DeleteBackupResponse(
488
+ status=backups_pb2.DeleteBackupResponse.Status.OK,
489
+ )
490
+ await backup_tasks.delete(request.backup_id)
491
+ return backups_pb2.DeleteBackupResponse(status=backups_pb2.DeleteBackupResponse.Status.OK)
480
492
 
481
493
  async def RestoreBackup(
482
494
  self, request: backups_pb2.RestoreBackupRequest, context=None
483
495
  ) -> backups_pb2.RestoreBackupResponse:
484
- return backups_pb2.RestoreBackupResponse()
496
+ if not await exists_kb(request.kbid):
497
+ return backups_pb2.RestoreBackupResponse(
498
+ status=backups_pb2.RestoreBackupResponse.Status.NOT_FOUND
499
+ )
500
+ if not await backup_utils.exists_backup(self.storage, request.backup_id):
501
+ return backups_pb2.RestoreBackupResponse(
502
+ status=backups_pb2.RestoreBackupResponse.Status.NOT_FOUND
503
+ )
504
+ await backup_tasks.restore(request.kbid, request.backup_id)
505
+ return backups_pb2.RestoreBackupResponse(status=backups_pb2.RestoreBackupResponse.Status.OK)
506
+
507
+
508
+ async def exists_kb(kbid: str) -> bool:
509
+ return await datamanagers.atomic.kb.exists_kb(kbid=kbid)
@@ -59,7 +59,7 @@ rag_histogram = metrics.Histogram(
59
59
 
60
60
 
61
61
  class RAGMetrics:
62
- def __init__(self):
62
+ def __init__(self: "RAGMetrics"):
63
63
  self.global_start = time.monotonic()
64
64
  self._start_times: dict[str, float] = {}
65
65
  self._end_times: dict[str, float] = {}
@@ -169,13 +169,16 @@ async def parse_filter_expression(expr: ResourceFilterExpression, kbid: str) ->
169
169
  elif isinstance(expr, Resource):
170
170
  if expr.id:
171
171
  cat.resource_id = expr.id
172
- else:
172
+ elif expr.slug:
173
173
  rid = await datamanagers.atomic.resources.get_resource_uuid_from_slug(
174
174
  kbid=kbid, slug=expr.slug
175
175
  )
176
176
  if rid is None:
177
177
  raise InvalidQueryError("slug", f"Cannot find slug {expr.slug}")
178
178
  cat.resource_id = rid
179
+ else: # pragma: nocover
180
+ # Cannot happen due to model validation
181
+ raise ValueError("Resource needs id or slug")
179
182
  elif isinstance(expr, DateCreated):
180
183
  cat.date = CatalogExpression.Date(field="created_at", since=expr.since, until=expr.until)
181
184
  elif isinstance(expr, DateModified):
@@ -102,13 +102,16 @@ async def parse_expression(
102
102
  elif isinstance(expr, Resource):
103
103
  if expr.id:
104
104
  f.resource.resource_id = expr.id
105
- else:
105
+ elif expr.slug:
106
106
  rid = await datamanagers.atomic.resources.get_resource_uuid_from_slug(
107
107
  kbid=kbid, slug=expr.slug
108
108
  )
109
109
  if rid is None:
110
110
  raise InvalidQueryError("slug", f"Cannot find slug {expr.slug}")
111
111
  f.resource.resource_id = rid
112
+ else: # pragma: nocover
113
+ # Cannot happen due to model validation
114
+ raise ValueError("Resource needs id or slug")
112
115
  elif isinstance(expr, Field):
113
116
  f.field.field_type = FIELD_TYPE_NAME_TO_STR[expr.type]
114
117
  if expr.name:
@@ -17,5 +17,5 @@
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 .consumer import NatsTaskConsumer, create_consumer # noqa
21
- from .producer import NatsTaskProducer, create_producer # noqa
20
+ from .consumer import NatsTaskConsumer, create_consumer # noqa: F401
21
+ from .producer import NatsTaskProducer, create_producer # noqa: F401
@@ -0,0 +1,148 @@
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
+ import functools
21
+ import logging
22
+ from enum import Enum
23
+ from typing import Optional
24
+
25
+ from pydantic import BaseModel
26
+
27
+ from nucliadb.common.context import ApplicationContext
28
+
29
+ logger = logging.getLogger(__name__)
30
+
31
+ TASK_METADATA_MAINDB = "/kbs/{kbid}/tasks/{task_type}/{task_id}"
32
+
33
+
34
+ class TaskMetadata(BaseModel):
35
+ class Status(Enum):
36
+ RUNNING = "running"
37
+ FAILED = "failed"
38
+ COMPLETED = "completed"
39
+
40
+ task_id: str
41
+ status: Status
42
+ retries: int = 0
43
+ error_messages: list[str] = []
44
+
45
+
46
+ class TaskRetryHandler:
47
+ """
48
+ Class that wraps a task consumer function and handles retries by storing metadata in the KV store.
49
+
50
+ Example:
51
+
52
+ retry_handler = TaskRetryHandler(
53
+ kbid="kbid",
54
+ task_type="work",
55
+ task_id="task_id",
56
+ context=context,
57
+ )
58
+
59
+ @retry_handler.wrap
60
+ async def my_task_consumer_func(kbid: str, task_id: str):
61
+ pass
62
+
63
+ """
64
+
65
+ def __init__(
66
+ self,
67
+ kbid: str,
68
+ task_type: str,
69
+ task_id: str,
70
+ context: ApplicationContext,
71
+ max_retries: int = 5,
72
+ ):
73
+ self.kbid = kbid
74
+ self.task_type = task_type
75
+ self.task_id = task_id
76
+ self.max_retries = max_retries
77
+ self.context = context
78
+
79
+ @property
80
+ def metadata_key(self):
81
+ return TASK_METADATA_MAINDB.format(
82
+ kbid=self.kbid, task_type=self.task_type, task_id=self.task_id
83
+ )
84
+
85
+ async def get_metadata(self) -> Optional[TaskMetadata]:
86
+ async with self.context.kv_driver.transaction(read_only=True) as txn:
87
+ metadata = await txn.get(self.metadata_key)
88
+ if metadata is None:
89
+ return None
90
+ return TaskMetadata.model_validate_json(metadata)
91
+
92
+ async def set_metadata(self, metadata: TaskMetadata) -> None:
93
+ async with self.context.kv_driver.transaction() as txn:
94
+ await txn.set(self.metadata_key, metadata.model_dump_json().encode())
95
+ await txn.commit()
96
+
97
+ def wrap(self, func):
98
+ @functools.wraps(func)
99
+ async def wrapper(*args, **kwargs):
100
+ func_result = None
101
+ metadata = await self.get_metadata()
102
+ if metadata is None:
103
+ # Task is not scheduled yet
104
+ metadata = TaskMetadata(
105
+ task_id=self.task_id,
106
+ status=TaskMetadata.Status.RUNNING,
107
+ retries=0,
108
+ )
109
+ await self.set_metadata(metadata)
110
+
111
+ if metadata.status in (TaskMetadata.Status.COMPLETED, TaskMetadata.Status.FAILED):
112
+ logger.info(
113
+ f"{self.type} task is {metadata.status.value}. Skipping",
114
+ extra={"kbid": self.kbid, "task_type": self.task_type, "task_id": self.task_id},
115
+ )
116
+ return
117
+
118
+ if metadata.retries >= self.max_retries:
119
+ metadata.status = TaskMetadata.Status.FAILED
120
+ metadata.error_messages.append("Max retries reached")
121
+ logger.info(
122
+ f"Task reached max retries. Setting to FAILED state",
123
+ extra={"kbid": self.kbid, "task_type": self.task_type, "task_id": self.task_id},
124
+ )
125
+ await self.set_metadata(metadata)
126
+ return
127
+ try:
128
+ metadata.status = TaskMetadata.Status.RUNNING
129
+ func_result = await func(*args, **kwargs)
130
+ except Exception as ex:
131
+ metadata.retries += 1
132
+ metadata.error_messages.append(str(ex))
133
+ logger.info(
134
+ f"Task failed. Will be retried",
135
+ extra={"kbid": self.kbid, "task_type": self.task_type, "task_id": self.task_id},
136
+ )
137
+ raise
138
+ else:
139
+ logger.info(
140
+ f"Task finished successfully",
141
+ extra={"kbid": self.kbid, "task_type": self.task_type, "task_id": self.task_id},
142
+ )
143
+ metadata.status = TaskMetadata.Status.COMPLETED
144
+ return func_result
145
+ finally:
146
+ await self.set_metadata(metadata)
147
+
148
+ return wrapper
@@ -276,7 +276,7 @@ class GCloudFileStorageManager(FileStorageManager):
276
276
  if resp.status not in (200, 204, 404):
277
277
  if resp.status == 404:
278
278
  logger.error(
279
- f"Attempt to delete not found gcloud: {data}, " f"status: {resp.status}",
279
+ f"Attempt to delete not found gcloud: {data}, status: {resp.status}",
280
280
  exc_info=True,
281
281
  )
282
282
  else:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: nucliadb
3
- Version: 6.3.1.post3524
3
+ Version: 6.3.1.post3531
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.1.post3524
24
- Requires-Dist: nucliadb-utils[cache,fastapi,storages]>=6.3.1.post3524
25
- Requires-Dist: nucliadb-protos>=6.3.1.post3524
26
- Requires-Dist: nucliadb-models>=6.3.1.post3524
27
- Requires-Dist: nidx-protos>=6.3.1.post3524
23
+ Requires-Dist: nucliadb-telemetry[all]>=6.3.1.post3531
24
+ Requires-Dist: nucliadb-utils[cache,fastapi,storages]>=6.3.1.post3531
25
+ Requires-Dist: nucliadb-protos>=6.3.1.post3531
26
+ Requires-Dist: nucliadb-models>=6.3.1.post3531
27
+ Requires-Dist: nidx-protos>=6.3.1.post3531
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
@@ -39,6 +39,15 @@ nucliadb/learning_proxy.py,sha256=Gf76qXxjl1lrHEFaCpOUfjjf0ab6eGLNxLMJz3-M_mo,19
39
39
  nucliadb/metrics_exporter.py,sha256=6u0geEYFxgE5I2Fhl_sxsvGN-ZkaFZNGutSXwrzrsVs,5624
40
40
  nucliadb/openapi.py,sha256=wDiw0dVEvTpJvbatkJ0JZLkKm9RItZT5PWRHjqRfqTA,2272
41
41
  nucliadb/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
42
+ nucliadb/backups/__init__.py,sha256=cp15ZcFnHvpcu_5-aK2A4uUyvuZVV_MJn4bIXMa20ks,835
43
+ nucliadb/backups/const.py,sha256=obLwfu8V8YMDGl_80g_NmUJBpuYoBdvoUmeaMjZOW7U,1453
44
+ nucliadb/backups/create.py,sha256=-keBfqaijp3D_SMTAyeKJnydX3ALP9gL0084tskJPjY,10443
45
+ nucliadb/backups/delete.py,sha256=YMVH2msbr4N28mXWeSpX9wqDsbIxUz0no4XiCsrKSLA,2309
46
+ nucliadb/backups/models.py,sha256=13-Z4p-Ypjdtg5NuDE2m-09CTdFYHh-W6U9FyWSEhPA,1270
47
+ nucliadb/backups/restore.py,sha256=6sFYsotfD7MJbpNF7mwJ2bWnD12E_rcfu9s0eAc7-n4,9654
48
+ nucliadb/backups/settings.py,sha256=SyzsInj1BRbBI0atg5IXWbMbOZ_eVg4eSQ3IcnUhCxQ,1357
49
+ nucliadb/backups/tasks.py,sha256=JR_CClBEv8v5U26iEysV1OpwH22B9e45cBK4F1jFATk,4193
50
+ nucliadb/backups/utils.py,sha256=ayDaxfWP5cPnAkQH-tF4M6cnowsPQgU2ljYz_iL1CbE,1249
42
51
  nucliadb/common/__init__.py,sha256=cp15ZcFnHvpcu_5-aK2A4uUyvuZVV_MJn4bIXMa20ks,835
43
52
  nucliadb/common/constants.py,sha256=QpigxJh_CtD85Evy0PtV5cVq6x0U_f9xfIcXz1ymkUg,869
44
53
  nucliadb/common/counters.py,sha256=8lOi3A2HeLDDlcNaS2QT1SfD3350VPBjiY3FkmHH1V8,977
@@ -48,9 +57,9 @@ nucliadb/common/nidx.py,sha256=_LoU8D4afEtlW0c3vGUCoatDZvMr0-2l_GtIGap7VxA,10185
48
57
  nucliadb/common/cluster/__init__.py,sha256=cp15ZcFnHvpcu_5-aK2A4uUyvuZVV_MJn4bIXMa20ks,835
49
58
  nucliadb/common/cluster/base.py,sha256=kklDqyvsubNX0W494ttl9f3E58lGaX6AXqAd8XX8ZHE,5522
50
59
  nucliadb/common/cluster/exceptions.py,sha256=t7v_l93t44l2tQpdQXgO_w-c4YZRcaayOz1A2i0w4RQ,1258
51
- nucliadb/common/cluster/grpc_node_dummy.py,sha256=L85wBnfab7Rev0CfsfUjPxQC6DiHPsETKrZAOLx9XHg,3510
60
+ nucliadb/common/cluster/grpc_node_dummy.py,sha256=LxONv0mhDFhx7mI91qqGfQlQ-R0qOGDYaxhXoBHLXaE,3548
52
61
  nucliadb/common/cluster/index_node.py,sha256=g38H1kiAliF3Y6et_CWYInpn_xPxf7THAFJ7RtgLNZo,3246
53
- nucliadb/common/cluster/manager.py,sha256=TMPPfR_41922JiuGpKL5iqNBoZGmv8agfYxlnRQIVss,12726
62
+ nucliadb/common/cluster/manager.py,sha256=KIzqAYGgdVK3GicJ9LdLoei8arWZ7H60imbc32USPj4,12754
54
63
  nucliadb/common/cluster/rebalance.py,sha256=cLUlR08SsqmnoA_9GDflV6k2tXmkAPpyFxZErzp45vo,8754
55
64
  nucliadb/common/cluster/rollover.py,sha256=iTJ9EQmHbzXL34foNFto-hqdC0Kq1pF1mNxqv0jqhBs,25362
56
65
  nucliadb/common/cluster/settings.py,sha256=TMoym-cZsQ2soWfLAce0moSa2XncttQyhahL43LrWTo,3384
@@ -60,9 +69,9 @@ nucliadb/common/cluster/standalone/utils.py,sha256=af3r-x_GF7A6dwIAhZLR-r-SZQEVx
60
69
  nucliadb/common/context/__init__.py,sha256=ZLUvKuIPaolKeA3aeZa2JcHwCIaEauNu8WpdKsiINXo,3354
61
70
  nucliadb/common/context/fastapi.py,sha256=j3HZ3lne6mIfw1eEar2het8RWzv6UruUZpXaKieSLOs,1527
62
71
  nucliadb/common/datamanagers/__init__.py,sha256=U1cg-KvqbfzN5AnL_tFFrERmPb81w_0MNiTmxObmla4,2062
63
- nucliadb/common/datamanagers/atomic.py,sha256=DU7RihO8WaGNuh_GTEpQ-8hkoinY5GSpNSzVpLsZh30,3225
72
+ nucliadb/common/datamanagers/atomic.py,sha256=beMWAQUlS2-R8G77G5aNeCcxA0ik_IIYSISg_o2jUEA,3083
64
73
  nucliadb/common/datamanagers/cluster.py,sha256=psTwAWSLj83vhFnC1iJJ6holrolAI4nKos9PuEWspYY,1500
65
- nucliadb/common/datamanagers/entities.py,sha256=hqw4YcEOumGK_1vgNNfxP-WafHvWN5jf61n4U01WJtc,5311
74
+ nucliadb/common/datamanagers/entities.py,sha256=gI-0mbMlqrr9FiyhexEh6czhgYcMxE2s9m4o866EK9o,5340
66
75
  nucliadb/common/datamanagers/exceptions.py,sha256=Atz_PP_GGq4jgJaWcAkcRbHBoBaGcC9yJvFteylKtTE,883
67
76
  nucliadb/common/datamanagers/fields.py,sha256=9KqBzTssAT68FR5hd17Xu_CSwAYdKFuYic1ITnrfFNc,3971
68
77
  nucliadb/common/datamanagers/kb.py,sha256=P7EhF4tApIUG2jw_HH1oMufTKG9__kuOLKnrCNGbDM4,6156
@@ -101,14 +110,14 @@ nucliadb/export_import/exporter.py,sha256=k2QVx1EjqFlDYiggriWiEJzwtMXzHbldsqWdpG
101
110
  nucliadb/export_import/importer.py,sha256=v5cq9Nn8c2zrY_K_00mydR52f8mdFxR7tLdtNLQ0qvk,4229
102
111
  nucliadb/export_import/models.py,sha256=dbjScNkiMRv4X3Ktudy1JRliD25bfoDTy3JmEZgQSCc,2121
103
112
  nucliadb/export_import/tasks.py,sha256=yPNdBdvTD7eGc7zvV9Rp7UZ0-mDhA34OOsLqHvns_v0,2975
104
- nucliadb/export_import/utils.py,sha256=t7xLA3f5W3zGq3HNXe3noOQnY7gRO8TAoe8S8BG3_so,19733
113
+ nucliadb/export_import/utils.py,sha256=iAQAjYuNx0dhM2b5-1A0NEs8tSRsznuT-izysUrTwS0,19986
105
114
  nucliadb/ingest/__init__.py,sha256=fsw3C38VP50km3R-nHL775LNGPpJ4JxqXJ2Ib1f5SqE,1011
106
- nucliadb/ingest/app.py,sha256=ErNd3q44xbBcUOl-Ae_lvcKPAsfFMSzb8zqWAjekrM4,7097
115
+ nucliadb/ingest/app.py,sha256=rX1KE5vsAzG9hlArBk8WE2SOlvdYylcb-jNkMQNPJdQ,7407
107
116
  nucliadb/ingest/cache.py,sha256=w7jMMzamOmQ7gwXna6Dqm6isRNBVv6l5BTBlTxaYWjE,1005
108
117
  nucliadb/ingest/partitions.py,sha256=2NIhMYbNT0TNBL6bX1UMSi7vxFGICstCKEqsB0TXHOE,2410
109
- nucliadb/ingest/processing.py,sha256=gg1DqbMFwqdOsmCSGsZc2abRdYz86xOZJun9vrHOCzs,20618
118
+ nucliadb/ingest/processing.py,sha256=8OggvuxNzktTTKDTUwsIuazhDParEWhn46CBZaMYAy8,20659
110
119
  nucliadb/ingest/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
111
- nucliadb/ingest/serialize.py,sha256=lIxPbt-Kz0eXXrefDltKbCRiyvkhHTR_AFwPUC6-nHU,16151
120
+ nucliadb/ingest/serialize.py,sha256=pTXpfoADsKax2gF5Xw5XAmn0ygRGxSC9vETv9y8xVH0,16147
112
121
  nucliadb/ingest/settings.py,sha256=0B-wQNa8FLqtNcQgRzh-fuIuGptM816XHcbH1NQKfmE,3050
113
122
  nucliadb/ingest/utils.py,sha256=l1myURu3r8oA11dx3GpHw-gNTUc1AFX8xdPm9Lgl2rA,2275
114
123
  nucliadb/ingest/consumer/__init__.py,sha256=cp15ZcFnHvpcu_5-aK2A4uUyvuZVV_MJn4bIXMa20ks,835
@@ -123,7 +132,7 @@ nucliadb/ingest/consumer/utils.py,sha256=jpX8D4lKzuPCpArQLZeX_Zczq3pfen_zAf8sPJf
123
132
  nucliadb/ingest/fields/__init__.py,sha256=cp15ZcFnHvpcu_5-aK2A4uUyvuZVV_MJn4bIXMa20ks,835
124
133
  nucliadb/ingest/fields/base.py,sha256=DTXFu_g9vSU2h7S4PlYxd-hp4SDuM_EPf8y51ALgD8w,21654
125
134
  nucliadb/ingest/fields/conversation.py,sha256=OcQOHvi72Pm0OyNGwxLo9gONo8f1NhwASq0_gS-E64A,7021
126
- nucliadb/ingest/fields/exceptions.py,sha256=LBZ-lw11f42Pk-ck-NSN9mSJ2kOw-NeRwb-UE31ILTQ,1171
135
+ nucliadb/ingest/fields/exceptions.py,sha256=2Cpntta3gNOnmGUdOe5ZMzP7k_308do14kaHVBPVCXs,1168
127
136
  nucliadb/ingest/fields/file.py,sha256=1v4jLg3balUua2VmSV8hHkAwPFShTUCOzufZvIUQcQw,4740
128
137
  nucliadb/ingest/fields/generic.py,sha256=elgtqv15aJUq3zY7X_g0bli_2BpcwPArVvzhe54Y4Ig,1547
129
138
  nucliadb/ingest/fields/link.py,sha256=kN_gjRUEEj5cy8K_BwPijYg3TiWhedc24apXYlTbRJs,4172
@@ -135,7 +144,7 @@ nucliadb/ingest/orm/entities.py,sha256=3_n6lKhBy2GsdmNmkh0_mvxP8md20OZsbtTNEmfJ8
135
144
  nucliadb/ingest/orm/exceptions.py,sha256=k4Esv4NtL4TrGTcsQpwrSfDhPQpiYcRbB1SpYmBX5MY,1432
136
145
  nucliadb/ingest/orm/knowledgebox.py,sha256=IGOPvBR1qXqDxE5DeiOdYCLdPgjzOVVpsASJ2zYvWwQ,23651
137
146
  nucliadb/ingest/orm/metrics.py,sha256=OkwMSPKLZcKba0ZTwtTiIxwBgaLMX5ydhGieKvi2y7E,1096
138
- nucliadb/ingest/orm/resource.py,sha256=pKDqw193lLR4dHlggNe0-V3d6UCoikSfhfmhpOvaDc0,44625
147
+ nucliadb/ingest/orm/resource.py,sha256=t2raRJpkJb5O8K4UhQdfyHx2e4JagcHS0eZqHV-a0io,44625
139
148
  nucliadb/ingest/orm/utils.py,sha256=vCe_9UxHu26JDFGLwQ0wH-XyzJIpQCTK-Ow9dtZR5Vg,2716
140
149
  nucliadb/ingest/orm/processor/__init__.py,sha256=Aqd9wCNTvggkMkCY3WvoI8spdr94Jnqk-0iq9XpLs18,922
141
150
  nucliadb/ingest/orm/processor/auditing.py,sha256=TeYhXGJRyQ7ROytbb2u8R0fIh_FYi3HgTu3S1ribY3U,4623
@@ -145,7 +154,7 @@ nucliadb/ingest/orm/processor/processor.py,sha256=oaiZ9HUszhUbvNMCmDq5Xj_jtXiCDj
145
154
  nucliadb/ingest/orm/processor/sequence_manager.py,sha256=uqEphtI1Ir_yk9jRl2gPf7BlzzXWovbARY5MNZSBI_8,1704
146
155
  nucliadb/ingest/service/__init__.py,sha256=MME_G_ERxzJR6JW_hfE2qcfXpmpH1kdG-S0a-M0qRm8,2043
147
156
  nucliadb/ingest/service/exceptions.py,sha256=cp15ZcFnHvpcu_5-aK2A4uUyvuZVV_MJn4bIXMa20ks,835
148
- nucliadb/ingest/service/writer.py,sha256=69xsQgoWngfZfWFTKPbePi-ya4fP5T7dTiomLr1gSYw,20953
157
+ nucliadb/ingest/service/writer.py,sha256=XISw3m5joj30gKe9CfpyybXMwgWOueAcgfiHRnX4Cqc,22311
149
158
  nucliadb/middleware/__init__.py,sha256=A8NBlBuEkunCFMKpR9gnfNELsVn0Plc55BIQMbWDM8Q,2202
150
159
  nucliadb/migrator/__init__.py,sha256=cp15ZcFnHvpcu_5-aK2A4uUyvuZVV_MJn4bIXMa20ks,835
151
160
  nucliadb/migrator/command.py,sha256=dKbJ1tAmP6X4lMVRSSlz351euaqs2wBPpOczLjATUes,2089
@@ -221,7 +230,7 @@ nucliadb/search/search/graph_strategy.py,sha256=ahwcUTQZ0Ll-rnS285DO9PmRyiM-1p4B
221
230
  nucliadb/search/search/hydrator.py,sha256=-R37gCrGxkyaiHQalnTWHNG_FCx11Zucd7qA1vQCxuw,6985
222
231
  nucliadb/search/search/ingestion_agents.py,sha256=NeJr4EEX-bvFFMGvXOOwLv8uU7NuQ-ntJnnrhnKfMzY,3174
223
232
  nucliadb/search/search/merge.py,sha256=i_PTBFRqC5iTTziOMEltxLIlmokIou5hjjgR4BnoLBE,22635
224
- nucliadb/search/search/metrics.py,sha256=81X-tahGW4n2CLvUzCPdNxNClmZqUWZjcVOGCUHoiUM,2872
233
+ nucliadb/search/search/metrics.py,sha256=GGGtXHLhK79_ESV277xkBVjcaMURXHCxYG0EdGamUd8,2886
225
234
  nucliadb/search/search/paragraphs.py,sha256=pNAEiYqJGGUVcEf7xf-PFMVqz0PX4Qb-WNG-_zPGN2o,7799
226
235
  nucliadb/search/search/pgcatalog.py,sha256=V1NYLEUSXHpWmgcPIo1HS2riK_HDXSi-uykJjSoOOrE,9033
227
236
  nucliadb/search/search/predict_proxy.py,sha256=IFI3v_ODz2_UU1XZnyaD391fE7-2C0npSmj_HmDvzS4,3123
@@ -238,10 +247,10 @@ nucliadb/search/search/chat/images.py,sha256=PA8VWxT5_HUGfW1ULhKTK46UBsVyINtWWqE
238
247
  nucliadb/search/search/chat/prompt.py,sha256=Jnja-Ss7skgnnDY8BymVfdeYsFPnIQFL8tEvcRXTKUE,47356
239
248
  nucliadb/search/search/chat/query.py,sha256=2QhVzvX12zLHOpVZ5MlBflqAauyCBl6dojhRGdm_6qU,16388
240
249
  nucliadb/search/search/query_parser/__init__.py,sha256=cp15ZcFnHvpcu_5-aK2A4uUyvuZVV_MJn4bIXMa20ks,835
241
- nucliadb/search/search/query_parser/catalog.py,sha256=EX6nDKH2qpMuuc7Ff0R_Ad78R4hj0JUDZp0ifUe1rrY,6963
250
+ nucliadb/search/search/query_parser/catalog.py,sha256=PtH5nb6UTzH8l7Lmdd1RgLVFsn9CN5M5-JkVq9YeR4k,7116
242
251
  nucliadb/search/search/query_parser/exceptions.py,sha256=szAOXUZ27oNY-OSa9t2hQ5HHkQQC0EX1FZz_LluJHJE,1224
243
252
  nucliadb/search/search/query_parser/fetcher.py,sha256=jhr__J0KmAzjdsTTadWQmD9qf6lZvqlKAfZdYjZH_UY,15742
244
- nucliadb/search/search/query_parser/filter_expression.py,sha256=Webr3GLZgVn0bK3900_orH3CumkM-uUAuHDwU14i3xY,6425
253
+ nucliadb/search/search/query_parser/filter_expression.py,sha256=rws5vsKTofX2iMUK4yvjmLZFxtcbWbyhIcwen4j0rQg,6578
245
254
  nucliadb/search/search/query_parser/models.py,sha256=VHDuyJlU2OLZN1usrQX53TZbPmWhzMeVYY0BiYNFzak,2464
246
255
  nucliadb/search/search/query_parser/old_filters.py,sha256=-zbfN-RsXoj_DRjh3Lfp-wShwFXgkISawzVptVzja-A,9071
247
256
  nucliadb/search/search/query_parser/parser.py,sha256=9TwkSNna3s-lCQIqBoSJzm6YbXdu8VIHJUan8M4ysfE,4667
@@ -260,11 +269,12 @@ nucliadb/standalone/versions.py,sha256=8CxNMNt2NgWM8ct50UsR4d44-ae7wtQI-sV-yGiFq
260
269
  nucliadb/standalone/static/favicon.ico,sha256=96pKGp6Sx457JkTfjy1dtApMhkitixfU6invCUGAYOU,2285
261
270
  nucliadb/standalone/static/index.html,sha256=PEZfuEQFYnYACAL1ceN8xC0im8lBrUx838RkE8tbvgA,3833
262
271
  nucliadb/standalone/static/logo.svg,sha256=-wQqSvPGTdlKjUP6pHE6kiq005pgYjDzp9nPl0X71Mk,2639
263
- nucliadb/tasks/__init__.py,sha256=vruCOMmCu0BcAZQrEinlgiQtiR1WYxSxvI5UsydAopc,963
272
+ nucliadb/tasks/__init__.py,sha256=oFJ3A8HD7w11mBu-IixYE_KxA7juMGlYQb7YD_y6WPM,975
264
273
  nucliadb/tasks/consumer.py,sha256=x-999Nsw6lBcKvyGyCGPiGP_naANVYMfl9M-u0U3mhY,7052
265
274
  nucliadb/tasks/logger.py,sha256=C7keOEO_mjLVp5VbqAZ2QXfqVB2Hot7NgBlUP_SDSMw,924
266
275
  nucliadb/tasks/models.py,sha256=qrZKi5DNDQ07waMsp5L4_Fi7WRs57YiO-kmXlrBzEAA,1168
267
276
  nucliadb/tasks/producer.py,sha256=w4R1YXgXtmCPGcoNNOr3qkqJYcHJtSmix-xjt7vsPqk,3261
277
+ nucliadb/tasks/retries.py,sha256=Zv-3Hys-SKayG9VQ7_7EIflkegE5j-xPGrf-nwaxsfY,5075
268
278
  nucliadb/tasks/utils.py,sha256=6tQVckqyzxv8PhVAd3ZqcMYpGcn73ZY6p1cpm1FxagA,1214
269
279
  nucliadb/tests/__init__.py,sha256=cp15ZcFnHvpcu_5-aK2A4uUyvuZVV_MJn4bIXMa20ks,835
270
280
  nucliadb/tests/config.py,sha256=JN_Jhgj-fwM9_8IeO9pwxr6C1PiwRDrXxm67Y38rU30,2080
@@ -334,13 +344,13 @@ nucliadb/writer/tus/__init__.py,sha256=huWpKnDnjsrKlBBJk30ta5vamlA-4x0TbPs_2Up8h
334
344
  nucliadb/writer/tus/azure.py,sha256=XhWAlWTM0vmXcXtuEPYjjeEhuZjiZXZu8q9WsJ7omFE,4107
335
345
  nucliadb/writer/tus/dm.py,sha256=bVoXqt_dpNvTjpffPYhj1JfqK6gfLoPr0hdkknUCZ9E,5488
336
346
  nucliadb/writer/tus/exceptions.py,sha256=WfZSSjsHfoy63wUFlH3QoHx7FMoCNA1oKJmWpZZDnCo,2156
337
- nucliadb/writer/tus/gcs.py,sha256=bprTnvAjDaTgiGOdy9HqFZi8joZBiYx7auevF4rwIXs,14083
347
+ nucliadb/writer/tus/gcs.py,sha256=yM9GSO0mV7c6ZFqK9LpjiBNu96uf1_rofAj9R0NC7xg,14079
338
348
  nucliadb/writer/tus/local.py,sha256=7jYa_w9b-N90jWgN2sQKkNcomqn6JMVBOVeDOVYJHto,5193
339
349
  nucliadb/writer/tus/s3.py,sha256=vF0NkFTXiXhXq3bCVXXVV-ED38ECVoUeeYViP8uMqcU,8357
340
350
  nucliadb/writer/tus/storage.py,sha256=ToqwjoYnjI4oIcwzkhha_MPxi-k4Jk3Lt55zRwaC1SM,2903
341
351
  nucliadb/writer/tus/utils.py,sha256=MSdVbRsRSZVdkaum69_0wku7X3p5wlZf4nr6E0GMKbw,2556
342
- nucliadb-6.3.1.post3524.dist-info/METADATA,sha256=xUkwyCqV6eEtWHmfzOv8QyE10WFOVjQGgj_xu_fIOac,4291
343
- nucliadb-6.3.1.post3524.dist-info/WHEEL,sha256=jB7zZ3N9hIM9adW7qlTAyycLYW9npaWKLRzaoVcLKcM,91
344
- nucliadb-6.3.1.post3524.dist-info/entry_points.txt,sha256=XqGfgFDuY3zXQc8ewXM2TRVjTModIq851zOsgrmaXx4,1268
345
- nucliadb-6.3.1.post3524.dist-info/top_level.txt,sha256=hwYhTVnX7jkQ9gJCkVrbqEG1M4lT2F_iPQND1fCzF80,20
346
- nucliadb-6.3.1.post3524.dist-info/RECORD,,
352
+ nucliadb-6.3.1.post3531.dist-info/METADATA,sha256=zY1NCVHHOfsUDSbz6fhhBl5EaDh3maWjwJbUYQtOh1g,4291
353
+ nucliadb-6.3.1.post3531.dist-info/WHEEL,sha256=jB7zZ3N9hIM9adW7qlTAyycLYW9npaWKLRzaoVcLKcM,91
354
+ nucliadb-6.3.1.post3531.dist-info/entry_points.txt,sha256=XqGfgFDuY3zXQc8ewXM2TRVjTModIq851zOsgrmaXx4,1268
355
+ nucliadb-6.3.1.post3531.dist-info/top_level.txt,sha256=hwYhTVnX7jkQ9gJCkVrbqEG1M4lT2F_iPQND1fCzF80,20
356
+ nucliadb-6.3.1.post3531.dist-info/RECORD,,