diff --git a/key-value/key-value-aio/src/key_value/aio/adapters/raise_on_missing/adapter.py b/key-value/key-value-aio/src/key_value/aio/adapters/raise_on_missing/adapter.py index 3a3e4861..46ef2ff9 100644 --- a/key-value/key-value-aio/src/key_value/aio/adapters/raise_on_missing/adapter.py +++ b/key-value/key-value-aio/src/key_value/aio/adapters/raise_on_missing/adapter.py @@ -1,4 +1,4 @@ -from collections.abc import Sequence +from collections.abc import Mapping, Sequence from typing import Any, Literal, SupportsFloat, overload from key_value.shared.errors import MissingKeyError @@ -138,7 +138,7 @@ async def ttl_many( return results - async def put(self, key: str, value: dict[str, Any], *, collection: str | None = None, ttl: SupportsFloat | None = None) -> None: + async def put(self, key: str, value: Mapping[str, Any], *, collection: str | None = None, ttl: SupportsFloat | None = None) -> None: """Store a key-value pair in the specified collection with optional TTL. Args: @@ -153,7 +153,7 @@ async def put(self, key: str, value: dict[str, Any], *, collection: str | None = async def put_many( self, keys: list[str], - values: Sequence[dict[str, Any]], + values: Sequence[Mapping[str, Any]], *, collection: str | None = None, ttl: Sequence[SupportsFloat | None] | None = None, diff --git a/key-value/key-value-aio/src/key_value/aio/protocols/key_value.py b/key-value/key-value-aio/src/key_value/aio/protocols/key_value.py index 17eb2d22..938dcb96 100644 --- a/key-value/key-value-aio/src/key_value/aio/protocols/key_value.py +++ b/key-value/key-value-aio/src/key_value/aio/protocols/key_value.py @@ -1,4 +1,4 @@ -from collections.abc import Sequence +from collections.abc import Mapping, Sequence from typing import Any, Protocol, SupportsFloat, runtime_checkable @@ -36,7 +36,7 @@ async def ttl(self, key: str, *, collection: str | None = None) -> tuple[dict[st """ ... - async def put(self, key: str, value: dict[str, Any], *, collection: str | None = None, ttl: SupportsFloat | None = None) -> None: + async def put(self, key: str, value: Mapping[str, Any], *, collection: str | None = None, ttl: SupportsFloat | None = None) -> None: """Store a key-value pair in the specified collection with optional TTL. Args: @@ -85,7 +85,7 @@ async def ttl_many(self, keys: list[str], *, collection: str | None = None) -> l async def put_many( self, keys: list[str], - values: Sequence[dict[str, Any]], + values: Sequence[Mapping[str, Any]], *, collection: str | None = None, ttl: Sequence[SupportsFloat | None] | None = None, diff --git a/key-value/key-value-aio/src/key_value/aio/stores/base.py b/key-value/key-value-aio/src/key_value/aio/stores/base.py index f29ca8e4..febb32ea 100644 --- a/key-value/key-value-aio/src/key_value/aio/stores/base.py +++ b/key-value/key-value-aio/src/key_value/aio/stores/base.py @@ -5,7 +5,7 @@ from abc import ABC, abstractmethod from asyncio.locks import Lock from collections import defaultdict -from collections.abc import Sequence +from collections.abc import Mapping, Sequence from types import TracebackType from typing import Any, SupportsFloat @@ -134,7 +134,7 @@ async def get( if managed_entry.is_expired: return None - return managed_entry.value + return dict(managed_entry.value) @override async def get_many(self, keys: list[str], *, collection: str | None = None) -> list[dict[str, Any] | None]: @@ -142,7 +142,7 @@ async def get_many(self, keys: list[str], *, collection: str | None = None) -> l await self.setup_collection(collection=collection) entries = await self._get_managed_entries(keys=keys, collection=collection) - return [entry.value if entry and not entry.is_expired else None for entry in entries] + return [dict(entry.value) if entry and not entry.is_expired else None for entry in entries] @override async def ttl(self, key: str, *, collection: str | None = None) -> tuple[dict[str, Any] | None, float | None]: @@ -154,7 +154,7 @@ async def ttl(self, key: str, *, collection: str | None = None) -> tuple[dict[st if not managed_entry or managed_entry.is_expired: return (None, None) - return (managed_entry.value, managed_entry.ttl) + return (dict(managed_entry.value), managed_entry.ttl) @override async def ttl_many( @@ -172,7 +172,7 @@ async def ttl_many( await self.setup_collection(collection=collection) entries = await self._get_managed_entries(keys=keys, collection=collection) - return [(entry.value, entry.ttl) if entry and not entry.is_expired else (None, None) for entry in entries] + return [(dict(entry.value), entry.ttl) if entry and not entry.is_expired else (None, None) for entry in entries] @abstractmethod async def _put_managed_entry(self, *, collection: str, key: str, managed_entry: ManagedEntry) -> None: @@ -190,7 +190,7 @@ async def _put_managed_entries(self, *, collection: str, keys: list[str], manage ) @override - async def put(self, key: str, value: dict[str, Any], *, collection: str | None = None, ttl: SupportsFloat | None = None) -> None: + async def put(self, key: str, value: Mapping[str, Any], *, collection: str | None = None, ttl: SupportsFloat | None = None) -> None: """Store a key-value pair in the specified collection with optional TTL.""" collection = collection or self.default_collection await self.setup_collection(collection=collection) @@ -204,8 +204,8 @@ async def put(self, key: str, value: dict[str, Any], *, collection: str | None = ) def _prepare_put_many( - self, *, keys: list[str], values: Sequence[dict[str, Any]], ttl: Sequence[SupportsFloat | None] | SupportsFloat | None - ) -> tuple[list[str], Sequence[dict[str, Any]], list[float | None]]: + self, *, keys: list[str], values: Sequence[Mapping[str, Any]], ttl: Sequence[SupportsFloat | None] | SupportsFloat | None + ) -> tuple[list[str], Sequence[Mapping[str, Any]], list[float | None]]: """Prepare multiple managed entries for a put_many operation. Inheriting classes can use this method if they need to modify a put_many operation.""" @@ -226,7 +226,7 @@ def _prepare_put_many( async def put_many( self, keys: list[str], - values: Sequence[dict[str, Any]], + values: Sequence[Mapping[str, Any]], *, collection: str | None = None, ttl: Sequence[SupportsFloat | None] | None = None, diff --git a/key-value/key-value-aio/src/key_value/aio/wrappers/base.py b/key-value/key-value-aio/src/key_value/aio/wrappers/base.py index 5b479ab5..bbb27283 100644 --- a/key-value/key-value-aio/src/key_value/aio/wrappers/base.py +++ b/key-value/key-value-aio/src/key_value/aio/wrappers/base.py @@ -1,4 +1,4 @@ -from collections.abc import Sequence +from collections.abc import Mapping, Sequence from typing import Any, SupportsFloat from typing_extensions import override @@ -28,14 +28,14 @@ async def ttl_many(self, keys: list[str], *, collection: str | None = None) -> l return await self.key_value.ttl_many(collection=collection, keys=keys) @override - async def put(self, key: str, value: dict[str, Any], *, collection: str | None = None, ttl: SupportsFloat | None = None) -> None: + async def put(self, key: str, value: Mapping[str, Any], *, collection: str | None = None, ttl: SupportsFloat | None = None) -> None: return await self.key_value.put(collection=collection, key=key, value=value, ttl=ttl) @override async def put_many( self, keys: list[str], - values: Sequence[dict[str, Any]], + values: Sequence[Mapping[str, Any]], *, collection: str | None = None, ttl: Sequence[SupportsFloat | None] | None = None, diff --git a/key-value/key-value-aio/src/key_value/aio/wrappers/compression/wrapper.py b/key-value/key-value-aio/src/key_value/aio/wrappers/compression/wrapper.py index 687af0b8..4869aca3 100644 --- a/key-value/key-value-aio/src/key_value/aio/wrappers/compression/wrapper.py +++ b/key-value/key-value-aio/src/key_value/aio/wrappers/compression/wrapper.py @@ -1,7 +1,7 @@ import base64 import gzip import json -from collections.abc import Sequence +from collections.abc import Mapping, Sequence from typing import Any, SupportsFloat from key_value.shared.utils.managed_entry import ManagedEntry @@ -131,18 +131,18 @@ async def ttl_many(self, keys: list[str], *, collection: str | None = None) -> l return [(self._decompress_value(value), ttl) for value, ttl in results] @override - async def put(self, key: str, value: dict[str, Any], *, collection: str | None = None, ttl: SupportsFloat | None = None) -> None: - compressed_value = self._compress_value(value) + async def put(self, key: str, value: Mapping[str, Any], *, collection: str | None = None, ttl: SupportsFloat | None = None) -> None: + compressed_value = self._compress_value(dict(value)) return await self.key_value.put(key=key, value=compressed_value, collection=collection, ttl=ttl) @override async def put_many( self, keys: list[str], - values: Sequence[dict[str, Any]], + values: Sequence[Mapping[str, Any]], *, collection: str | None = None, ttl: Sequence[SupportsFloat | None] | None = None, ) -> None: - compressed_values = [self._compress_value(value) for value in values] + compressed_values = [self._compress_value(dict(value)) for value in values] return await self.key_value.put_many(keys=keys, values=compressed_values, collection=collection, ttl=ttl) diff --git a/key-value/key-value-aio/src/key_value/aio/wrappers/encryption/base.py b/key-value/key-value-aio/src/key_value/aio/wrappers/encryption/base.py index fd7baa07..157b1bcc 100644 --- a/key-value/key-value-aio/src/key_value/aio/wrappers/encryption/base.py +++ b/key-value/key-value-aio/src/key_value/aio/wrappers/encryption/base.py @@ -1,6 +1,6 @@ import base64 import json -from collections.abc import Callable, Sequence +from collections.abc import Callable, Mapping, Sequence from typing import Any, SupportsFloat from key_value.shared.errors.key_value import SerializationError @@ -158,18 +158,18 @@ async def ttl_many(self, keys: list[str], *, collection: str | None = None) -> l return [(self._decrypt_value(value), ttl) for value, ttl in results] @override - async def put(self, key: str, value: dict[str, Any], *, collection: str | None = None, ttl: SupportsFloat | None = None) -> None: - encrypted_value = self._encrypt_value(value) + async def put(self, key: str, value: Mapping[str, Any], *, collection: str | None = None, ttl: SupportsFloat | None = None) -> None: + encrypted_value = self._encrypt_value(dict(value)) return await self.key_value.put(key=key, value=encrypted_value, collection=collection, ttl=ttl) @override async def put_many( self, keys: list[str], - values: Sequence[dict[str, Any]], + values: Sequence[Mapping[str, Any]], *, collection: str | None = None, ttl: Sequence[SupportsFloat | None] | None = None, ) -> None: - encrypted_values = [self._encrypt_value(value) for value in values] + encrypted_values = [self._encrypt_value(dict(value)) for value in values] return await self.key_value.put_many(keys=keys, values=encrypted_values, collection=collection, ttl=ttl) diff --git a/key-value/key-value-aio/src/key_value/aio/wrappers/fallback/wrapper.py b/key-value/key-value-aio/src/key_value/aio/wrappers/fallback/wrapper.py index 24fe281d..1168ce12 100644 --- a/key-value/key-value-aio/src/key_value/aio/wrappers/fallback/wrapper.py +++ b/key-value/key-value-aio/src/key_value/aio/wrappers/fallback/wrapper.py @@ -1,4 +1,4 @@ -from collections.abc import Sequence +from collections.abc import Mapping, Sequence from typing import Any, SupportsFloat from typing_extensions import override @@ -71,7 +71,7 @@ async def ttl_many(self, keys: list[str], *, collection: str | None = None) -> l return await self.fallback_key_value.ttl_many(keys=keys, collection=collection) @override - async def put(self, key: str, value: dict[str, Any], *, collection: str | None = None, ttl: SupportsFloat | None = None) -> None: + async def put(self, key: str, value: Mapping[str, Any], *, collection: str | None = None, ttl: SupportsFloat | None = None) -> None: if self.write_to_fallback: try: return await self.primary_key_value.put(key=key, value=value, collection=collection, ttl=ttl) @@ -84,7 +84,7 @@ async def put(self, key: str, value: dict[str, Any], *, collection: str | None = async def put_many( self, keys: list[str], - values: Sequence[dict[str, Any]], + values: Sequence[Mapping[str, Any]], *, collection: str | None = None, ttl: Sequence[SupportsFloat | None] | None = None, diff --git a/key-value/key-value-aio/src/key_value/aio/wrappers/limit_size/wrapper.py b/key-value/key-value-aio/src/key_value/aio/wrappers/limit_size/wrapper.py index 57131bdb..126bcd8b 100644 --- a/key-value/key-value-aio/src/key_value/aio/wrappers/limit_size/wrapper.py +++ b/key-value/key-value-aio/src/key_value/aio/wrappers/limit_size/wrapper.py @@ -1,4 +1,4 @@ -from collections.abc import Sequence +from collections.abc import Mapping, Sequence from typing import Any, SupportsFloat from key_value.shared.errors.wrappers.limit_size import EntryTooLargeError, EntryTooSmallError @@ -80,28 +80,28 @@ def _within_size_limit(self, value: dict[str, Any], *, collection: str | None = return True @override - async def put(self, key: str, value: dict[str, Any], *, collection: str | None = None, ttl: SupportsFloat | None = None) -> None: - if self._within_size_limit(value=value, collection=collection, key=key): + async def put(self, key: str, value: Mapping[str, Any], *, collection: str | None = None, ttl: SupportsFloat | None = None) -> None: + if self._within_size_limit(value=dict(value), collection=collection, key=key): await self.key_value.put(collection=collection, key=key, value=value, ttl=ttl) @override async def put_many( self, keys: list[str], - values: Sequence[dict[str, Any]], + values: Sequence[Mapping[str, Any]], *, collection: str | None = None, ttl: Sequence[SupportsFloat | None] | None = None, ) -> None: filtered_keys: list[str] = [] - filtered_values: list[dict[str, Any]] = [] + filtered_values: list[Mapping[str, Any]] = [] filtered_ttls: list[SupportsFloat | None] | None = None if isinstance(ttl, Sequence): filtered_ttls = [] for i, (k, v) in enumerate(zip(keys, values, strict=True)): - if self._within_size_limit(value=v, collection=collection, key=k): + if self._within_size_limit(value=dict(v), collection=collection, key=k): filtered_keys.append(k) filtered_values.append(v) if isinstance(ttl, Sequence): diff --git a/key-value/key-value-aio/src/key_value/aio/wrappers/logging/wrapper.py b/key-value/key-value-aio/src/key_value/aio/wrappers/logging/wrapper.py index 9407be28..938773af 100644 --- a/key-value/key-value-aio/src/key_value/aio/wrappers/logging/wrapper.py +++ b/key-value/key-value-aio/src/key_value/aio/wrappers/logging/wrapper.py @@ -1,6 +1,6 @@ import json import logging -from collections.abc import Sequence +from collections.abc import Mapping, Sequence from typing import Any, Literal, SupportsFloat from typing_extensions import override @@ -59,7 +59,7 @@ def _format_message( action: str, keys: list[str] | str, collection: str | None, - values: dict[str, Any] | Sequence[dict[str, Any]] | None = None, + values: Mapping[str, Any] | Sequence[Mapping[str, Any]] | None = None, extra: dict[str, Any] | None = None, ) -> str: if self.structured_logs: @@ -92,7 +92,7 @@ def _log( action: str, keys: list[str] | str, collection: str | None, - values: dict[str, Any] | Sequence[dict[str, Any]] | None = None, + values: Mapping[str, Any] | Sequence[Mapping[str, Any]] | None = None, extra: dict[str, Any] | None = None, ) -> None: self.logger.log( @@ -146,7 +146,7 @@ async def ttl_many(self, keys: list[str], *, collection: str | None = None) -> l return results @override - async def put(self, key: str, value: dict[str, Any], *, collection: str | None = None, ttl: SupportsFloat | None = None) -> None: + async def put(self, key: str, value: Mapping[str, Any], *, collection: str | None = None, ttl: SupportsFloat | None = None) -> None: self._log(state="start", action="PUT", keys=key, collection=collection, values=value, extra={"ttl": ttl}) await self.key_value.put(key=key, value=value, collection=collection, ttl=ttl) @@ -157,7 +157,7 @@ async def put(self, key: str, value: dict[str, Any], *, collection: str | None = async def put_many( self, keys: list[str], - values: Sequence[dict[str, Any]], + values: Sequence[Mapping[str, Any]], *, collection: str | None = None, ttl: Sequence[SupportsFloat | None] | None = None, diff --git a/key-value/key-value-aio/src/key_value/aio/wrappers/passthrough_cache/wrapper.py b/key-value/key-value-aio/src/key_value/aio/wrappers/passthrough_cache/wrapper.py index 1744c3e6..72490a89 100644 --- a/key-value/key-value-aio/src/key_value/aio/wrappers/passthrough_cache/wrapper.py +++ b/key-value/key-value-aio/src/key_value/aio/wrappers/passthrough_cache/wrapper.py @@ -1,4 +1,4 @@ -from collections.abc import Sequence +from collections.abc import Mapping, Sequence from typing import Any, SupportsFloat from typing_extensions import override @@ -155,7 +155,7 @@ async def ttl_many(self, keys: list[str], *, collection: str | None = None) -> l return [key_to_value[key] for key in keys] @override - async def put(self, key: str, value: dict[str, Any], *, collection: str | None = None, ttl: SupportsFloat | None = None) -> None: + async def put(self, key: str, value: Mapping[str, Any], *, collection: str | None = None, ttl: SupportsFloat | None = None) -> None: _ = await self.cache_key_value.delete(collection=collection, key=key) await self.primary_key_value.put(collection=collection, key=key, value=value, ttl=ttl) @@ -164,7 +164,7 @@ async def put(self, key: str, value: dict[str, Any], *, collection: str | None = async def put_many( self, keys: list[str], - values: Sequence[dict[str, Any]], + values: Sequence[Mapping[str, Any]], *, collection: str | None = None, ttl: Sequence[SupportsFloat | None] | None = None, diff --git a/key-value/key-value-aio/src/key_value/aio/wrappers/prefix_collections/wrapper.py b/key-value/key-value-aio/src/key_value/aio/wrappers/prefix_collections/wrapper.py index 78bcca37..4aa7a2e4 100644 --- a/key-value/key-value-aio/src/key_value/aio/wrappers/prefix_collections/wrapper.py +++ b/key-value/key-value-aio/src/key_value/aio/wrappers/prefix_collections/wrapper.py @@ -1,4 +1,4 @@ -from collections.abc import Sequence +from collections.abc import Mapping, Sequence from typing import Any, SupportsFloat from key_value.shared.utils.compound import prefix_collection, unprefix_collection @@ -52,7 +52,7 @@ async def ttl_many(self, keys: list[str], *, collection: str | None = None) -> l return await self.key_value.ttl_many(keys=keys, collection=new_collection) @override - async def put(self, key: str, value: dict[str, Any], *, collection: str | None = None, ttl: SupportsFloat | None = None) -> None: + async def put(self, key: str, value: Mapping[str, Any], *, collection: str | None = None, ttl: SupportsFloat | None = None) -> None: new_collection: str = self._prefix_collection(collection=collection) return await self.key_value.put(key=key, value=value, collection=new_collection, ttl=ttl) @@ -60,7 +60,7 @@ async def put(self, key: str, value: dict[str, Any], *, collection: str | None = async def put_many( self, keys: list[str], - values: Sequence[dict[str, Any]], + values: Sequence[Mapping[str, Any]], *, collection: str | None = None, ttl: Sequence[SupportsFloat | None] | None = None, diff --git a/key-value/key-value-aio/src/key_value/aio/wrappers/prefix_keys/wrapper.py b/key-value/key-value-aio/src/key_value/aio/wrappers/prefix_keys/wrapper.py index e641ad77..0e7f8a66 100644 --- a/key-value/key-value-aio/src/key_value/aio/wrappers/prefix_keys/wrapper.py +++ b/key-value/key-value-aio/src/key_value/aio/wrappers/prefix_keys/wrapper.py @@ -1,4 +1,4 @@ -from collections.abc import Sequence +from collections.abc import Mapping, Sequence from typing import Any, SupportsFloat from key_value.shared.utils.compound import prefix_key, unprefix_key @@ -49,7 +49,7 @@ async def ttl_many(self, keys: list[str], *, collection: str | None = None) -> l return await self.key_value.ttl_many(keys=new_keys, collection=collection) @override - async def put(self, key: str, value: dict[str, Any], *, collection: str | None = None, ttl: SupportsFloat | None = None) -> None: + async def put(self, key: str, value: Mapping[str, Any], *, collection: str | None = None, ttl: SupportsFloat | None = None) -> None: new_key: str = self._prefix_key(key=key) return await self.key_value.put(key=new_key, value=value, collection=collection, ttl=ttl) @@ -57,7 +57,7 @@ async def put(self, key: str, value: dict[str, Any], *, collection: str | None = async def put_many( self, keys: list[str], - values: Sequence[dict[str, Any]], + values: Sequence[Mapping[str, Any]], *, collection: str | None = None, ttl: Sequence[SupportsFloat | None] | None = None, diff --git a/key-value/key-value-aio/src/key_value/aio/wrappers/read_only/wrapper.py b/key-value/key-value-aio/src/key_value/aio/wrappers/read_only/wrapper.py index cc8ce254..cf31f769 100644 --- a/key-value/key-value-aio/src/key_value/aio/wrappers/read_only/wrapper.py +++ b/key-value/key-value-aio/src/key_value/aio/wrappers/read_only/wrapper.py @@ -1,4 +1,4 @@ -from collections.abc import Sequence +from collections.abc import Mapping, Sequence from typing import Any, SupportsFloat from key_value.shared.errors.wrappers.read_only import ReadOnlyError @@ -54,7 +54,7 @@ async def ttl_many(self, keys: list[str], *, collection: str | None = None) -> l return await self.key_value.ttl_many(keys=keys, collection=collection) @override - async def put(self, key: str, value: dict[str, Any], *, collection: str | None = None, ttl: SupportsFloat | None = None) -> None: + async def put(self, key: str, value: Mapping[str, Any], *, collection: str | None = None, ttl: SupportsFloat | None = None) -> None: if self.raise_on_write: raise ReadOnlyError(operation="put", collection=collection, key=key) @@ -62,7 +62,7 @@ async def put(self, key: str, value: dict[str, Any], *, collection: str | None = async def put_many( self, keys: list[str], - values: Sequence[dict[str, Any]], + values: Sequence[Mapping[str, Any]], *, collection: str | None = None, ttl: Sequence[SupportsFloat | None] | None = None, diff --git a/key-value/key-value-aio/src/key_value/aio/wrappers/retry/wrapper.py b/key-value/key-value-aio/src/key_value/aio/wrappers/retry/wrapper.py index 3f2f9f55..b725f831 100644 --- a/key-value/key-value-aio/src/key_value/aio/wrappers/retry/wrapper.py +++ b/key-value/key-value-aio/src/key_value/aio/wrappers/retry/wrapper.py @@ -1,4 +1,4 @@ -from collections.abc import Sequence +from collections.abc import Mapping, Sequence from typing import Any, SupportsFloat, TypeVar from key_value.shared.code_gen.run import async_retry_operation @@ -104,7 +104,7 @@ async def ttl_many(self, keys: list[str], *, collection: str | None = None) -> l ) @override - async def put(self, key: str, value: dict[str, Any], *, collection: str | None = None, ttl: SupportsFloat | None = None) -> None: + async def put(self, key: str, value: Mapping[str, Any], *, collection: str | None = None, ttl: SupportsFloat | None = None) -> None: return await async_retry_operation( max_retries=self.max_retries, retry_on=self.retry_on, @@ -122,7 +122,7 @@ async def put(self, key: str, value: dict[str, Any], *, collection: str | None = async def put_many( self, keys: list[str], - values: Sequence[dict[str, Any]], + values: Sequence[Mapping[str, Any]], *, collection: str | None = None, ttl: Sequence[SupportsFloat | None] | None = None, diff --git a/key-value/key-value-aio/src/key_value/aio/wrappers/single_collection/wrapper.py b/key-value/key-value-aio/src/key_value/aio/wrappers/single_collection/wrapper.py index b3edafdb..045d64fc 100644 --- a/key-value/key-value-aio/src/key_value/aio/wrappers/single_collection/wrapper.py +++ b/key-value/key-value-aio/src/key_value/aio/wrappers/single_collection/wrapper.py @@ -1,4 +1,4 @@ -from collections.abc import Sequence +from collections.abc import Mapping, Sequence from typing import Any, SupportsFloat from key_value.shared.utils.compound import DEFAULT_PREFIX_SEPARATOR, prefix_key, unprefix_key @@ -57,7 +57,7 @@ async def ttl_many(self, keys: list[str], *, collection: str | None = None) -> l return await self.key_value.ttl_many(keys=new_keys, collection=self.single_collection) @override - async def put(self, key: str, value: dict[str, Any], *, collection: str | None = None, ttl: SupportsFloat | None = None) -> None: + async def put(self, key: str, value: Mapping[str, Any], *, collection: str | None = None, ttl: SupportsFloat | None = None) -> None: new_key: str = self._prefix_key(key=key, collection=collection) return await self.key_value.put(key=new_key, value=value, collection=self.single_collection, ttl=ttl) @@ -65,7 +65,7 @@ async def put(self, key: str, value: dict[str, Any], *, collection: str | None = async def put_many( self, keys: list[str], - values: Sequence[dict[str, Any]], + values: Sequence[Mapping[str, Any]], *, collection: str | None = None, ttl: Sequence[SupportsFloat | None] | None = None, diff --git a/key-value/key-value-aio/src/key_value/aio/wrappers/statistics/wrapper.py b/key-value/key-value-aio/src/key_value/aio/wrappers/statistics/wrapper.py index bd1ced98..bd8423a5 100644 --- a/key-value/key-value-aio/src/key_value/aio/wrappers/statistics/wrapper.py +++ b/key-value/key-value-aio/src/key_value/aio/wrappers/statistics/wrapper.py @@ -1,4 +1,4 @@ -from collections.abc import Sequence +from collections.abc import Mapping, Sequence from dataclasses import dataclass, field from typing import Any, SupportsFloat @@ -135,7 +135,7 @@ async def ttl(self, key: str, *, collection: str | None = None) -> tuple[dict[st return None, None @override - async def put(self, key: str, value: dict[str, Any], *, collection: str | None = None, ttl: SupportsFloat | None = None) -> None: + async def put(self, key: str, value: Mapping[str, Any], *, collection: str | None = None, ttl: SupportsFloat | None = None) -> None: collection = collection or DEFAULT_COLLECTION_NAME await self.key_value.put(collection=collection, key=key, value=value, ttl=ttl) @@ -172,7 +172,7 @@ async def get_many(self, keys: list[str], *, collection: str | None = None) -> l async def put_many( self, keys: list[str], - values: Sequence[dict[str, Any]], + values: Sequence[Mapping[str, Any]], *, collection: str | None = None, ttl: Sequence[SupportsFloat | None] | None = None, diff --git a/key-value/key-value-aio/src/key_value/aio/wrappers/timeout/wrapper.py b/key-value/key-value-aio/src/key_value/aio/wrappers/timeout/wrapper.py index d243df4e..c48fa346 100644 --- a/key-value/key-value-aio/src/key_value/aio/wrappers/timeout/wrapper.py +++ b/key-value/key-value-aio/src/key_value/aio/wrappers/timeout/wrapper.py @@ -1,5 +1,5 @@ import asyncio -from collections.abc import Sequence +from collections.abc import Mapping, Sequence from typing import Any, SupportsFloat from typing_extensions import override @@ -49,14 +49,14 @@ async def ttl_many(self, keys: list[str], *, collection: str | None = None) -> l return await asyncio.wait_for(self.key_value.ttl_many(keys=keys, collection=collection), timeout=self.timeout) @override - async def put(self, key: str, value: dict[str, Any], *, collection: str | None = None, ttl: SupportsFloat | None = None) -> None: + async def put(self, key: str, value: Mapping[str, Any], *, collection: str | None = None, ttl: SupportsFloat | None = None) -> None: return await asyncio.wait_for(self.key_value.put(key=key, value=value, collection=collection, ttl=ttl), timeout=self.timeout) @override async def put_many( self, keys: list[str], - values: Sequence[dict[str, Any]], + values: Sequence[Mapping[str, Any]], *, collection: str | None = None, ttl: Sequence[SupportsFloat | None] | None = None, diff --git a/key-value/key-value-aio/src/key_value/aio/wrappers/ttl_clamp/wrapper.py b/key-value/key-value-aio/src/key_value/aio/wrappers/ttl_clamp/wrapper.py index 3f180216..70a0a14a 100644 --- a/key-value/key-value-aio/src/key_value/aio/wrappers/ttl_clamp/wrapper.py +++ b/key-value/key-value-aio/src/key_value/aio/wrappers/ttl_clamp/wrapper.py @@ -1,4 +1,4 @@ -from collections.abc import Sequence +from collections.abc import Mapping, Sequence from typing import Any, SupportsFloat, overload from key_value.shared.utils.time_to_live import prepare_ttl @@ -44,14 +44,14 @@ def _ttl_clamp(self, ttl: SupportsFloat | None) -> float | None: return max(self.min_ttl, min(ttl, self.max_ttl)) @override - async def put(self, key: str, value: dict[str, Any], *, collection: str | None = None, ttl: SupportsFloat | None = None) -> None: + async def put(self, key: str, value: Mapping[str, Any], *, collection: str | None = None, ttl: SupportsFloat | None = None) -> None: await self.key_value.put(collection=collection, key=key, value=value, ttl=self._ttl_clamp(ttl=ttl)) @override async def put_many( self, keys: list[str], - values: Sequence[dict[str, Any]], + values: Sequence[Mapping[str, Any]], *, collection: str | None = None, ttl: Sequence[SupportsFloat | None] | None = None, diff --git a/key-value/key-value-aio/tests/stores/wrappers/test_fallback.py b/key-value/key-value-aio/tests/stores/wrappers/test_fallback.py index 484ec9ea..199cca3d 100644 --- a/key-value/key-value-aio/tests/stores/wrappers/test_fallback.py +++ b/key-value/key-value-aio/tests/stores/wrappers/test_fallback.py @@ -1,3 +1,4 @@ +from collections.abc import Mapping from typing import Any, SupportsFloat import pytest @@ -15,7 +16,7 @@ async def get(self, key: str, *, collection: str | None = None) -> dict[str, Any msg = "Primary store unavailable" raise ConnectionError(msg) - async def put(self, key: str, value: dict[str, Any], *, collection: str | None = None, ttl: SupportsFloat | None = None): # noqa: ARG002 + async def put(self, key: str, value: Mapping[str, Any], *, collection: str | None = None, ttl: SupportsFloat | None = None): # noqa: ARG002 msg = "Primary store unavailable" raise ConnectionError(msg) diff --git a/key-value/key-value-shared/src/key_value/shared/utils/managed_entry.py b/key-value/key-value-shared/src/key_value/shared/utils/managed_entry.py index 594d697f..29c8508d 100644 --- a/key-value/key-value-shared/src/key_value/shared/utils/managed_entry.py +++ b/key-value/key-value-shared/src/key_value/shared/utils/managed_entry.py @@ -1,4 +1,5 @@ import json +from collections.abc import Mapping from dataclasses import dataclass, field from datetime import datetime from typing import Any, SupportsFloat, cast @@ -18,7 +19,7 @@ class ManagedEntry: - If `expires_at` is provided but `ttl` is not, a live TTL will be computed on access. """ - value: dict[str, Any] + value: Mapping[str, Any] created_at: datetime | None = field(default=None) ttl: float | None = field(default=None) @@ -53,7 +54,7 @@ def to_json(self, include_metadata: bool = True, include_expiration: bool = True if include_expiration and self.expires_at: data["expires_at"] = self.expires_at.isoformat() else: - data = self.value + data = dict(self.value) return dump_to_json(obj=data) diff --git a/key-value/key-value-sync/src/key_value/sync/code_gen/adapters/raise_on_missing/adapter.py b/key-value/key-value-sync/src/key_value/sync/code_gen/adapters/raise_on_missing/adapter.py index a0f117df..90379906 100644 --- a/key-value/key-value-sync/src/key_value/sync/code_gen/adapters/raise_on_missing/adapter.py +++ b/key-value/key-value-sync/src/key_value/sync/code_gen/adapters/raise_on_missing/adapter.py @@ -1,7 +1,7 @@ # WARNING: this file is auto-generated by 'build_sync_library.py' # from the original file 'adapter.py' # DO NOT CHANGE! Change the original file instead. -from collections.abc import Sequence +from collections.abc import Mapping, Sequence from typing import Any, Literal, SupportsFloat, overload from key_value.shared.errors import MissingKeyError @@ -129,7 +129,7 @@ def ttl_many( return results - def put(self, key: str, value: dict[str, Any], *, collection: str | None = None, ttl: SupportsFloat | None = None) -> None: + def put(self, key: str, value: Mapping[str, Any], *, collection: str | None = None, ttl: SupportsFloat | None = None) -> None: """Store a key-value pair in the specified collection with optional TTL. Args: @@ -144,7 +144,7 @@ def put(self, key: str, value: dict[str, Any], *, collection: str | None = None, def put_many( self, keys: list[str], - values: Sequence[dict[str, Any]], + values: Sequence[Mapping[str, Any]], *, collection: str | None = None, ttl: Sequence[SupportsFloat | None] | None = None, diff --git a/key-value/key-value-sync/src/key_value/sync/code_gen/protocols/key_value.py b/key-value/key-value-sync/src/key_value/sync/code_gen/protocols/key_value.py index b1c570e4..e8e628f7 100644 --- a/key-value/key-value-sync/src/key_value/sync/code_gen/protocols/key_value.py +++ b/key-value/key-value-sync/src/key_value/sync/code_gen/protocols/key_value.py @@ -1,7 +1,7 @@ # WARNING: this file is auto-generated by 'build_sync_library.py' # from the original file 'key_value.py' # DO NOT CHANGE! Change the original file instead. -from collections.abc import Sequence +from collections.abc import Mapping, Sequence from typing import Any, Protocol, SupportsFloat, runtime_checkable @@ -34,7 +34,7 @@ def ttl(self, key: str, *, collection: str | None = None) -> tuple[dict[str, Any """ ... - def put(self, key: str, value: dict[str, Any], *, collection: str | None = None, ttl: SupportsFloat | None = None) -> None: + def put(self, key: str, value: Mapping[str, Any], *, collection: str | None = None, ttl: SupportsFloat | None = None) -> None: """Store a key-value pair in the specified collection with optional TTL. Args: @@ -83,7 +83,7 @@ def ttl_many(self, keys: list[str], *, collection: str | None = None) -> list[tu def put_many( self, keys: list[str], - values: Sequence[dict[str, Any]], + values: Sequence[Mapping[str, Any]], *, collection: str | None = None, ttl: Sequence[SupportsFloat | None] | None = None, diff --git a/key-value/key-value-sync/src/key_value/sync/code_gen/stores/base.py b/key-value/key-value-sync/src/key_value/sync/code_gen/stores/base.py index 62a25a4c..186917c0 100644 --- a/key-value/key-value-sync/src/key_value/sync/code_gen/stores/base.py +++ b/key-value/key-value-sync/src/key_value/sync/code_gen/stores/base.py @@ -7,7 +7,7 @@ from abc import ABC, abstractmethod from collections import defaultdict -from collections.abc import Sequence +from collections.abc import Mapping, Sequence from threading import Lock from types import TracebackType from typing import Any, SupportsFloat @@ -132,7 +132,7 @@ def get(self, key: str, *, collection: str | None = None) -> dict[str, Any] | No if managed_entry.is_expired: return None - return managed_entry.value + return dict(managed_entry.value) @override def get_many(self, keys: list[str], *, collection: str | None = None) -> list[dict[str, Any] | None]: @@ -140,7 +140,7 @@ def get_many(self, keys: list[str], *, collection: str | None = None) -> list[di self.setup_collection(collection=collection) entries = self._get_managed_entries(keys=keys, collection=collection) - return [entry.value if entry and (not entry.is_expired) else None for entry in entries] + return [dict(entry.value) if entry and (not entry.is_expired) else None for entry in entries] @override def ttl(self, key: str, *, collection: str | None = None) -> tuple[dict[str, Any] | None, float | None]: @@ -152,7 +152,7 @@ def ttl(self, key: str, *, collection: str | None = None) -> tuple[dict[str, Any if not managed_entry or managed_entry.is_expired: return (None, None) - return (managed_entry.value, managed_entry.ttl) + return (dict(managed_entry.value), managed_entry.ttl) @override def ttl_many(self, keys: list[str], *, collection: str | None = None) -> list[tuple[dict[str, Any] | None, float | None]]: @@ -165,7 +165,7 @@ def ttl_many(self, keys: list[str], *, collection: str | None = None) -> list[tu self.setup_collection(collection=collection) entries = self._get_managed_entries(keys=keys, collection=collection) - return [(entry.value, entry.ttl) if entry and (not entry.is_expired) else (None, None) for entry in entries] + return [(dict(entry.value), entry.ttl) if entry and (not entry.is_expired) else (None, None) for entry in entries] @abstractmethod def _put_managed_entry(self, *, collection: str, key: str, managed_entry: ManagedEntry) -> None: @@ -179,7 +179,7 @@ def _put_managed_entries(self, *, collection: str, keys: list[str], managed_entr self._put_managed_entry(collection=collection, key=key, managed_entry=managed_entry) @override - def put(self, key: str, value: dict[str, Any], *, collection: str | None = None, ttl: SupportsFloat | None = None) -> None: + def put(self, key: str, value: Mapping[str, Any], *, collection: str | None = None, ttl: SupportsFloat | None = None) -> None: """Store a key-value pair in the specified collection with optional TTL.""" collection = collection or self.default_collection self.setup_collection(collection=collection) @@ -189,8 +189,8 @@ def put(self, key: str, value: dict[str, Any], *, collection: str | None = None, self._put_managed_entry(collection=collection, key=key, managed_entry=managed_entry) def _prepare_put_many( - self, *, keys: list[str], values: Sequence[dict[str, Any]], ttl: Sequence[SupportsFloat | None] | SupportsFloat | None - ) -> tuple[list[str], Sequence[dict[str, Any]], list[float | None]]: + self, *, keys: list[str], values: Sequence[Mapping[str, Any]], ttl: Sequence[SupportsFloat | None] | SupportsFloat | None + ) -> tuple[list[str], Sequence[Mapping[str, Any]], list[float | None]]: """Prepare multiple managed entries for a put_many operation. Inheriting classes can use this method if they need to modify a put_many operation.""" @@ -211,7 +211,7 @@ def _prepare_put_many( def put_many( self, keys: list[str], - values: Sequence[dict[str, Any]], + values: Sequence[Mapping[str, Any]], *, collection: str | None = None, ttl: Sequence[SupportsFloat | None] | None = None, diff --git a/key-value/key-value-sync/src/key_value/sync/code_gen/wrappers/base.py b/key-value/key-value-sync/src/key_value/sync/code_gen/wrappers/base.py index b4aaf07a..30d3907d 100644 --- a/key-value/key-value-sync/src/key_value/sync/code_gen/wrappers/base.py +++ b/key-value/key-value-sync/src/key_value/sync/code_gen/wrappers/base.py @@ -1,7 +1,7 @@ # WARNING: this file is auto-generated by 'build_sync_library.py' # from the original file 'base.py' # DO NOT CHANGE! Change the original file instead. -from collections.abc import Sequence +from collections.abc import Mapping, Sequence from typing import Any, SupportsFloat from typing_extensions import override @@ -31,14 +31,14 @@ def ttl_many(self, keys: list[str], *, collection: str | None = None) -> list[tu return self.key_value.ttl_many(collection=collection, keys=keys) @override - def put(self, key: str, value: dict[str, Any], *, collection: str | None = None, ttl: SupportsFloat | None = None) -> None: + def put(self, key: str, value: Mapping[str, Any], *, collection: str | None = None, ttl: SupportsFloat | None = None) -> None: return self.key_value.put(collection=collection, key=key, value=value, ttl=ttl) @override def put_many( self, keys: list[str], - values: Sequence[dict[str, Any]], + values: Sequence[Mapping[str, Any]], *, collection: str | None = None, ttl: Sequence[SupportsFloat | None] | None = None, diff --git a/key-value/key-value-sync/src/key_value/sync/code_gen/wrappers/compression/wrapper.py b/key-value/key-value-sync/src/key_value/sync/code_gen/wrappers/compression/wrapper.py index 9f545f69..79032293 100644 --- a/key-value/key-value-sync/src/key_value/sync/code_gen/wrappers/compression/wrapper.py +++ b/key-value/key-value-sync/src/key_value/sync/code_gen/wrappers/compression/wrapper.py @@ -4,7 +4,7 @@ import base64 import gzip import json -from collections.abc import Sequence +from collections.abc import Mapping, Sequence from typing import Any, SupportsFloat from key_value.shared.utils.managed_entry import ManagedEntry @@ -126,18 +126,18 @@ def ttl_many(self, keys: list[str], *, collection: str | None = None) -> list[tu return [(self._decompress_value(value), ttl) for (value, ttl) in results] @override - def put(self, key: str, value: dict[str, Any], *, collection: str | None = None, ttl: SupportsFloat | None = None) -> None: - compressed_value = self._compress_value(value) + def put(self, key: str, value: Mapping[str, Any], *, collection: str | None = None, ttl: SupportsFloat | None = None) -> None: + compressed_value = self._compress_value(dict(value)) return self.key_value.put(key=key, value=compressed_value, collection=collection, ttl=ttl) @override def put_many( self, keys: list[str], - values: Sequence[dict[str, Any]], + values: Sequence[Mapping[str, Any]], *, collection: str | None = None, ttl: Sequence[SupportsFloat | None] | None = None, ) -> None: - compressed_values = [self._compress_value(value) for value in values] + compressed_values = [self._compress_value(dict(value)) for value in values] return self.key_value.put_many(keys=keys, values=compressed_values, collection=collection, ttl=ttl) diff --git a/key-value/key-value-sync/src/key_value/sync/code_gen/wrappers/encryption/base.py b/key-value/key-value-sync/src/key_value/sync/code_gen/wrappers/encryption/base.py index b79d1bcc..6f8e6714 100644 --- a/key-value/key-value-sync/src/key_value/sync/code_gen/wrappers/encryption/base.py +++ b/key-value/key-value-sync/src/key_value/sync/code_gen/wrappers/encryption/base.py @@ -3,7 +3,7 @@ # DO NOT CHANGE! Change the original file instead. import base64 import json -from collections.abc import Callable, Sequence +from collections.abc import Callable, Mapping, Sequence from typing import Any, SupportsFloat from key_value.shared.errors.key_value import SerializationError @@ -157,18 +157,18 @@ def ttl_many(self, keys: list[str], *, collection: str | None = None) -> list[tu return [(self._decrypt_value(value), ttl) for (value, ttl) in results] @override - def put(self, key: str, value: dict[str, Any], *, collection: str | None = None, ttl: SupportsFloat | None = None) -> None: - encrypted_value = self._encrypt_value(value) + def put(self, key: str, value: Mapping[str, Any], *, collection: str | None = None, ttl: SupportsFloat | None = None) -> None: + encrypted_value = self._encrypt_value(dict(value)) return self.key_value.put(key=key, value=encrypted_value, collection=collection, ttl=ttl) @override def put_many( self, keys: list[str], - values: Sequence[dict[str, Any]], + values: Sequence[Mapping[str, Any]], *, collection: str | None = None, ttl: Sequence[SupportsFloat | None] | None = None, ) -> None: - encrypted_values = [self._encrypt_value(value) for value in values] + encrypted_values = [self._encrypt_value(dict(value)) for value in values] return self.key_value.put_many(keys=keys, values=encrypted_values, collection=collection, ttl=ttl) diff --git a/key-value/key-value-sync/src/key_value/sync/code_gen/wrappers/fallback/wrapper.py b/key-value/key-value-sync/src/key_value/sync/code_gen/wrappers/fallback/wrapper.py index a1b384c8..856cba67 100644 --- a/key-value/key-value-sync/src/key_value/sync/code_gen/wrappers/fallback/wrapper.py +++ b/key-value/key-value-sync/src/key_value/sync/code_gen/wrappers/fallback/wrapper.py @@ -1,7 +1,7 @@ # WARNING: this file is auto-generated by 'build_sync_library.py' # from the original file 'wrapper.py' # DO NOT CHANGE! Change the original file instead. -from collections.abc import Sequence +from collections.abc import Mapping, Sequence from typing import Any, SupportsFloat from typing_extensions import override @@ -74,7 +74,7 @@ def ttl_many(self, keys: list[str], *, collection: str | None = None) -> list[tu return self.fallback_key_value.ttl_many(keys=keys, collection=collection) @override - def put(self, key: str, value: dict[str, Any], *, collection: str | None = None, ttl: SupportsFloat | None = None) -> None: + def put(self, key: str, value: Mapping[str, Any], *, collection: str | None = None, ttl: SupportsFloat | None = None) -> None: if self.write_to_fallback: try: return self.primary_key_value.put(key=key, value=value, collection=collection, ttl=ttl) @@ -87,7 +87,7 @@ def put(self, key: str, value: dict[str, Any], *, collection: str | None = None, def put_many( self, keys: list[str], - values: Sequence[dict[str, Any]], + values: Sequence[Mapping[str, Any]], *, collection: str | None = None, ttl: Sequence[SupportsFloat | None] | None = None, diff --git a/key-value/key-value-sync/src/key_value/sync/code_gen/wrappers/limit_size/wrapper.py b/key-value/key-value-sync/src/key_value/sync/code_gen/wrappers/limit_size/wrapper.py index c000508b..dc712b46 100644 --- a/key-value/key-value-sync/src/key_value/sync/code_gen/wrappers/limit_size/wrapper.py +++ b/key-value/key-value-sync/src/key_value/sync/code_gen/wrappers/limit_size/wrapper.py @@ -1,7 +1,7 @@ # WARNING: this file is auto-generated by 'build_sync_library.py' # from the original file 'wrapper.py' # DO NOT CHANGE! Change the original file instead. -from collections.abc import Sequence +from collections.abc import Mapping, Sequence from typing import Any, SupportsFloat from key_value.shared.errors.wrappers.limit_size import EntryTooLargeError, EntryTooSmallError @@ -83,28 +83,28 @@ def _within_size_limit(self, value: dict[str, Any], *, collection: str | None = return True @override - def put(self, key: str, value: dict[str, Any], *, collection: str | None = None, ttl: SupportsFloat | None = None) -> None: - if self._within_size_limit(value=value, collection=collection, key=key): + def put(self, key: str, value: Mapping[str, Any], *, collection: str | None = None, ttl: SupportsFloat | None = None) -> None: + if self._within_size_limit(value=dict(value), collection=collection, key=key): self.key_value.put(collection=collection, key=key, value=value, ttl=ttl) @override def put_many( self, keys: list[str], - values: Sequence[dict[str, Any]], + values: Sequence[Mapping[str, Any]], *, collection: str | None = None, ttl: Sequence[SupportsFloat | None] | None = None, ) -> None: filtered_keys: list[str] = [] - filtered_values: list[dict[str, Any]] = [] + filtered_values: list[Mapping[str, Any]] = [] filtered_ttls: list[SupportsFloat | None] | None = None if isinstance(ttl, Sequence): filtered_ttls = [] for i, (k, v) in enumerate(zip(keys, values, strict=True)): - if self._within_size_limit(value=v, collection=collection, key=k): + if self._within_size_limit(value=dict(v), collection=collection, key=k): filtered_keys.append(k) filtered_values.append(v) if isinstance(ttl, Sequence): diff --git a/key-value/key-value-sync/src/key_value/sync/code_gen/wrappers/logging/wrapper.py b/key-value/key-value-sync/src/key_value/sync/code_gen/wrappers/logging/wrapper.py index 93c57615..fd8ac18e 100644 --- a/key-value/key-value-sync/src/key_value/sync/code_gen/wrappers/logging/wrapper.py +++ b/key-value/key-value-sync/src/key_value/sync/code_gen/wrappers/logging/wrapper.py @@ -3,7 +3,7 @@ # DO NOT CHANGE! Change the original file instead. import json import logging -from collections.abc import Sequence +from collections.abc import Mapping, Sequence from typing import Any, Literal, SupportsFloat from typing_extensions import override @@ -62,7 +62,7 @@ def _format_message( action: str, keys: list[str] | str, collection: str | None, - values: dict[str, Any] | Sequence[dict[str, Any]] | None = None, + values: Mapping[str, Any] | Sequence[Mapping[str, Any]] | None = None, extra: dict[str, Any] | None = None, ) -> str: if self.structured_logs: @@ -90,7 +90,7 @@ def _log( action: str, keys: list[str] | str, collection: str | None, - values: dict[str, Any] | Sequence[dict[str, Any]] | None = None, + values: Mapping[str, Any] | Sequence[Mapping[str, Any]] | None = None, extra: dict[str, Any] | None = None, ) -> None: self.logger.log( @@ -144,7 +144,7 @@ def ttl_many(self, keys: list[str], *, collection: str | None = None) -> list[tu return results @override - def put(self, key: str, value: dict[str, Any], *, collection: str | None = None, ttl: SupportsFloat | None = None) -> None: + def put(self, key: str, value: Mapping[str, Any], *, collection: str | None = None, ttl: SupportsFloat | None = None) -> None: self._log(state="start", action="PUT", keys=key, collection=collection, values=value, extra={"ttl": ttl}) self.key_value.put(key=key, value=value, collection=collection, ttl=ttl) @@ -155,7 +155,7 @@ def put(self, key: str, value: dict[str, Any], *, collection: str | None = None, def put_many( self, keys: list[str], - values: Sequence[dict[str, Any]], + values: Sequence[Mapping[str, Any]], *, collection: str | None = None, ttl: Sequence[SupportsFloat | None] | None = None, diff --git a/key-value/key-value-sync/src/key_value/sync/code_gen/wrappers/passthrough_cache/wrapper.py b/key-value/key-value-sync/src/key_value/sync/code_gen/wrappers/passthrough_cache/wrapper.py index 64273f18..846024b7 100644 --- a/key-value/key-value-sync/src/key_value/sync/code_gen/wrappers/passthrough_cache/wrapper.py +++ b/key-value/key-value-sync/src/key_value/sync/code_gen/wrappers/passthrough_cache/wrapper.py @@ -1,7 +1,7 @@ # WARNING: this file is auto-generated by 'build_sync_library.py' # from the original file 'wrapper.py' # DO NOT CHANGE! Change the original file instead. -from collections.abc import Sequence +from collections.abc import Mapping, Sequence from typing import Any, SupportsFloat from typing_extensions import override @@ -147,7 +147,7 @@ def ttl_many(self, keys: list[str], *, collection: str | None = None) -> list[tu return [key_to_value[key] for key in keys] @override - def put(self, key: str, value: dict[str, Any], *, collection: str | None = None, ttl: SupportsFloat | None = None) -> None: + def put(self, key: str, value: Mapping[str, Any], *, collection: str | None = None, ttl: SupportsFloat | None = None) -> None: _ = self.cache_key_value.delete(collection=collection, key=key) self.primary_key_value.put(collection=collection, key=key, value=value, ttl=ttl) @@ -156,7 +156,7 @@ def put(self, key: str, value: dict[str, Any], *, collection: str | None = None, def put_many( self, keys: list[str], - values: Sequence[dict[str, Any]], + values: Sequence[Mapping[str, Any]], *, collection: str | None = None, ttl: Sequence[SupportsFloat | None] | None = None, diff --git a/key-value/key-value-sync/src/key_value/sync/code_gen/wrappers/prefix_collections/wrapper.py b/key-value/key-value-sync/src/key_value/sync/code_gen/wrappers/prefix_collections/wrapper.py index 10dcf215..4335ea45 100644 --- a/key-value/key-value-sync/src/key_value/sync/code_gen/wrappers/prefix_collections/wrapper.py +++ b/key-value/key-value-sync/src/key_value/sync/code_gen/wrappers/prefix_collections/wrapper.py @@ -1,7 +1,7 @@ # WARNING: this file is auto-generated by 'build_sync_library.py' # from the original file 'wrapper.py' # DO NOT CHANGE! Change the original file instead. -from collections.abc import Sequence +from collections.abc import Mapping, Sequence from typing import Any, SupportsFloat from key_value.shared.utils.compound import prefix_collection, unprefix_collection @@ -55,7 +55,7 @@ def ttl_many(self, keys: list[str], *, collection: str | None = None) -> list[tu return self.key_value.ttl_many(keys=keys, collection=new_collection) @override - def put(self, key: str, value: dict[str, Any], *, collection: str | None = None, ttl: SupportsFloat | None = None) -> None: + def put(self, key: str, value: Mapping[str, Any], *, collection: str | None = None, ttl: SupportsFloat | None = None) -> None: new_collection: str = self._prefix_collection(collection=collection) return self.key_value.put(key=key, value=value, collection=new_collection, ttl=ttl) @@ -63,7 +63,7 @@ def put(self, key: str, value: dict[str, Any], *, collection: str | None = None, def put_many( self, keys: list[str], - values: Sequence[dict[str, Any]], + values: Sequence[Mapping[str, Any]], *, collection: str | None = None, ttl: Sequence[SupportsFloat | None] | None = None, diff --git a/key-value/key-value-sync/src/key_value/sync/code_gen/wrappers/prefix_keys/wrapper.py b/key-value/key-value-sync/src/key_value/sync/code_gen/wrappers/prefix_keys/wrapper.py index 8e01f9df..c79265f9 100644 --- a/key-value/key-value-sync/src/key_value/sync/code_gen/wrappers/prefix_keys/wrapper.py +++ b/key-value/key-value-sync/src/key_value/sync/code_gen/wrappers/prefix_keys/wrapper.py @@ -1,7 +1,7 @@ # WARNING: this file is auto-generated by 'build_sync_library.py' # from the original file 'wrapper.py' # DO NOT CHANGE! Change the original file instead. -from collections.abc import Sequence +from collections.abc import Mapping, Sequence from typing import Any, SupportsFloat from key_value.shared.utils.compound import prefix_key, unprefix_key @@ -52,7 +52,7 @@ def ttl_many(self, keys: list[str], *, collection: str | None = None) -> list[tu return self.key_value.ttl_many(keys=new_keys, collection=collection) @override - def put(self, key: str, value: dict[str, Any], *, collection: str | None = None, ttl: SupportsFloat | None = None) -> None: + def put(self, key: str, value: Mapping[str, Any], *, collection: str | None = None, ttl: SupportsFloat | None = None) -> None: new_key: str = self._prefix_key(key=key) return self.key_value.put(key=new_key, value=value, collection=collection, ttl=ttl) @@ -60,7 +60,7 @@ def put(self, key: str, value: dict[str, Any], *, collection: str | None = None, def put_many( self, keys: list[str], - values: Sequence[dict[str, Any]], + values: Sequence[Mapping[str, Any]], *, collection: str | None = None, ttl: Sequence[SupportsFloat | None] | None = None, diff --git a/key-value/key-value-sync/src/key_value/sync/code_gen/wrappers/read_only/wrapper.py b/key-value/key-value-sync/src/key_value/sync/code_gen/wrappers/read_only/wrapper.py index 2bec554c..dd613973 100644 --- a/key-value/key-value-sync/src/key_value/sync/code_gen/wrappers/read_only/wrapper.py +++ b/key-value/key-value-sync/src/key_value/sync/code_gen/wrappers/read_only/wrapper.py @@ -1,7 +1,7 @@ # WARNING: this file is auto-generated by 'build_sync_library.py' # from the original file 'wrapper.py' # DO NOT CHANGE! Change the original file instead. -from collections.abc import Sequence +from collections.abc import Mapping, Sequence from typing import Any, SupportsFloat from key_value.shared.errors.wrappers.read_only import ReadOnlyError @@ -53,7 +53,7 @@ def ttl_many(self, keys: list[str], *, collection: str | None = None) -> list[tu return self.key_value.ttl_many(keys=keys, collection=collection) @override - def put(self, key: str, value: dict[str, Any], *, collection: str | None = None, ttl: SupportsFloat | None = None) -> None: + def put(self, key: str, value: Mapping[str, Any], *, collection: str | None = None, ttl: SupportsFloat | None = None) -> None: if self.raise_on_write: raise ReadOnlyError(operation="put", collection=collection, key=key) @@ -61,7 +61,7 @@ def put(self, key: str, value: dict[str, Any], *, collection: str | None = None, def put_many( self, keys: list[str], - values: Sequence[dict[str, Any]], + values: Sequence[Mapping[str, Any]], *, collection: str | None = None, ttl: Sequence[SupportsFloat | None] | None = None, diff --git a/key-value/key-value-sync/src/key_value/sync/code_gen/wrappers/retry/wrapper.py b/key-value/key-value-sync/src/key_value/sync/code_gen/wrappers/retry/wrapper.py index 887742ad..e0c82b0e 100644 --- a/key-value/key-value-sync/src/key_value/sync/code_gen/wrappers/retry/wrapper.py +++ b/key-value/key-value-sync/src/key_value/sync/code_gen/wrappers/retry/wrapper.py @@ -1,7 +1,7 @@ # WARNING: this file is auto-generated by 'build_sync_library.py' # from the original file 'wrapper.py' # DO NOT CHANGE! Change the original file instead. -from collections.abc import Sequence +from collections.abc import Mapping, Sequence from typing import Any, SupportsFloat, TypeVar from key_value.shared.code_gen.run import retry_operation @@ -107,7 +107,7 @@ def ttl_many(self, keys: list[str], *, collection: str | None = None) -> list[tu ) @override - def put(self, key: str, value: dict[str, Any], *, collection: str | None = None, ttl: SupportsFloat | None = None) -> None: + def put(self, key: str, value: Mapping[str, Any], *, collection: str | None = None, ttl: SupportsFloat | None = None) -> None: return retry_operation( max_retries=self.max_retries, retry_on=self.retry_on, @@ -125,7 +125,7 @@ def put(self, key: str, value: dict[str, Any], *, collection: str | None = None, def put_many( self, keys: list[str], - values: Sequence[dict[str, Any]], + values: Sequence[Mapping[str, Any]], *, collection: str | None = None, ttl: Sequence[SupportsFloat | None] | None = None, diff --git a/key-value/key-value-sync/src/key_value/sync/code_gen/wrappers/single_collection/wrapper.py b/key-value/key-value-sync/src/key_value/sync/code_gen/wrappers/single_collection/wrapper.py index f6a59e4c..a8f1cc80 100644 --- a/key-value/key-value-sync/src/key_value/sync/code_gen/wrappers/single_collection/wrapper.py +++ b/key-value/key-value-sync/src/key_value/sync/code_gen/wrappers/single_collection/wrapper.py @@ -1,7 +1,7 @@ # WARNING: this file is auto-generated by 'build_sync_library.py' # from the original file 'wrapper.py' # DO NOT CHANGE! Change the original file instead. -from collections.abc import Sequence +from collections.abc import Mapping, Sequence from typing import Any, SupportsFloat from key_value.shared.utils.compound import DEFAULT_PREFIX_SEPARATOR, prefix_key, unprefix_key @@ -60,7 +60,7 @@ def ttl_many(self, keys: list[str], *, collection: str | None = None) -> list[tu return self.key_value.ttl_many(keys=new_keys, collection=self.single_collection) @override - def put(self, key: str, value: dict[str, Any], *, collection: str | None = None, ttl: SupportsFloat | None = None) -> None: + def put(self, key: str, value: Mapping[str, Any], *, collection: str | None = None, ttl: SupportsFloat | None = None) -> None: new_key: str = self._prefix_key(key=key, collection=collection) return self.key_value.put(key=new_key, value=value, collection=self.single_collection, ttl=ttl) @@ -68,7 +68,7 @@ def put(self, key: str, value: dict[str, Any], *, collection: str | None = None, def put_many( self, keys: list[str], - values: Sequence[dict[str, Any]], + values: Sequence[Mapping[str, Any]], *, collection: str | None = None, ttl: Sequence[SupportsFloat | None] | None = None, diff --git a/key-value/key-value-sync/src/key_value/sync/code_gen/wrappers/statistics/wrapper.py b/key-value/key-value-sync/src/key_value/sync/code_gen/wrappers/statistics/wrapper.py index 044cb197..1b320902 100644 --- a/key-value/key-value-sync/src/key_value/sync/code_gen/wrappers/statistics/wrapper.py +++ b/key-value/key-value-sync/src/key_value/sync/code_gen/wrappers/statistics/wrapper.py @@ -1,7 +1,7 @@ # WARNING: this file is auto-generated by 'build_sync_library.py' # from the original file 'wrapper.py' # DO NOT CHANGE! Change the original file instead. -from collections.abc import Sequence +from collections.abc import Mapping, Sequence from dataclasses import dataclass, field from typing import Any, SupportsFloat @@ -138,7 +138,7 @@ def ttl(self, key: str, *, collection: str | None = None) -> tuple[dict[str, Any return (None, None) @override - def put(self, key: str, value: dict[str, Any], *, collection: str | None = None, ttl: SupportsFloat | None = None) -> None: + def put(self, key: str, value: Mapping[str, Any], *, collection: str | None = None, ttl: SupportsFloat | None = None) -> None: collection = collection or DEFAULT_COLLECTION_NAME self.key_value.put(collection=collection, key=key, value=value, ttl=ttl) @@ -175,7 +175,7 @@ def get_many(self, keys: list[str], *, collection: str | None = None) -> list[di def put_many( self, keys: list[str], - values: Sequence[dict[str, Any]], + values: Sequence[Mapping[str, Any]], *, collection: str | None = None, ttl: Sequence[SupportsFloat | None] | None = None, diff --git a/key-value/key-value-sync/src/key_value/sync/code_gen/wrappers/ttl_clamp/wrapper.py b/key-value/key-value-sync/src/key_value/sync/code_gen/wrappers/ttl_clamp/wrapper.py index 4a8a3144..926efc8b 100644 --- a/key-value/key-value-sync/src/key_value/sync/code_gen/wrappers/ttl_clamp/wrapper.py +++ b/key-value/key-value-sync/src/key_value/sync/code_gen/wrappers/ttl_clamp/wrapper.py @@ -1,7 +1,7 @@ # WARNING: this file is auto-generated by 'build_sync_library.py' # from the original file 'wrapper.py' # DO NOT CHANGE! Change the original file instead. -from collections.abc import Sequence +from collections.abc import Mapping, Sequence from typing import Any, SupportsFloat, overload from key_value.shared.utils.time_to_live import prepare_ttl @@ -47,14 +47,14 @@ def _ttl_clamp(self, ttl: SupportsFloat | None) -> float | None: return max(self.min_ttl, min(ttl, self.max_ttl)) @override - def put(self, key: str, value: dict[str, Any], *, collection: str | None = None, ttl: SupportsFloat | None = None) -> None: + def put(self, key: str, value: Mapping[str, Any], *, collection: str | None = None, ttl: SupportsFloat | None = None) -> None: self.key_value.put(collection=collection, key=key, value=value, ttl=self._ttl_clamp(ttl=ttl)) @override def put_many( self, keys: list[str], - values: Sequence[dict[str, Any]], + values: Sequence[Mapping[str, Any]], *, collection: str | None = None, ttl: Sequence[SupportsFloat | None] | None = None, diff --git a/key-value/key-value-sync/tests/code_gen/stores/wrappers/test_fallback.py b/key-value/key-value-sync/tests/code_gen/stores/wrappers/test_fallback.py index 3fc84fac..a99c6ca6 100644 --- a/key-value/key-value-sync/tests/code_gen/stores/wrappers/test_fallback.py +++ b/key-value/key-value-sync/tests/code_gen/stores/wrappers/test_fallback.py @@ -1,6 +1,7 @@ # WARNING: this file is auto-generated by 'build_sync_library.py' # from the original file 'test_fallback.py' # DO NOT CHANGE! Change the original file instead. +from collections.abc import Mapping from typing import Any, SupportsFloat import pytest @@ -18,7 +19,7 @@ def get(self, key: str, *, collection: str | None = None) -> dict[str, Any] | No msg = "Primary store unavailable" raise ConnectionError(msg) - def put(self, key: str, value: dict[str, Any], *, collection: str | None = None, ttl: SupportsFloat | None = None): # noqa: ARG002 + def put(self, key: str, value: Mapping[str, Any], *, collection: str | None = None, ttl: SupportsFloat | None = None): # noqa: ARG002 msg = "Primary store unavailable" raise ConnectionError(msg)