|
| 1 | +from collections.abc import Mapping |
| 2 | +from datetime import timedelta |
| 3 | +from typing import Any, Callable, Iterable, Protocol, SupportsInt, overload, type_check_only |
| 4 | + |
| 5 | +from _typeshed import ReadableBuffer |
| 6 | +from django.core.cache.backends.base import BaseCache |
| 7 | +from redis._parsers import BaseParser |
| 8 | +from redis.client import Redis |
| 9 | +from redis.connection import ConnectionPool |
| 10 | +from typing_extensions import TypeAlias |
| 11 | + |
| 12 | +@type_check_only |
| 13 | +class _RedisCacheClientSerializer(Protocol): |
| 14 | + def dumps(self, obj: Any) -> bytes: ... |
| 15 | + @overload |
| 16 | + def loads(self, data: SupportsInt) -> int: ... |
| 17 | + @overload |
| 18 | + def loads(self, data: ReadableBuffer) -> Any: ... |
| 19 | + |
| 20 | +class RedisSerializer: |
| 21 | + def __init__(self, protocol: int | None = None) -> None: ... |
| 22 | + def dumps(self, obj: Any) -> bytes: ... |
| 23 | + @overload |
| 24 | + def loads(self, data: SupportsInt) -> int: ... |
| 25 | + @overload |
| 26 | + def loads(self, data: ReadableBuffer) -> Any: ... |
| 27 | + |
| 28 | +# Taken from https://github.com/redis/redis-py/blob/6b8978/redis/typing.py |
| 29 | +_Key: TypeAlias = str | bytes | memoryview |
| 30 | +_Expiry: TypeAlias = int | timedelta |
| 31 | + |
| 32 | +class RedisCacheClient: |
| 33 | + def __init__( |
| 34 | + self, |
| 35 | + servers: list[str], |
| 36 | + serializer: str | Callable[[], _RedisCacheClientSerializer] | _RedisCacheClientSerializer | None = None, |
| 37 | + pool_class: str | type[ConnectionPool] | None = None, |
| 38 | + parser_class: str | type[BaseParser] | None = None, |
| 39 | + **options: Any, |
| 40 | + ) -> None: ... |
| 41 | + def get_client(self, key: _Key | None = None, *, write: bool = False) -> Redis: ... |
| 42 | + def add(self, key: _Key, value: Any, timeout: _Expiry | None) -> bool: ... |
| 43 | + def get(self, key: _Key, default: Any) -> Any: ... |
| 44 | + def set(self, key: _Key, value: Any, timeout: _Expiry | None) -> None: ... |
| 45 | + def touch(self, key: _Key, timeout: _Expiry) -> bool: ... |
| 46 | + def delete(self, key: _Key) -> bool: ... |
| 47 | + def get_many(self, keys: Iterable[_Key]) -> dict[_Key, Any]: ... |
| 48 | + def has_key(self, key: _Key) -> bool: ... |
| 49 | + def incr(self, key: _Key, delta: int) -> Any: ... |
| 50 | + def set_many(self, data: Mapping[_Key, Any], timeout: _Expiry) -> None: ... |
| 51 | + def delete_many(self, keys: Iterable[_Key]) -> None: ... |
| 52 | + def clear(self) -> bool: ... |
| 53 | + |
| 54 | +class RedisCache(BaseCache): |
| 55 | + def __init__(self, server: str | list[str], params: dict[str, Any]) -> None: ... |
0 commit comments