nucliadb-utils 6.9.1.post5229__py3-none-any.whl → 6.10.0.post5732__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.
Potentially problematic release.
This version of nucliadb-utils might be problematic. Click here for more details.
- nucliadb_utils/asyncio_utils.py +3 -3
- nucliadb_utils/audit/audit.py +41 -31
- nucliadb_utils/audit/basic.py +22 -23
- nucliadb_utils/audit/stream.py +31 -31
- nucliadb_utils/authentication.py +8 -10
- nucliadb_utils/cache/nats.py +10 -12
- nucliadb_utils/cache/pubsub.py +5 -4
- nucliadb_utils/cache/settings.py +2 -3
- nucliadb_utils/const.py +1 -1
- nucliadb_utils/debug.py +2 -2
- nucliadb_utils/encryption/settings.py +1 -2
- nucliadb_utils/fastapi/openapi.py +1 -2
- nucliadb_utils/fastapi/versioning.py +10 -6
- nucliadb_utils/featureflagging.py +10 -4
- nucliadb_utils/grpc.py +3 -3
- nucliadb_utils/helpers.py +1 -1
- nucliadb_utils/nats.py +15 -16
- nucliadb_utils/nuclia_usage/utils/kb_usage_report.py +4 -5
- nucliadb_utils/run.py +1 -1
- nucliadb_utils/settings.py +40 -41
- nucliadb_utils/signals.py +3 -3
- nucliadb_utils/storages/azure.py +34 -21
- nucliadb_utils/storages/gcs.py +22 -21
- nucliadb_utils/storages/local.py +8 -8
- nucliadb_utils/storages/nuclia.py +1 -2
- nucliadb_utils/storages/object_store.py +6 -6
- nucliadb_utils/storages/s3.py +23 -23
- nucliadb_utils/storages/settings.py +7 -8
- nucliadb_utils/storages/storage.py +29 -45
- nucliadb_utils/storages/utils.py +2 -3
- nucliadb_utils/store.py +2 -2
- nucliadb_utils/tests/asyncbenchmark.py +8 -10
- nucliadb_utils/tests/azure.py +2 -1
- nucliadb_utils/tests/fixtures.py +3 -2
- nucliadb_utils/tests/gcs.py +3 -2
- nucliadb_utils/tests/local.py +2 -1
- nucliadb_utils/tests/nats.py +1 -1
- nucliadb_utils/tests/s3.py +2 -1
- nucliadb_utils/transaction.py +16 -18
- nucliadb_utils/utilities.py +22 -24
- {nucliadb_utils-6.9.1.post5229.dist-info → nucliadb_utils-6.10.0.post5732.dist-info}/METADATA +6 -6
- nucliadb_utils-6.10.0.post5732.dist-info/RECORD +59 -0
- nucliadb_utils-6.9.1.post5229.dist-info/RECORD +0 -59
- {nucliadb_utils-6.9.1.post5229.dist-info → nucliadb_utils-6.10.0.post5732.dist-info}/WHEEL +0 -0
- {nucliadb_utils-6.9.1.post5229.dist-info → nucliadb_utils-6.10.0.post5732.dist-info}/top_level.txt +0 -0
|
@@ -19,13 +19,13 @@
|
|
|
19
19
|
|
|
20
20
|
# This code is derived from pytest-benchmark at https://github.com/ionelmc/pytest-benchmark
|
|
21
21
|
|
|
22
|
-
from __future__ import division, print_function
|
|
23
22
|
|
|
24
23
|
import gc
|
|
25
24
|
import sys
|
|
26
25
|
import time
|
|
26
|
+
from collections.abc import Awaitable, Callable, Coroutine
|
|
27
27
|
from math import ceil
|
|
28
|
-
from typing import Any,
|
|
28
|
+
from typing import Any, ClassVar, TypeVar
|
|
29
29
|
|
|
30
30
|
import pytest
|
|
31
31
|
from pytest_benchmark.session import BenchmarkSession # type: ignore
|
|
@@ -36,11 +36,11 @@ from pytest_benchmark.utils import NameWrapper, format_time # type: ignore
|
|
|
36
36
|
T = TypeVar("T")
|
|
37
37
|
|
|
38
38
|
|
|
39
|
-
class FixtureAlreadyUsed(Exception): ...
|
|
39
|
+
class FixtureAlreadyUsed(Exception): ...
|
|
40
40
|
|
|
41
41
|
|
|
42
|
-
class AsyncBenchmarkFixture
|
|
43
|
-
_precisions:
|
|
42
|
+
class AsyncBenchmarkFixture: # pragma: no cover
|
|
43
|
+
_precisions: ClassVar[dict[Callable, float]] = {}
|
|
44
44
|
|
|
45
45
|
def __init__(
|
|
46
46
|
self,
|
|
@@ -189,16 +189,14 @@ class AsyncBenchmarkFixture(object): # pragma: no cover
|
|
|
189
189
|
stats = self._make_stats(iterations)
|
|
190
190
|
|
|
191
191
|
self._logger.debug(
|
|
192
|
-
" Running
|
|
192
|
+
f" Running {rounds} rounds x {iterations} iterations ...",
|
|
193
193
|
yellow=True,
|
|
194
194
|
bold=True,
|
|
195
195
|
)
|
|
196
196
|
run_start = time.time()
|
|
197
197
|
if self._warmup:
|
|
198
198
|
warmup_rounds = min(rounds, max(1, int(self._warmup / iterations)))
|
|
199
|
-
self._logger.debug(
|
|
200
|
-
" Warmup %s rounds x %s iterations ..." % (warmup_rounds, iterations)
|
|
201
|
-
)
|
|
199
|
+
self._logger.debug(f" Warmup {warmup_rounds} rounds x {iterations} iterations ...")
|
|
202
200
|
for _ in range(warmup_rounds):
|
|
203
201
|
await runner(loops_range)
|
|
204
202
|
for _ in range(rounds):
|
|
@@ -258,7 +256,7 @@ class AsyncBenchmarkFixture(object): # pragma: no cover
|
|
|
258
256
|
)
|
|
259
257
|
|
|
260
258
|
self._logger.debug(
|
|
261
|
-
" Measured
|
|
259
|
+
f" Measured {loops} iterations: {format_time(duration)}s.",
|
|
262
260
|
yellow=True,
|
|
263
261
|
)
|
|
264
262
|
if duration >= min_time:
|
nucliadb_utils/tests/azure.py
CHANGED
|
@@ -17,9 +17,10 @@
|
|
|
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 collections.abc import Generator, Iterator
|
|
20
21
|
from contextlib import ExitStack
|
|
21
22
|
from dataclasses import dataclass
|
|
22
|
-
from typing import Any
|
|
23
|
+
from typing import Any
|
|
23
24
|
from unittest.mock import patch
|
|
24
25
|
|
|
25
26
|
import pytest
|
nucliadb_utils/tests/fixtures.py
CHANGED
|
@@ -19,7 +19,8 @@
|
|
|
19
19
|
#
|
|
20
20
|
import os
|
|
21
21
|
import sys
|
|
22
|
-
from
|
|
22
|
+
from collections.abc import Iterator
|
|
23
|
+
from typing import Any
|
|
23
24
|
from unittest.mock import Mock
|
|
24
25
|
|
|
25
26
|
import pytest
|
|
@@ -99,7 +100,7 @@ def storage_settings(request, storage) -> Iterator[dict[str, Any]]:
|
|
|
99
100
|
if isinstance(storage, Mock):
|
|
100
101
|
yield {}
|
|
101
102
|
else:
|
|
102
|
-
storage_backend_map: dict[
|
|
103
|
+
storage_backend_map: dict[type, str] = {
|
|
103
104
|
AzureStorage: "azure",
|
|
104
105
|
GCSStorage: "gcs",
|
|
105
106
|
LocalStorage: "local",
|
nucliadb_utils/tests/gcs.py
CHANGED
|
@@ -18,9 +18,10 @@
|
|
|
18
18
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
19
19
|
#
|
|
20
20
|
import re
|
|
21
|
+
from collections.abc import Iterator
|
|
21
22
|
from concurrent.futures.thread import ThreadPoolExecutor
|
|
22
23
|
from contextlib import ExitStack
|
|
23
|
-
from typing import Any
|
|
24
|
+
from typing import Any
|
|
24
25
|
from unittest.mock import patch
|
|
25
26
|
|
|
26
27
|
import docker # type: ignore # type: ignore
|
|
@@ -37,7 +38,7 @@ from nucliadb_utils.tests import free_port
|
|
|
37
38
|
# IMPORTANT!
|
|
38
39
|
# Without this, tests running in a remote docker host won't work
|
|
39
40
|
DOCKER_ENV_GROUPS = re.search(r"//([^:]+)", docker.from_env().api.base_url)
|
|
40
|
-
DOCKER_HOST:
|
|
41
|
+
DOCKER_HOST: str | None = DOCKER_ENV_GROUPS.group(1) if DOCKER_ENV_GROUPS else None
|
|
41
42
|
|
|
42
43
|
# This images has the XML API in this PR https://github.com/fsouza/fake-gcs-server/pull/1164
|
|
43
44
|
# which is needed because the Rust crate object_store uses it
|
nucliadb_utils/tests/local.py
CHANGED
|
@@ -17,9 +17,10 @@
|
|
|
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 collections.abc import Iterator
|
|
20
21
|
from contextlib import ExitStack
|
|
21
22
|
from pathlib import Path
|
|
22
|
-
from typing import Any
|
|
23
|
+
from typing import Any
|
|
23
24
|
from unittest.mock import patch
|
|
24
25
|
|
|
25
26
|
import pytest
|
nucliadb_utils/tests/nats.py
CHANGED
nucliadb_utils/tests/s3.py
CHANGED
|
@@ -17,8 +17,9 @@
|
|
|
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 collections.abc import AsyncIterator
|
|
20
21
|
from contextlib import ExitStack
|
|
21
|
-
from typing import Any
|
|
22
|
+
from typing import Any
|
|
22
23
|
from unittest.mock import patch
|
|
23
24
|
|
|
24
25
|
import pytest
|
nucliadb_utils/transaction.py
CHANGED
|
@@ -21,7 +21,7 @@ import asyncio
|
|
|
21
21
|
import uuid
|
|
22
22
|
from asyncio import Event
|
|
23
23
|
from functools import partial
|
|
24
|
-
from typing import Any
|
|
24
|
+
from typing import Any
|
|
25
25
|
|
|
26
26
|
import nats
|
|
27
27
|
import nats.errors
|
|
@@ -48,9 +48,9 @@ from nucliadb_utils.utilities import get_pubsub
|
|
|
48
48
|
|
|
49
49
|
class WaitFor:
|
|
50
50
|
uuid: str
|
|
51
|
-
seq:
|
|
51
|
+
seq: int | None = None
|
|
52
52
|
|
|
53
|
-
def __init__(self, uuid: str, seq:
|
|
53
|
+
def __init__(self, uuid: str, seq: int | None = None):
|
|
54
54
|
self.uuid = uuid
|
|
55
55
|
self.seq = seq
|
|
56
56
|
|
|
@@ -77,7 +77,7 @@ class LocalTransactionUtility:
|
|
|
77
77
|
writer: BrokerMessage,
|
|
78
78
|
partition: int,
|
|
79
79
|
wait: bool = False,
|
|
80
|
-
target_subject:
|
|
80
|
+
target_subject: str | None = None,
|
|
81
81
|
) -> int:
|
|
82
82
|
from nucliadb_utils.utilities import get_ingest
|
|
83
83
|
|
|
@@ -99,14 +99,14 @@ class LocalTransactionUtility:
|
|
|
99
99
|
|
|
100
100
|
|
|
101
101
|
class TransactionUtility:
|
|
102
|
-
nc:
|
|
103
|
-
js:
|
|
102
|
+
nc: Client | NatsClientTelemetry
|
|
103
|
+
js: JetStreamContext | JetStreamContextTelemetry
|
|
104
104
|
pubsub: PubSubDriver
|
|
105
105
|
|
|
106
106
|
def __init__(
|
|
107
107
|
self,
|
|
108
108
|
nats_servers: list[str],
|
|
109
|
-
nats_creds:
|
|
109
|
+
nats_creds: str | None = None,
|
|
110
110
|
commit_timeout: int = 60,
|
|
111
111
|
):
|
|
112
112
|
self.nats_creds = nats_creds
|
|
@@ -118,11 +118,11 @@ class TransactionUtility:
|
|
|
118
118
|
|
|
119
119
|
async def reconnected_cb(self):
|
|
120
120
|
# See who we are connected to on reconnect.
|
|
121
|
-
logger.info("Got reconnected to NATS {
|
|
121
|
+
logger.info(f"Got reconnected to NATS {self.nc.connected_url}")
|
|
122
122
|
|
|
123
123
|
async def error_cb(self, e):
|
|
124
124
|
logger.error(
|
|
125
|
-
"There was an error connecting to NATS transaction: {}"
|
|
125
|
+
f"There was an error connecting to NATS transaction: {e}",
|
|
126
126
|
exc_info=True,
|
|
127
127
|
)
|
|
128
128
|
|
|
@@ -138,9 +138,7 @@ class TransactionUtility:
|
|
|
138
138
|
def _get_notification_action_type(self):
|
|
139
139
|
return Notification.Action.COMMIT # currently do not handle ABORT!
|
|
140
140
|
|
|
141
|
-
async def wait_for_commited(
|
|
142
|
-
self, kbid: str, waiting_for: WaitFor, request_id: str
|
|
143
|
-
) -> Optional[Event]:
|
|
141
|
+
async def wait_for_commited(self, kbid: str, waiting_for: WaitFor, request_id: str) -> Event | None:
|
|
144
142
|
action_type = self._get_notification_action_type()
|
|
145
143
|
|
|
146
144
|
def received(waiting_for: WaitFor, event: Event, msg: Any):
|
|
@@ -166,7 +164,7 @@ class TransactionUtility:
|
|
|
166
164
|
)
|
|
167
165
|
return waiting_event
|
|
168
166
|
|
|
169
|
-
async def initialize(self, service_name:
|
|
167
|
+
async def initialize(self, service_name: str | None = None):
|
|
170
168
|
self.pubsub = await get_pubsub() # type: ignore
|
|
171
169
|
|
|
172
170
|
options: dict[str, Any] = {
|
|
@@ -194,14 +192,14 @@ class TransactionUtility:
|
|
|
194
192
|
|
|
195
193
|
async def commit(
|
|
196
194
|
self,
|
|
197
|
-
writer:
|
|
195
|
+
writer: BrokerMessage | BrokerMessageBlobReference,
|
|
198
196
|
partition: int,
|
|
199
197
|
wait: bool = False,
|
|
200
|
-
target_subject:
|
|
201
|
-
headers:
|
|
198
|
+
target_subject: str | None = None, # allow customizing where to send the message
|
|
199
|
+
headers: dict[str, str] | None = None,
|
|
202
200
|
) -> int:
|
|
203
201
|
headers = headers or {}
|
|
204
|
-
waiting_event:
|
|
202
|
+
waiting_event: Event | None = None
|
|
205
203
|
|
|
206
204
|
waiting_for = WaitFor(uuid=writer.uuid)
|
|
207
205
|
request_id = uuid.uuid4().hex
|
|
@@ -245,6 +243,6 @@ class TransactionUtility:
|
|
|
245
243
|
await self.stop_waiting(writer.kbid, request_id=request_id)
|
|
246
244
|
|
|
247
245
|
logger.info(
|
|
248
|
-
f" - Pushed message to ingest. kb: {writer.kbid}, resource: {writer.uuid}, nucliadb seqid: {res.seq}, partition: {partition}"
|
|
246
|
+
f" - Pushed message to ingest. kb: {writer.kbid}, resource: {writer.uuid}, nucliadb seqid: {res.seq}, partition: {partition}"
|
|
249
247
|
)
|
|
250
248
|
return res.seq
|
nucliadb_utils/utilities.py
CHANGED
|
@@ -19,12 +19,12 @@
|
|
|
19
19
|
|
|
20
20
|
from __future__ import annotations
|
|
21
21
|
|
|
22
|
-
import asyncio
|
|
23
22
|
import hashlib
|
|
23
|
+
import inspect
|
|
24
24
|
import logging
|
|
25
25
|
from concurrent.futures.thread import ThreadPoolExecutor
|
|
26
26
|
from enum import Enum
|
|
27
|
-
from typing import TYPE_CHECKING, Any,
|
|
27
|
+
from typing import TYPE_CHECKING, Any, cast
|
|
28
28
|
|
|
29
29
|
from nucliadb_protos.writer_pb2_grpc import WriterStub
|
|
30
30
|
from nucliadb_telemetry.metrics import Counter
|
|
@@ -87,23 +87,21 @@ class Utility(str, Enum):
|
|
|
87
87
|
NIDX = "nidx"
|
|
88
88
|
|
|
89
89
|
|
|
90
|
-
def get_utility(ident:
|
|
90
|
+
def get_utility(ident: Utility | str):
|
|
91
91
|
return MAIN.get(ident)
|
|
92
92
|
|
|
93
93
|
|
|
94
|
-
def set_utility(ident:
|
|
94
|
+
def set_utility(ident: Utility | str, util: Any):
|
|
95
95
|
if ident in MAIN:
|
|
96
96
|
logger.warning(f"Overwriting previously set utility {ident}: {MAIN[ident]} with {util}")
|
|
97
97
|
MAIN[ident] = util
|
|
98
98
|
|
|
99
99
|
|
|
100
|
-
def clean_utility(ident:
|
|
100
|
+
def clean_utility(ident: Utility | str):
|
|
101
101
|
MAIN.pop(ident, None)
|
|
102
102
|
|
|
103
103
|
|
|
104
|
-
async def get_storage(
|
|
105
|
-
gcs_scopes: Optional[List[str]] = None, service_name: Optional[str] = None
|
|
106
|
-
) -> Storage:
|
|
104
|
+
async def get_storage(gcs_scopes: list[str] | None = None, service_name: str | None = None) -> Storage:
|
|
107
105
|
if Utility.STORAGE in MAIN:
|
|
108
106
|
return MAIN[Utility.STORAGE]
|
|
109
107
|
|
|
@@ -113,7 +111,7 @@ async def get_storage(
|
|
|
113
111
|
return MAIN[Utility.STORAGE]
|
|
114
112
|
|
|
115
113
|
|
|
116
|
-
async def _create_storage(gcs_scopes:
|
|
114
|
+
async def _create_storage(gcs_scopes: list[str] | None = None) -> Storage:
|
|
117
115
|
if storage_settings.file_backend == FileBackendConfig.AZURE:
|
|
118
116
|
from nucliadb_utils.storages.azure import AzureStorage
|
|
119
117
|
|
|
@@ -192,7 +190,7 @@ async def _create_storage(gcs_scopes: Optional[List[str]] = None) -> Storage:
|
|
|
192
190
|
|
|
193
191
|
|
|
194
192
|
async def teardown_storage() -> None:
|
|
195
|
-
storage:
|
|
193
|
+
storage: Storage | None = get_utility(Utility.STORAGE)
|
|
196
194
|
if storage is None:
|
|
197
195
|
return
|
|
198
196
|
await storage.finalize()
|
|
@@ -224,8 +222,8 @@ async def get_nuclia_storage() -> NucliaStorage:
|
|
|
224
222
|
return MAIN.get(Utility.NUCLIA_STORAGE, None)
|
|
225
223
|
|
|
226
224
|
|
|
227
|
-
async def get_pubsub() ->
|
|
228
|
-
driver:
|
|
225
|
+
async def get_pubsub() -> PubSubDriver | None:
|
|
226
|
+
driver: PubSubDriver | None = get_utility(Utility.PUBSUB)
|
|
229
227
|
if driver is None:
|
|
230
228
|
if cache_settings.cache_pubsub_nats_url:
|
|
231
229
|
logger.info("Configuring nats pubsub")
|
|
@@ -273,7 +271,7 @@ def clear_global_cache():
|
|
|
273
271
|
async def finalize_utilities():
|
|
274
272
|
to_delete = []
|
|
275
273
|
for key, util in MAIN.items():
|
|
276
|
-
if hasattr(util, "finalize") and
|
|
274
|
+
if hasattr(util, "finalize") and inspect.iscoroutinefunction(util.finalize):
|
|
277
275
|
await util.finalize()
|
|
278
276
|
elif hasattr(util, "finalize"):
|
|
279
277
|
util.finalize()
|
|
@@ -283,7 +281,7 @@ async def finalize_utilities():
|
|
|
283
281
|
|
|
284
282
|
|
|
285
283
|
async def start_transaction_utility(
|
|
286
|
-
service_name:
|
|
284
|
+
service_name: str | None = None,
|
|
287
285
|
) -> TransactionUtility:
|
|
288
286
|
from nucliadb_utils.transaction import LocalTransactionUtility, TransactionUtility
|
|
289
287
|
|
|
@@ -293,9 +291,7 @@ async def start_transaction_utility(
|
|
|
293
291
|
return current
|
|
294
292
|
|
|
295
293
|
if transaction_settings.transaction_local:
|
|
296
|
-
transaction_utility:
|
|
297
|
-
LocalTransactionUtility()
|
|
298
|
-
)
|
|
294
|
+
transaction_utility: LocalTransactionUtility | TransactionUtility = LocalTransactionUtility()
|
|
299
295
|
elif transaction_settings.transaction_jetstream_servers is not None:
|
|
300
296
|
transaction_utility = TransactionUtility(
|
|
301
297
|
nats_creds=transaction_settings.transaction_jetstream_auth,
|
|
@@ -318,7 +314,7 @@ async def stop_transaction_utility() -> None:
|
|
|
318
314
|
clean_utility(Utility.TRANSACTION)
|
|
319
315
|
|
|
320
316
|
|
|
321
|
-
def get_audit() ->
|
|
317
|
+
def get_audit() -> AuditStorage | None:
|
|
322
318
|
return get_utility(Utility.AUDIT)
|
|
323
319
|
|
|
324
320
|
|
|
@@ -345,7 +341,7 @@ def register_audit_utility(service: str) -> AuditStorage:
|
|
|
345
341
|
|
|
346
342
|
|
|
347
343
|
async def start_audit_utility(service: str):
|
|
348
|
-
audit_utility:
|
|
344
|
+
audit_utility: AuditStorage | None = get_utility(Utility.AUDIT)
|
|
349
345
|
if audit_utility is not None and audit_utility.initialized is True:
|
|
350
346
|
return
|
|
351
347
|
|
|
@@ -363,7 +359,7 @@ async def stop_audit_utility():
|
|
|
363
359
|
|
|
364
360
|
|
|
365
361
|
async def start_nats_manager(
|
|
366
|
-
service_name: str, nats_servers: list[str], nats_creds:
|
|
362
|
+
service_name: str, nats_servers: list[str], nats_creds: str | None = None
|
|
367
363
|
) -> NatsConnectionManager:
|
|
368
364
|
util = get_utility(Utility.NATS_MANAGER)
|
|
369
365
|
if util is not None:
|
|
@@ -413,16 +409,18 @@ X_ACCOUNT_TYPE_HEADER = "X-NUCLIADB-ACCOUNT-TYPE"
|
|
|
413
409
|
def has_feature(
|
|
414
410
|
name: str,
|
|
415
411
|
default: bool = False,
|
|
416
|
-
context:
|
|
417
|
-
headers:
|
|
412
|
+
context: dict[str, str] | None = None,
|
|
413
|
+
headers: dict[str, str] | None = None,
|
|
418
414
|
) -> bool:
|
|
419
415
|
if context is None:
|
|
420
416
|
context = {}
|
|
421
417
|
if headers is not None:
|
|
422
418
|
if X_USER_HEADER in headers:
|
|
423
|
-
context["
|
|
419
|
+
context["user_id_sha256"] = hashlib.sha256(
|
|
420
|
+
headers[X_USER_HEADER].encode("utf-8")
|
|
421
|
+
).hexdigest()
|
|
424
422
|
if X_ACCOUNT_HEADER in headers:
|
|
425
|
-
context["
|
|
423
|
+
context["account_id_sha256"] = hashlib.sha256(headers[X_ACCOUNT_HEADER].encode()).hexdigest()
|
|
426
424
|
if X_ACCOUNT_TYPE_HEADER in headers:
|
|
427
425
|
context["account_type"] = headers[X_ACCOUNT_TYPE_HEADER]
|
|
428
426
|
return get_feature_flags().enabled(name, default=default, context=context)
|
{nucliadb_utils-6.9.1.post5229.dist-info → nucliadb_utils-6.10.0.post5732.dist-info}/METADATA
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: nucliadb_utils
|
|
3
|
-
Version: 6.
|
|
3
|
+
Version: 6.10.0.post5732
|
|
4
4
|
Summary: NucliaDB util library
|
|
5
5
|
Author-email: Nuclia <nucliadb@nuclia.com>
|
|
6
6
|
License-Expression: AGPL-3.0-or-later
|
|
@@ -8,13 +8,12 @@ Project-URL: Homepage, https://nuclia.com
|
|
|
8
8
|
Project-URL: Repository, https://github.com/nuclia/nucliadb
|
|
9
9
|
Classifier: Development Status :: 4 - Beta
|
|
10
10
|
Classifier: Programming Language :: Python
|
|
11
|
-
Classifier: Programming Language :: Python :: 3.9
|
|
12
11
|
Classifier: Programming Language :: Python :: 3.10
|
|
13
12
|
Classifier: Programming Language :: Python :: 3.11
|
|
14
13
|
Classifier: Programming Language :: Python :: 3.12
|
|
15
14
|
Classifier: Programming Language :: Python :: 3 :: Only
|
|
16
15
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
17
|
-
Requires-Python: <4,>=3.
|
|
16
|
+
Requires-Python: <4,>=3.10
|
|
18
17
|
Description-Content-Type: text/markdown
|
|
19
18
|
Requires-Dist: pydantic>=2.6
|
|
20
19
|
Requires-Dist: pydantic-settings>=2.2
|
|
@@ -26,9 +25,10 @@ Requires-Dist: mmh3>=3.0.0
|
|
|
26
25
|
Requires-Dist: nats-py[nkeys]>=2.6.0
|
|
27
26
|
Requires-Dist: PyNaCl
|
|
28
27
|
Requires-Dist: pyjwt>=2.4.0
|
|
29
|
-
Requires-Dist: mrflagly>=0.2.
|
|
30
|
-
Requires-Dist:
|
|
31
|
-
Requires-Dist: nucliadb-
|
|
28
|
+
Requires-Dist: mrflagly>=0.2.14
|
|
29
|
+
Requires-Dist: nidx-protos>=6.10.0.post5732
|
|
30
|
+
Requires-Dist: nucliadb-protos>=6.10.0.post5732
|
|
31
|
+
Requires-Dist: nucliadb-telemetry>=6.10.0.post5732
|
|
32
32
|
Provides-Extra: cache
|
|
33
33
|
Requires-Dist: redis>=4.3.4; extra == "cache"
|
|
34
34
|
Requires-Dist: orjson>=3.6.7; extra == "cache"
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
nucliadb_utils/__init__.py,sha256=EvBCH1iTODe-AgXm48aj4kVUt_Std3PeL8QnwimR5wI,895
|
|
2
|
+
nucliadb_utils/asyncio_utils.py,sha256=DqJAItarP8FfOJ5mQxbTgY1CCaRiOG_e2HCENeg4nlc,2872
|
|
3
|
+
nucliadb_utils/authentication.py,sha256=7dSw6n11dP8hwsBuCp1SK8Lqmqh8L_6laFytGOfOMW0,6390
|
|
4
|
+
nucliadb_utils/const.py,sha256=F1kZzTSbJvg9YYGhSi-H6KJsfTkTiX8PER4RBAOkq40,1521
|
|
5
|
+
nucliadb_utils/debug.py,sha256=WSHqkoZEpFq6u4LreK-ayOyZjn-whrcLiJ3Xj0tbAUc,2424
|
|
6
|
+
nucliadb_utils/exceptions.py,sha256=y_3wk77WLVUtdo-5FtbBsdSkCtK_DsJkdWb5BoPn3qo,1094
|
|
7
|
+
nucliadb_utils/featureflagging.py,sha256=NordkGVQ2MyG1MF1No3zh-GCRjB8cyvtgj2U4uPHzCg,2508
|
|
8
|
+
nucliadb_utils/grpc.py,sha256=h1KiZJLOwISgyWSQuB1MbosR7N8BKj07-3VlqIDXPmk,3295
|
|
9
|
+
nucliadb_utils/helpers.py,sha256=KDopdT_q8SdzUeIGofv6x7LssVjwvEdr1xmmPXSKopg,3345
|
|
10
|
+
nucliadb_utils/nats.py,sha256=Kb-UxBhE008sz9UuMzdNt6lZIPLCYjj9ZftEnki9MDw,15190
|
|
11
|
+
nucliadb_utils/partition.py,sha256=jBgy4Hu5Iwn4gjbPPcthSykwf-qNx-GcLAIwbzPd1d0,1157
|
|
12
|
+
nucliadb_utils/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
13
|
+
nucliadb_utils/run.py,sha256=aZGBRPzUX65tZ4qoDayB-A1dcavFOXucpDpvzDys5sA,1836
|
|
14
|
+
nucliadb_utils/settings.py,sha256=HKokp0L656eph6W31ZaIfkXBUihf96Le_UNf96qMeEc,8327
|
|
15
|
+
nucliadb_utils/signals.py,sha256=X33dfQib3ao96vILPhVuFwXJbxLx0jdNf2s0hUNFW5c,2670
|
|
16
|
+
nucliadb_utils/store.py,sha256=foXhKJYGCrBtaLL7A7yk8HLB3BK9XQpOi77bdy-Lfdo,884
|
|
17
|
+
nucliadb_utils/transaction.py,sha256=mtCggq_4uxNh8dx9uI8oJ0No9BUsy5A2bxDcrCFmR54,7932
|
|
18
|
+
nucliadb_utils/utilities.py,sha256=tQVZqftFZVi-DFPpjAJrMF_RICuKI6o_JlVADme9vWY,15746
|
|
19
|
+
nucliadb_utils/audit/__init__.py,sha256=cp15ZcFnHvpcu_5-aK2A4uUyvuZVV_MJn4bIXMa20ks,835
|
|
20
|
+
nucliadb_utils/audit/audit.py,sha256=eWV2RJURYjo5l6jHOKb9QRxpJALMI7urUlgnBk296zg,3749
|
|
21
|
+
nucliadb_utils/audit/basic.py,sha256=NslHyX50AmGH_XGaWd0jDiYwX92ZRoK4Y0_jSk7DFcM,4147
|
|
22
|
+
nucliadb_utils/audit/stream.py,sha256=Hf1oLna9b3gOIlDr0Qh3FaEVrIAaoDYl76LYEXo1168,17565
|
|
23
|
+
nucliadb_utils/cache/__init__.py,sha256=itSI7dtTwFP55YMX4iK7JzdMHS5CQVUiB1XzQu4UBh8,833
|
|
24
|
+
nucliadb_utils/cache/exceptions.py,sha256=Zu-O_-0-yctOEgoDGI92gPzWfBMRrpiAyESA62ld6MA,975
|
|
25
|
+
nucliadb_utils/cache/nats.py,sha256=2ARDAfq-EqutnbklfxcbpAoyQpKPUoF2x0-TIAHShEE,7174
|
|
26
|
+
nucliadb_utils/cache/pubsub.py,sha256=hDxhwgySKBhaEQ85J7SygOYVyDoRSD8oN4tPV-Z3pKs,1709
|
|
27
|
+
nucliadb_utils/cache/settings.py,sha256=nKFP0zdNZYy3wXYFpcmkEzatkh-eIm6b_BVgwCgCmQg,1022
|
|
28
|
+
nucliadb_utils/encryption/__init__.py,sha256=oav6jFOTGgmIen88sdmy-bCK-uj1tyDt2hr7lB2YKik,2690
|
|
29
|
+
nucliadb_utils/encryption/settings.py,sha256=04Hyxp0_58OW6J60V9I3Gh5y0qCZCd9g4XDBnpMSoz4,1436
|
|
30
|
+
nucliadb_utils/fastapi/__init__.py,sha256=itSI7dtTwFP55YMX4iK7JzdMHS5CQVUiB1XzQu4UBh8,833
|
|
31
|
+
nucliadb_utils/fastapi/openapi.py,sha256=q20dKocTsZY_esKogcTwKA3Bjc-5we4oOdO-0Z__YdY,1706
|
|
32
|
+
nucliadb_utils/fastapi/run.py,sha256=OVuzjfsX_8IdVXKuK-RsIVf2OdP6t8h9DLfEn2P_-KI,3910
|
|
33
|
+
nucliadb_utils/fastapi/versioning.py,sha256=sNX3dZdJUsw_cPwtXm_50amAaiIpTDB9FQp9bMgxKD0,3935
|
|
34
|
+
nucliadb_utils/nuclia_usage/__init__.py,sha256=cp15ZcFnHvpcu_5-aK2A4uUyvuZVV_MJn4bIXMa20ks,835
|
|
35
|
+
nucliadb_utils/nuclia_usage/utils/__init__.py,sha256=cp15ZcFnHvpcu_5-aK2A4uUyvuZVV_MJn4bIXMa20ks,835
|
|
36
|
+
nucliadb_utils/nuclia_usage/utils/kb_usage_report.py,sha256=pfVJhGlgTwY8Ab1FGBPEgWsKiLSvx-CUZHvp4FTnARU,3894
|
|
37
|
+
nucliadb_utils/storages/__init__.py,sha256=5Qc8AUWiJv9_JbGCBpAn88AIJhwDlm0OPQpg2ZdRL4U,872
|
|
38
|
+
nucliadb_utils/storages/azure.py,sha256=C0TxE9m3s0Mi4KGZ65otmJ_EMvusB9UGMQ1gxnsFi-M,18373
|
|
39
|
+
nucliadb_utils/storages/exceptions.py,sha256=6YhFLf8k0ABy5AVfxIJUo7w6AK0SJjktiyQTwF3gCdg,2344
|
|
40
|
+
nucliadb_utils/storages/gcs.py,sha256=R2S2RZMw5N7_Y_cUOrrBK2awI2d9RFEWcG3swzeMgXE,28132
|
|
41
|
+
nucliadb_utils/storages/local.py,sha256=1BkwzcNzFTj2xMCU4b9QOSc197Qo4HcOsMzpk-Nea8I,11655
|
|
42
|
+
nucliadb_utils/storages/nuclia.py,sha256=eAtqzercnlnhA5jBpaHxJDoczxkxaH9SnV7bv3oH_i8,2066
|
|
43
|
+
nucliadb_utils/storages/object_store.py,sha256=2U1f1VPy7-1xvGXVhDr_-gdzUUwQ9mZiYbI_Sw2jzj8,4509
|
|
44
|
+
nucliadb_utils/storages/s3.py,sha256=l9Zoyp-Ov4zFpNdSah2DkI9D5mn9JF8ZFX6Y_5HwZ7M,21815
|
|
45
|
+
nucliadb_utils/storages/settings.py,sha256=4I4XeD0Hf4em8OPxYRtENpri4K5UGUDctpOcCnDTiJQ,1332
|
|
46
|
+
nucliadb_utils/storages/storage.py,sha256=CJoXMIGvYu0X1kULV9kqsnHrmQ7OSS6MgGcrPeixV5c,21723
|
|
47
|
+
nucliadb_utils/storages/utils.py,sha256=CssAoJQTsVjM2YJSEKy8xPiuKg5FsQ2xocRyAI-sJ_g,1471
|
|
48
|
+
nucliadb_utils/tests/__init__.py,sha256=Oo9CAE7B0eW5VHn8sHd6o30SQzOWUhktLPRXdlDOleA,1456
|
|
49
|
+
nucliadb_utils/tests/asyncbenchmark.py,sha256=L2ysoMdc5JUbDT-p3iPBTCdvEH8jS3HFnyez3wn0cUM,10628
|
|
50
|
+
nucliadb_utils/tests/azure.py,sha256=pNpJxwzRWu603ERWwOtog7bSkA8W7bzldo3Mmo93B8U,5066
|
|
51
|
+
nucliadb_utils/tests/fixtures.py,sha256=_U66j-80dkKYk_R4W9B68kwdleqsZG4rGL33jL6S0ZY,3944
|
|
52
|
+
nucliadb_utils/tests/gcs.py,sha256=ZS3ETq-8CdnuPeAcM0OldfNc10DyJfhxgb44zbPuZF4,4735
|
|
53
|
+
nucliadb_utils/tests/local.py,sha256=GWw2KduYjMl5ImuRqzzMjvlm6-2g1AdehGLbM_IRdMI,1960
|
|
54
|
+
nucliadb_utils/tests/nats.py,sha256=7UqUhVpVWMpsEJrulRstEksF8wbC9U2JyLC5jcdfnps,2334
|
|
55
|
+
nucliadb_utils/tests/s3.py,sha256=Ep51bQjiW-UpnIjasaXYTMRkxfAx6Ina2VHSEb3Mg9c,3856
|
|
56
|
+
nucliadb_utils-6.10.0.post5732.dist-info/METADATA,sha256=MjSh6ew2WrAB9NsXDfB0qGcyiWYQ16hnVuChsYBYh5I,2179
|
|
57
|
+
nucliadb_utils-6.10.0.post5732.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
58
|
+
nucliadb_utils-6.10.0.post5732.dist-info/top_level.txt,sha256=fE3vJtALTfgh7bcAWcNhcfXkNPp_eVVpbKK-2IYua3E,15
|
|
59
|
+
nucliadb_utils-6.10.0.post5732.dist-info/RECORD,,
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
nucliadb_utils/__init__.py,sha256=EvBCH1iTODe-AgXm48aj4kVUt_Std3PeL8QnwimR5wI,895
|
|
2
|
-
nucliadb_utils/asyncio_utils.py,sha256=h8Y-xpcFFRgNzaiIW0eidz7griAQa7ggbNk34-tAt2c,2888
|
|
3
|
-
nucliadb_utils/authentication.py,sha256=5_b323v2ylJaJvM_0coeSQEtnD-p9IGD-6CPA6IXhik,6471
|
|
4
|
-
nucliadb_utils/const.py,sha256=YtWadXGm044MbwLcfEImNC6skh3e4LKZDu6hjlO0qMU,1521
|
|
5
|
-
nucliadb_utils/debug.py,sha256=Q56Nx9Dp7V2ae3CU2H0ztaZcHTJXdlflPLKLeOPZ170,2436
|
|
6
|
-
nucliadb_utils/exceptions.py,sha256=y_3wk77WLVUtdo-5FtbBsdSkCtK_DsJkdWb5BoPn3qo,1094
|
|
7
|
-
nucliadb_utils/featureflagging.py,sha256=ctd9Nqm_nhoedMIV2GC819-cSP5GlkLYXCRE0DbwxYU,2353
|
|
8
|
-
nucliadb_utils/grpc.py,sha256=apu0uePnkGHCAT7GRQ9YZfRYyFj26kJ440i8jitbM3U,3314
|
|
9
|
-
nucliadb_utils/helpers.py,sha256=eed7_E1MKh9eW3CpqOXka3OvLw5C9eJGC_R-1MPYdfY,3336
|
|
10
|
-
nucliadb_utils/nats.py,sha256=U21Cfg36_IHd3ZLXEC4eZ7nZ1Soh_ZNFFwjryNyd2-8,15248
|
|
11
|
-
nucliadb_utils/partition.py,sha256=jBgy4Hu5Iwn4gjbPPcthSykwf-qNx-GcLAIwbzPd1d0,1157
|
|
12
|
-
nucliadb_utils/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
13
|
-
nucliadb_utils/run.py,sha256=Es0_Bu5Yc-LWczvwL6gzWqSwC85RjDCk-0oFQAJi9g4,1827
|
|
14
|
-
nucliadb_utils/settings.py,sha256=H9yKrHPR5emTxai-D4owg4CjE4_-E0qR0HyuHERQNH4,8493
|
|
15
|
-
nucliadb_utils/signals.py,sha256=lo_Mk12NIX5Au--3H3WObvDOXq_OMurql2qiC2TnAao,2676
|
|
16
|
-
nucliadb_utils/store.py,sha256=kQ35HemE0v4_Qg6xVqNIJi8vSFAYQtwI3rDtMsNy62Y,890
|
|
17
|
-
nucliadb_utils/transaction.py,sha256=l3ZvrITYMnAs_fv1OOC-1nDZxWPG5qmbBhzvuC3DUzQ,8039
|
|
18
|
-
nucliadb_utils/utilities.py,sha256=SjPnCwCUH_lWUKSOZQp9vIcTYmLP0yL_UC8nPwlnds4,15817
|
|
19
|
-
nucliadb_utils/audit/__init__.py,sha256=cp15ZcFnHvpcu_5-aK2A4uUyvuZVV_MJn4bIXMa20ks,835
|
|
20
|
-
nucliadb_utils/audit/audit.py,sha256=xmJJiAGG8rPGADwD9gXN9-QJ80GeGvqmY-kCwEf6PiQ,3598
|
|
21
|
-
nucliadb_utils/audit/basic.py,sha256=fcCYvoFSGVbbB8cSCnm95bN2rf1AAeuWhGfh5no0S-Y,4246
|
|
22
|
-
nucliadb_utils/audit/stream.py,sha256=A0PK-uHW-gXxrDsggbWwbcf2x1CWfP2rYf60wSixg0k,17670
|
|
23
|
-
nucliadb_utils/cache/__init__.py,sha256=itSI7dtTwFP55YMX4iK7JzdMHS5CQVUiB1XzQu4UBh8,833
|
|
24
|
-
nucliadb_utils/cache/exceptions.py,sha256=Zu-O_-0-yctOEgoDGI92gPzWfBMRrpiAyESA62ld6MA,975
|
|
25
|
-
nucliadb_utils/cache/nats.py,sha256=3aV25374fsA_oOr9ZqLDxhNn700O7CIagJ-0Y-ojwqE,7294
|
|
26
|
-
nucliadb_utils/cache/pubsub.py,sha256=YvJHiEhDaMIPofgQRpGY1belN--pOPyfYO1wFTUclt4,1701
|
|
27
|
-
nucliadb_utils/cache/settings.py,sha256=WVeHOE6Re5i4k2hUHdFKfkoL4n83v_Z6UPBK6GHYb8g,1059
|
|
28
|
-
nucliadb_utils/encryption/__init__.py,sha256=oav6jFOTGgmIen88sdmy-bCK-uj1tyDt2hr7lB2YKik,2690
|
|
29
|
-
nucliadb_utils/encryption/settings.py,sha256=yF2AW6c_mu0yWbBn1grAERDAqDvKIpXqQnwD0OFmROI,1467
|
|
30
|
-
nucliadb_utils/fastapi/__init__.py,sha256=itSI7dtTwFP55YMX4iK7JzdMHS5CQVUiB1XzQu4UBh8,833
|
|
31
|
-
nucliadb_utils/fastapi/openapi.py,sha256=b0pLuri0QuzQd0elDyOVXM42YYmES_cmT-jEfsQ1G6Y,1737
|
|
32
|
-
nucliadb_utils/fastapi/run.py,sha256=OVuzjfsX_8IdVXKuK-RsIVf2OdP6t8h9DLfEn2P_-KI,3910
|
|
33
|
-
nucliadb_utils/fastapi/versioning.py,sha256=pwiwuesJW1jElUUI3pI5kcxkigfGBvI64IL6QCBEWS8,3805
|
|
34
|
-
nucliadb_utils/nuclia_usage/__init__.py,sha256=cp15ZcFnHvpcu_5-aK2A4uUyvuZVV_MJn4bIXMa20ks,835
|
|
35
|
-
nucliadb_utils/nuclia_usage/utils/__init__.py,sha256=cp15ZcFnHvpcu_5-aK2A4uUyvuZVV_MJn4bIXMa20ks,835
|
|
36
|
-
nucliadb_utils/nuclia_usage/utils/kb_usage_report.py,sha256=6lLuxCCPQVn3dOuZNL5ThPjl2yws-1TJ_7duhQSWkPU,3934
|
|
37
|
-
nucliadb_utils/storages/__init__.py,sha256=5Qc8AUWiJv9_JbGCBpAn88AIJhwDlm0OPQpg2ZdRL4U,872
|
|
38
|
-
nucliadb_utils/storages/azure.py,sha256=pu0IyKPCn32oT0wI3oJIG6iUxnPtwNgg1zu00C8wDjo,18057
|
|
39
|
-
nucliadb_utils/storages/exceptions.py,sha256=6YhFLf8k0ABy5AVfxIJUo7w6AK0SJjktiyQTwF3gCdg,2344
|
|
40
|
-
nucliadb_utils/storages/gcs.py,sha256=VyT72My34N4pEMmrQc5wdAMNLiuqpYl8OW3d50cJfSA,28222
|
|
41
|
-
nucliadb_utils/storages/local.py,sha256=2aCHpZymORG_dUc1FDq0VFcgQulu0w2pZiUaj9dphFs,11686
|
|
42
|
-
nucliadb_utils/storages/nuclia.py,sha256=vEv94xAT7QM2g80S25QyrOw2pzvP2BAX-ADgZLtuCVc,2097
|
|
43
|
-
nucliadb_utils/storages/object_store.py,sha256=2PueRP5Q3XOuWgKhj6B9Kp2fyBql5np0T400YRUbqn4,4535
|
|
44
|
-
nucliadb_utils/storages/s3.py,sha256=eFFVRgNTIxTz1Hpmd6ofRz9KQhPJAmiyetW4EmWN8EM,21835
|
|
45
|
-
nucliadb_utils/storages/settings.py,sha256=mepN3wbLGL0Pv5yI6D-sNjSAFinEWT7aRi6N3eClNDg,1384
|
|
46
|
-
nucliadb_utils/storages/storage.py,sha256=aOJnx6-WX8U3AAqPL_sWPCghIzlr8e3GKGi8z3-mtqw,22024
|
|
47
|
-
nucliadb_utils/storages/utils.py,sha256=F4Iboa_0_bhDQr-JOKD9sGPld_-hKwJW5ptyZdn9Oag,1505
|
|
48
|
-
nucliadb_utils/tests/__init__.py,sha256=Oo9CAE7B0eW5VHn8sHd6o30SQzOWUhktLPRXdlDOleA,1456
|
|
49
|
-
nucliadb_utils/tests/asyncbenchmark.py,sha256=vrX_x9ifCXi18PfNShc23w9x_VUiB_Ph-2nuolh9z3Q,10707
|
|
50
|
-
nucliadb_utils/tests/azure.py,sha256=rt1KRSYZW1EYhKy4Q0i7IEL9vdoOU6BYw2__S51YfGg,5039
|
|
51
|
-
nucliadb_utils/tests/fixtures.py,sha256=-OeR4NhtXveBqN6sZa7KVaNwyUdsvJUxS_yFmIgF148,3923
|
|
52
|
-
nucliadb_utils/tests/gcs.py,sha256=JNqp5ymeNNU9Ci8rNYTh7-VqP4fjybElhyB3ap7EV1c,4721
|
|
53
|
-
nucliadb_utils/tests/local.py,sha256=z9E11_ol1mu7N8Y6PkjKl-WMPPMl7JqQbDj3uhVa1A0,1933
|
|
54
|
-
nucliadb_utils/tests/nats.py,sha256=rbTaC6kv-u6SdZ7N-XBEGS40XCRiUmFUsKHIYWJfxTs,2325
|
|
55
|
-
nucliadb_utils/tests/s3.py,sha256=kz9ULxrAYLVslZ59I8dtweZ9DJz5R8Ioy2XYrveZzHw,3829
|
|
56
|
-
nucliadb_utils-6.9.1.post5229.dist-info/METADATA,sha256=QkcqFXWPuu1Cz5lt5ecN5osQjyvtVIXjUxE-Rde2S3c,2180
|
|
57
|
-
nucliadb_utils-6.9.1.post5229.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
58
|
-
nucliadb_utils-6.9.1.post5229.dist-info/top_level.txt,sha256=fE3vJtALTfgh7bcAWcNhcfXkNPp_eVVpbKK-2IYua3E,15
|
|
59
|
-
nucliadb_utils-6.9.1.post5229.dist-info/RECORD,,
|
|
File without changes
|
{nucliadb_utils-6.9.1.post5229.dist-info → nucliadb_utils-6.10.0.post5732.dist-info}/top_level.txt
RENAMED
|
File without changes
|