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.
- nucliadb/backups/__init__.py +19 -0
- nucliadb/backups/const.py +41 -0
- nucliadb/backups/create.py +277 -0
- nucliadb/backups/delete.py +69 -0
- nucliadb/backups/models.py +44 -0
- nucliadb/backups/restore.py +249 -0
- nucliadb/backups/settings.py +37 -0
- nucliadb/backups/tasks.py +126 -0
- nucliadb/backups/utils.py +32 -0
- nucliadb/common/cluster/grpc_node_dummy.py +2 -2
- nucliadb/common/cluster/manager.py +1 -1
- nucliadb/common/datamanagers/atomic.py +12 -18
- nucliadb/common/datamanagers/entities.py +1 -1
- nucliadb/export_import/utils.py +6 -1
- nucliadb/ingest/app.py +6 -0
- nucliadb/ingest/fields/exceptions.py +1 -1
- nucliadb/ingest/orm/resource.py +3 -3
- nucliadb/ingest/processing.py +2 -2
- nucliadb/ingest/serialize.py +1 -1
- nucliadb/ingest/service/writer.py +28 -3
- nucliadb/search/search/metrics.py +1 -1
- nucliadb/search/search/query_parser/catalog.py +4 -1
- nucliadb/search/search/query_parser/filter_expression.py +4 -1
- nucliadb/tasks/__init__.py +2 -2
- nucliadb/tasks/retries.py +148 -0
- nucliadb/writer/tus/gcs.py +1 -1
- {nucliadb-6.3.1.post3524.dist-info → nucliadb-6.3.1.post3531.dist-info}/METADATA +6 -6
- {nucliadb-6.3.1.post3524.dist-info → nucliadb-6.3.1.post3531.dist-info}/RECORD +31 -21
- {nucliadb-6.3.1.post3524.dist-info → nucliadb-6.3.1.post3531.dist-info}/WHEEL +0 -0
- {nucliadb-6.3.1.post3524.dist-info → nucliadb-6.3.1.post3531.dist-info}/entry_points.txt +0 -0
- {nucliadb-6.3.1.post3524.dist-info → nucliadb-6.3.1.post3531.dist-info}/top_level.txt +0 -0
@@ -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
|
-
|
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
|
-
|
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
|
-
|
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)
|
@@ -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
|
-
|
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
|
-
|
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:
|
nucliadb/tasks/__init__.py
CHANGED
@@ -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
|
nucliadb/writer/tus/gcs.py
CHANGED
@@ -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},
|
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.
|
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.
|
24
|
-
Requires-Dist: nucliadb-utils[cache,fastapi,storages]>=6.3.1.
|
25
|
-
Requires-Dist: nucliadb-protos>=6.3.1.
|
26
|
-
Requires-Dist: nucliadb-models>=6.3.1.
|
27
|
-
Requires-Dist: nidx-protos>=6.3.1.
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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.
|
343
|
-
nucliadb-6.3.1.
|
344
|
-
nucliadb-6.3.1.
|
345
|
-
nucliadb-6.3.1.
|
346
|
-
nucliadb-6.3.1.
|
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,,
|
File without changes
|
File without changes
|
File without changes
|