nucliadb-utils 6.9.6.post5473__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.

Files changed (44) hide show
  1. nucliadb_utils/asyncio_utils.py +3 -3
  2. nucliadb_utils/audit/audit.py +41 -31
  3. nucliadb_utils/audit/basic.py +22 -23
  4. nucliadb_utils/audit/stream.py +31 -31
  5. nucliadb_utils/authentication.py +8 -10
  6. nucliadb_utils/cache/nats.py +10 -12
  7. nucliadb_utils/cache/pubsub.py +5 -4
  8. nucliadb_utils/cache/settings.py +2 -3
  9. nucliadb_utils/debug.py +2 -2
  10. nucliadb_utils/encryption/settings.py +1 -2
  11. nucliadb_utils/fastapi/openapi.py +1 -2
  12. nucliadb_utils/fastapi/versioning.py +10 -6
  13. nucliadb_utils/featureflagging.py +7 -4
  14. nucliadb_utils/grpc.py +3 -3
  15. nucliadb_utils/helpers.py +1 -1
  16. nucliadb_utils/nats.py +15 -16
  17. nucliadb_utils/nuclia_usage/utils/kb_usage_report.py +4 -5
  18. nucliadb_utils/run.py +1 -1
  19. nucliadb_utils/settings.py +40 -41
  20. nucliadb_utils/signals.py +3 -3
  21. nucliadb_utils/storages/azure.py +18 -18
  22. nucliadb_utils/storages/gcs.py +22 -21
  23. nucliadb_utils/storages/local.py +8 -8
  24. nucliadb_utils/storages/nuclia.py +1 -2
  25. nucliadb_utils/storages/object_store.py +6 -6
  26. nucliadb_utils/storages/s3.py +22 -22
  27. nucliadb_utils/storages/settings.py +7 -8
  28. nucliadb_utils/storages/storage.py +29 -45
  29. nucliadb_utils/storages/utils.py +2 -3
  30. nucliadb_utils/store.py +2 -2
  31. nucliadb_utils/tests/asyncbenchmark.py +8 -10
  32. nucliadb_utils/tests/azure.py +2 -1
  33. nucliadb_utils/tests/fixtures.py +3 -2
  34. nucliadb_utils/tests/gcs.py +3 -2
  35. nucliadb_utils/tests/local.py +2 -1
  36. nucliadb_utils/tests/nats.py +1 -1
  37. nucliadb_utils/tests/s3.py +2 -1
  38. nucliadb_utils/transaction.py +16 -18
  39. nucliadb_utils/utilities.py +22 -24
  40. {nucliadb_utils-6.9.6.post5473.dist-info → nucliadb_utils-6.10.0.post5732.dist-info}/METADATA +5 -5
  41. nucliadb_utils-6.10.0.post5732.dist-info/RECORD +59 -0
  42. nucliadb_utils-6.9.6.post5473.dist-info/RECORD +0 -59
  43. {nucliadb_utils-6.9.6.post5473.dist-info → nucliadb_utils-6.10.0.post5732.dist-info}/WHEEL +0 -0
  44. {nucliadb_utils-6.9.6.post5473.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, Awaitable, Callable, Coroutine, Dict, TypeVar
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): ... # noqa
39
+ class FixtureAlreadyUsed(Exception): ...
40
40
 
41
41
 
42
- class AsyncBenchmarkFixture(object): # pragma: no cover
43
- _precisions: Dict[Callable, float] = {}
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 %s rounds x %s iterations ..." % (rounds, iterations),
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 %s iterations: %ss." % (loops, format_time(duration)),
259
+ f" Measured {loops} iterations: {format_time(duration)}s.",
262
260
  yellow=True,
263
261
  )
264
262
  if duration >= min_time:
@@ -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, Generator, Iterator
23
+ from typing import Any
23
24
  from unittest.mock import patch
24
25
 
25
26
  import pytest
@@ -19,7 +19,8 @@
19
19
  #
20
20
  import os
21
21
  import sys
22
- from typing import Any, Iterator, Type
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[Type, str] = {
103
+ storage_backend_map: dict[type, str] = {
103
104
  AzureStorage: "azure",
104
105
  GCSStorage: "gcs",
105
106
  LocalStorage: "local",
@@ -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, Iterator, Optional
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: Optional[str] = DOCKER_ENV_GROUPS.group(1) if DOCKER_ENV_GROUPS else None
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
@@ -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, Iterator
23
+ from typing import Any
23
24
  from unittest.mock import patch
24
25
 
25
26
  import pytest
@@ -18,7 +18,7 @@
18
18
  # along with this program. If not, see <http://www.gnu.org/licenses/>.
19
19
 
20
20
  import socket
21
- from typing import AsyncIterator, Iterator
21
+ from collections.abc import AsyncIterator, Iterator
22
22
 
23
23
  import nats
24
24
  import pytest
@@ -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, AsyncIterator
22
+ from typing import Any
22
23
  from unittest.mock import patch
23
24
 
24
25
  import pytest
@@ -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, Optional, Union
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: Optional[int] = None
51
+ seq: int | None = None
52
52
 
53
- def __init__(self, uuid: str, seq: Optional[int] = None):
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: Optional[str] = None,
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: Union[Client, NatsClientTelemetry]
103
- js: Union[JetStreamContext, JetStreamContextTelemetry]
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: Optional[str] = None,
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 {url}".format(url=self.nc.connected_url))
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: {}".format(e),
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: Optional[str] = None):
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: Union[BrokerMessage, BrokerMessageBlobReference],
195
+ writer: BrokerMessage | BrokerMessageBlobReference,
198
196
  partition: int,
199
197
  wait: bool = False,
200
- target_subject: Optional[str] = None, # allow customizing where to send the message
201
- headers: Optional[dict[str, str]] = None,
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: Optional[Event] = None
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}" # noqa
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
@@ -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, List, Optional, Union, cast
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: Union[Utility, str]):
90
+ def get_utility(ident: Utility | str):
91
91
  return MAIN.get(ident)
92
92
 
93
93
 
94
- def set_utility(ident: Union[Utility, str], util: Any):
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: Union[Utility, str]):
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: Optional[List[str]] = None) -> Storage:
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: Optional[Storage] = get_utility(Utility.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() -> Optional[PubSubDriver]:
228
- driver: Optional[PubSubDriver] = get_utility(Utility.PUBSUB)
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 asyncio.iscoroutinefunction(util.finalize):
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: Optional[str] = None,
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: Union[LocalTransactionUtility, TransactionUtility] = (
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() -> Optional[AuditStorage]:
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: Optional[AuditStorage] = get_utility(Utility.AUDIT)
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: Optional[str] = None
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: Optional[dict[str, str]] = None,
417
- headers: Optional[dict[str, str]] = None,
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["user_id_md5"] = hashlib.md5(headers[X_USER_HEADER].encode("utf-8")).hexdigest()
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["account_id_md5"] = hashlib.md5(headers[X_ACCOUNT_HEADER].encode()).hexdigest()
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)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: nucliadb_utils
3
- Version: 6.9.6.post5473
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
@@ -25,10 +25,10 @@ Requires-Dist: mmh3>=3.0.0
25
25
  Requires-Dist: nats-py[nkeys]>=2.6.0
26
26
  Requires-Dist: PyNaCl
27
27
  Requires-Dist: pyjwt>=2.4.0
28
- Requires-Dist: mrflagly>=0.2.9
29
- Requires-Dist: nidx-protos>=6.9.6.post5473
30
- Requires-Dist: nucliadb-protos>=6.9.6.post5473
31
- Requires-Dist: nucliadb-telemetry>=6.9.6.post5473
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=F1kZzTSbJvg9YYGhSi-H6KJsfTkTiX8PER4RBAOkq40,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=oKlSC3B-Bfx7xdrpalpmqUk3nCkMIm7BjyBMWlHC_RU,2372
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=t0ZL_698NqsBz-Ihwkc79tusfzGcm0BVTB5pqceNlvA,18456
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=EUqlNoJW32AI6jpETbDla3teYbxlz8RFTfxSdHgWZdo,21878
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.6.post5473.dist-info/METADATA,sha256=V7vJvzCfdw4mJL-cZGkQsfGEdo45BVnKX1rI1OBg7fw,2174
57
- nucliadb_utils-6.9.6.post5473.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
58
- nucliadb_utils-6.9.6.post5473.dist-info/top_level.txt,sha256=fE3vJtALTfgh7bcAWcNhcfXkNPp_eVVpbKK-2IYua3E,15
59
- nucliadb_utils-6.9.6.post5473.dist-info/RECORD,,