From 4a639a542e64a4576a5923cefc693d9a9eed71e9 Mon Sep 17 00:00:00 2001 From: amirreza Date: Tue, 7 Jan 2025 04:13:07 +0330 Subject: [PATCH] adjust the clients to be compatible with default clients. --- django_valkey/async_cache/client/herd.py | 11 ++++++----- django_valkey/client/herd.py | 18 +++++++++++++++--- django_valkey/client/sharded.py | 3 ++- 3 files changed, 23 insertions(+), 9 deletions(-) diff --git a/django_valkey/async_cache/client/herd.py b/django_valkey/async_cache/client/herd.py index 79cc41a..c8e721b 100644 --- a/django_valkey/async_cache/client/herd.py +++ b/django_valkey/async_cache/client/herd.py @@ -3,12 +3,13 @@ from typing import Tuple, Any from django.conf import settings +from django.core.cache.backends.base import DEFAULT_TIMEOUT + from valkey import Valkey from valkey.exceptions import ConnectionError, ResponseError, TimeoutError from valkey.typing import EncodableT from django_valkey.async_cache.client import AsyncDefaultClient -from django_valkey.base_client import DEFAULT_TIMEOUT from django_valkey.client.herd import Marker, _is_expired from django_valkey.exceptions import ConnectionInterrupted from django_valkey.typing import KeyT @@ -102,7 +103,7 @@ async def aget_many(self, keys, version=None, client=None): recovered_data = {} - new_keys = [await self.make_key(key, version=version) for key in keys] + new_keys = [self.make_key(key, version=version) for key in keys] map_keys = dict(zip(new_keys, keys)) try: @@ -117,7 +118,7 @@ async def aget_many(self, keys, version=None, client=None): if value is None: continue - val, refresh = await self._unpack(await self.decode(value)) + val, refresh = await self._unpack(self.decode(value)) recovered_data[map_keys[key]] = None if refresh else val return recovered_data @@ -132,7 +133,7 @@ async def amget(self, keys, version=None, client=None): recovered_data = {} - new_keys = [await self.make_key(key, version=version) for key in keys] + new_keys = [self.make_key(key, version=version) for key in keys] map_keys = dict(zip(new_keys, keys)) try: @@ -144,7 +145,7 @@ async def amget(self, keys, version=None, client=None): if value is None: continue - val, refresh = await self._unpack(await self.decode(value)) + val, refresh = await self._unpack(self.decode(value)) recovered_data[map_keys[key]] = None if refresh else val return recovered_data diff --git a/django_valkey/client/herd.py b/django_valkey/client/herd.py index 22b5ebb..c393bed 100644 --- a/django_valkey/client/herd.py +++ b/django_valkey/client/herd.py @@ -4,11 +4,12 @@ from typing import Tuple, Any, Iterable from django.conf import settings +from django.core.cache.backends.base import DEFAULT_TIMEOUT + from valkey import Valkey from valkey.exceptions import ConnectionError, ResponseError, TimeoutError from valkey.typing import EncodableT -from django_valkey.base_client import DEFAULT_TIMEOUT, Backend from django_valkey.client.default import DefaultClient from django_valkey.exceptions import ConnectionInterrupted from django_valkey.typing import KeyT @@ -139,8 +140,9 @@ def mget( self, keys: Iterable[KeyT], version: int | None = None, - client: Backend | Any | None = None, - ) -> dict: + client: Valkey | Any | None = None, + return_list: bool = False, + ) -> dict | list: client = self._get_client(write=False, client=client) if not keys: return {} @@ -154,6 +156,16 @@ def mget( except _main_exceptions as e: raise ConnectionInterrupted(connection=client) from e + if return_list: + value_list = [] + for r in results: + val, refresh = self._unpack(self.decode(r)) + if refresh: + value_list.append(None) + else: + value_list.append(val) + return value_list + for key, value in zip(keys, results): if value is None: continue diff --git a/django_valkey/client/sharded.py b/django_valkey/client/sharded.py index 573cef2..7e87cb0 100644 --- a/django_valkey/client/sharded.py +++ b/django_valkey/client/sharded.py @@ -4,11 +4,12 @@ from datetime import datetime, timedelta from typing import Any +from django.core.cache.backends.base import DEFAULT_TIMEOUT + from valkey import Valkey from valkey.exceptions import ConnectionError from valkey.typing import EncodableT -from django_valkey.base_client import DEFAULT_TIMEOUT from django_valkey.client.default import DefaultClient from django_valkey.exceptions import ConnectionInterrupted from django_valkey.hash_ring import HashRing