redis 6.1.1__py3-none-any.whl → 6.3.0__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.
- redis/__init__.py +4 -3
- redis/_parsers/__init__.py +8 -1
- redis/_parsers/base.py +53 -1
- redis/_parsers/helpers.py +2 -1
- redis/_parsers/hiredis.py +72 -5
- redis/_parsers/resp3.py +10 -35
- redis/asyncio/client.py +1 -2
- redis/asyncio/cluster.py +738 -60
- redis/asyncio/connection.py +15 -11
- redis/asyncio/retry.py +14 -35
- redis/asyncio/sentinel.py +33 -18
- redis/backoff.py +1 -1
- redis/client.py +2 -3
- redis/cluster.py +13 -7
- redis/commands/core.py +74 -12
- redis/commands/search/field.py +4 -4
- redis/commands/sentinel.py +42 -12
- redis/connection.py +18 -9
- redis/exceptions.py +7 -1
- redis/retry.py +36 -18
- redis/sentinel.py +30 -15
- redis/typing.py +0 -4
- redis/utils.py +12 -5
- {redis-6.1.1.dist-info → redis-6.3.0.dist-info}/METADATA +8 -10
- {redis-6.1.1.dist-info → redis-6.3.0.dist-info}/RECORD +27 -27
- {redis-6.1.1.dist-info → redis-6.3.0.dist-info}/WHEEL +0 -0
- {redis-6.1.1.dist-info → redis-6.3.0.dist-info}/licenses/LICENSE +0 -0
redis/connection.py
CHANGED
|
@@ -31,6 +31,7 @@ from .exceptions import (
|
|
|
31
31
|
ChildDeadlockedError,
|
|
32
32
|
ConnectionError,
|
|
33
33
|
DataError,
|
|
34
|
+
MaxConnectionsError,
|
|
34
35
|
RedisError,
|
|
35
36
|
ResponseError,
|
|
36
37
|
TimeoutError,
|
|
@@ -378,13 +379,18 @@ class AbstractConnection(ConnectionInterface):
|
|
|
378
379
|
"Connects to the Redis server if not already connected"
|
|
379
380
|
self.connect_check_health(check_health=True)
|
|
380
381
|
|
|
381
|
-
def connect_check_health(
|
|
382
|
+
def connect_check_health(
|
|
383
|
+
self, check_health: bool = True, retry_socket_connect: bool = True
|
|
384
|
+
):
|
|
382
385
|
if self._sock:
|
|
383
386
|
return
|
|
384
387
|
try:
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
+
if retry_socket_connect:
|
|
389
|
+
sock = self.retry.call_with_retry(
|
|
390
|
+
lambda: self._connect(), lambda error: self.disconnect(error)
|
|
391
|
+
)
|
|
392
|
+
else:
|
|
393
|
+
sock = self._connect()
|
|
388
394
|
except socket.timeout:
|
|
389
395
|
raise TimeoutError("Timeout connecting to server")
|
|
390
396
|
except OSError as e:
|
|
@@ -636,7 +642,7 @@ class AbstractConnection(ConnectionInterface):
|
|
|
636
642
|
host_error = self._host_error()
|
|
637
643
|
|
|
638
644
|
try:
|
|
639
|
-
if self.protocol in ["3", 3]
|
|
645
|
+
if self.protocol in ["3", 3]:
|
|
640
646
|
response = self._parser.read_response(
|
|
641
647
|
disable_decoding=disable_decoding, push_request=push_request
|
|
642
648
|
)
|
|
@@ -1315,6 +1321,7 @@ class ConnectionPool:
|
|
|
1315
1321
|
By default, TCP connections are created unless ``connection_class``
|
|
1316
1322
|
is specified. Use class:`.UnixDomainSocketConnection` for
|
|
1317
1323
|
unix sockets.
|
|
1324
|
+
:py:class:`~redis.SSLConnection` can be used for SSL enabled connections.
|
|
1318
1325
|
|
|
1319
1326
|
Any additional keyword arguments are passed to the constructor of
|
|
1320
1327
|
``connection_class``.
|
|
@@ -1432,10 +1439,12 @@ class ConnectionPool:
|
|
|
1432
1439
|
|
|
1433
1440
|
self.reset()
|
|
1434
1441
|
|
|
1435
|
-
def __repr__(self) ->
|
|
1442
|
+
def __repr__(self) -> str:
|
|
1443
|
+
conn_kwargs = ",".join([f"{k}={v}" for k, v in self.connection_kwargs.items()])
|
|
1436
1444
|
return (
|
|
1437
|
-
f"<{
|
|
1438
|
-
f"({
|
|
1445
|
+
f"<{self.__class__.__module__}.{self.__class__.__name__}"
|
|
1446
|
+
f"(<{self.connection_class.__module__}.{self.connection_class.__name__}"
|
|
1447
|
+
f"({conn_kwargs})>)>"
|
|
1439
1448
|
)
|
|
1440
1449
|
|
|
1441
1450
|
def get_protocol(self):
|
|
@@ -1560,7 +1569,7 @@ class ConnectionPool:
|
|
|
1560
1569
|
def make_connection(self) -> "ConnectionInterface":
|
|
1561
1570
|
"Create a new connection"
|
|
1562
1571
|
if self._created_connections >= self.max_connections:
|
|
1563
|
-
raise
|
|
1572
|
+
raise MaxConnectionsError("Too many connections")
|
|
1564
1573
|
self._created_connections += 1
|
|
1565
1574
|
|
|
1566
1575
|
if self.cache is not None:
|
redis/exceptions.py
CHANGED
|
@@ -220,7 +220,13 @@ class SlotNotCoveredError(RedisClusterException):
|
|
|
220
220
|
pass
|
|
221
221
|
|
|
222
222
|
|
|
223
|
-
class MaxConnectionsError(ConnectionError):
|
|
223
|
+
class MaxConnectionsError(ConnectionError):
|
|
224
|
+
"""
|
|
225
|
+
Raised when a connection pool has reached its max_connections limit.
|
|
226
|
+
This indicates pool exhaustion rather than an actual connection failure.
|
|
227
|
+
"""
|
|
228
|
+
|
|
229
|
+
pass
|
|
224
230
|
|
|
225
231
|
|
|
226
232
|
class CrossSlotTransactionError(RedisClusterException):
|
redis/retry.py
CHANGED
|
@@ -1,27 +1,27 @@
|
|
|
1
|
+
import abc
|
|
1
2
|
import socket
|
|
2
3
|
from time import sleep
|
|
3
|
-
from typing import TYPE_CHECKING, Any, Callable, Iterable, Tuple, Type, TypeVar
|
|
4
|
+
from typing import TYPE_CHECKING, Any, Callable, Generic, Iterable, Tuple, Type, TypeVar
|
|
4
5
|
|
|
5
6
|
from redis.exceptions import ConnectionError, TimeoutError
|
|
6
7
|
|
|
7
8
|
T = TypeVar("T")
|
|
9
|
+
E = TypeVar("E", bound=Exception, covariant=True)
|
|
8
10
|
|
|
9
11
|
if TYPE_CHECKING:
|
|
10
12
|
from redis.backoff import AbstractBackoff
|
|
11
13
|
|
|
12
14
|
|
|
13
|
-
class
|
|
15
|
+
class AbstractRetry(Generic[E], abc.ABC):
|
|
14
16
|
"""Retry a specific number of times after a failure"""
|
|
15
17
|
|
|
18
|
+
_supported_errors: Tuple[Type[E], ...]
|
|
19
|
+
|
|
16
20
|
def __init__(
|
|
17
21
|
self,
|
|
18
22
|
backoff: "AbstractBackoff",
|
|
19
23
|
retries: int,
|
|
20
|
-
supported_errors: Tuple[Type[
|
|
21
|
-
ConnectionError,
|
|
22
|
-
TimeoutError,
|
|
23
|
-
socket.timeout,
|
|
24
|
-
),
|
|
24
|
+
supported_errors: Tuple[Type[E], ...],
|
|
25
25
|
):
|
|
26
26
|
"""
|
|
27
27
|
Initialize a `Retry` object with a `Backoff` object
|
|
@@ -34,22 +34,14 @@ class Retry:
|
|
|
34
34
|
self._retries = retries
|
|
35
35
|
self._supported_errors = supported_errors
|
|
36
36
|
|
|
37
|
+
@abc.abstractmethod
|
|
37
38
|
def __eq__(self, other: Any) -> bool:
|
|
38
|
-
|
|
39
|
-
return NotImplemented
|
|
40
|
-
|
|
41
|
-
return (
|
|
42
|
-
self._backoff == other._backoff
|
|
43
|
-
and self._retries == other._retries
|
|
44
|
-
and set(self._supported_errors) == set(other._supported_errors)
|
|
45
|
-
)
|
|
39
|
+
return NotImplemented
|
|
46
40
|
|
|
47
41
|
def __hash__(self) -> int:
|
|
48
42
|
return hash((self._backoff, self._retries, frozenset(self._supported_errors)))
|
|
49
43
|
|
|
50
|
-
def update_supported_errors(
|
|
51
|
-
self, specified_errors: Iterable[Type[Exception]]
|
|
52
|
-
) -> None:
|
|
44
|
+
def update_supported_errors(self, specified_errors: Iterable[Type[E]]) -> None:
|
|
53
45
|
"""
|
|
54
46
|
Updates the supported errors with the specified error types
|
|
55
47
|
"""
|
|
@@ -69,6 +61,32 @@ class Retry:
|
|
|
69
61
|
"""
|
|
70
62
|
self._retries = value
|
|
71
63
|
|
|
64
|
+
|
|
65
|
+
class Retry(AbstractRetry[Exception]):
|
|
66
|
+
__hash__ = AbstractRetry.__hash__
|
|
67
|
+
|
|
68
|
+
def __init__(
|
|
69
|
+
self,
|
|
70
|
+
backoff: "AbstractBackoff",
|
|
71
|
+
retries: int,
|
|
72
|
+
supported_errors: Tuple[Type[Exception], ...] = (
|
|
73
|
+
ConnectionError,
|
|
74
|
+
TimeoutError,
|
|
75
|
+
socket.timeout,
|
|
76
|
+
),
|
|
77
|
+
):
|
|
78
|
+
super().__init__(backoff, retries, supported_errors)
|
|
79
|
+
|
|
80
|
+
def __eq__(self, other: Any) -> bool:
|
|
81
|
+
if not isinstance(other, Retry):
|
|
82
|
+
return NotImplemented
|
|
83
|
+
|
|
84
|
+
return (
|
|
85
|
+
self._backoff == other._backoff
|
|
86
|
+
and self._retries == other._retries
|
|
87
|
+
and set(self._supported_errors) == set(other._supported_errors)
|
|
88
|
+
)
|
|
89
|
+
|
|
72
90
|
def call_with_retry(
|
|
73
91
|
self,
|
|
74
92
|
do: Callable[[], T],
|
redis/sentinel.py
CHANGED
|
@@ -5,8 +5,12 @@ from typing import Optional
|
|
|
5
5
|
from redis.client import Redis
|
|
6
6
|
from redis.commands import SentinelCommands
|
|
7
7
|
from redis.connection import Connection, ConnectionPool, SSLConnection
|
|
8
|
-
from redis.exceptions import
|
|
9
|
-
|
|
8
|
+
from redis.exceptions import (
|
|
9
|
+
ConnectionError,
|
|
10
|
+
ReadOnlyError,
|
|
11
|
+
ResponseError,
|
|
12
|
+
TimeoutError,
|
|
13
|
+
)
|
|
10
14
|
|
|
11
15
|
|
|
12
16
|
class MasterNotFoundError(ConnectionError):
|
|
@@ -35,11 +39,11 @@ class SentinelManagedConnection(Connection):
|
|
|
35
39
|
|
|
36
40
|
def connect_to(self, address):
|
|
37
41
|
self.host, self.port = address
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
self.
|
|
41
|
-
|
|
42
|
-
|
|
42
|
+
|
|
43
|
+
self.connect_check_health(
|
|
44
|
+
check_health=self.connection_pool.check_connection,
|
|
45
|
+
retry_socket_connect=False,
|
|
46
|
+
)
|
|
43
47
|
|
|
44
48
|
def _connect_retry(self):
|
|
45
49
|
if self._sock:
|
|
@@ -254,16 +258,27 @@ class Sentinel(SentinelCommands):
|
|
|
254
258
|
once - If set to True, then execute the resulting command on a single
|
|
255
259
|
node at random, rather than across the entire sentinel cluster.
|
|
256
260
|
"""
|
|
257
|
-
once = bool(kwargs.
|
|
258
|
-
|
|
259
|
-
|
|
261
|
+
once = bool(kwargs.pop("once", False))
|
|
262
|
+
|
|
263
|
+
# Check if command is supposed to return the original
|
|
264
|
+
# responses instead of boolean value.
|
|
265
|
+
return_responses = bool(kwargs.pop("return_responses", False))
|
|
260
266
|
|
|
261
267
|
if once:
|
|
262
|
-
random.choice(self.sentinels).execute_command(*args, **kwargs)
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
268
|
+
response = random.choice(self.sentinels).execute_command(*args, **kwargs)
|
|
269
|
+
if return_responses:
|
|
270
|
+
return [response]
|
|
271
|
+
else:
|
|
272
|
+
return True if response else False
|
|
273
|
+
|
|
274
|
+
responses = []
|
|
275
|
+
for sentinel in self.sentinels:
|
|
276
|
+
responses.append(sentinel.execute_command(*args, **kwargs))
|
|
277
|
+
|
|
278
|
+
if return_responses:
|
|
279
|
+
return responses
|
|
280
|
+
|
|
281
|
+
return all(responses)
|
|
267
282
|
|
|
268
283
|
def __repr__(self):
|
|
269
284
|
sentinel_addresses = []
|
redis/typing.py
CHANGED
|
@@ -15,8 +15,6 @@ from typing import (
|
|
|
15
15
|
|
|
16
16
|
if TYPE_CHECKING:
|
|
17
17
|
from redis._parsers import Encoder
|
|
18
|
-
from redis.asyncio.connection import ConnectionPool as AsyncConnectionPool
|
|
19
|
-
from redis.connection import ConnectionPool
|
|
20
18
|
|
|
21
19
|
|
|
22
20
|
Number = Union[int, float]
|
|
@@ -52,8 +50,6 @@ ExceptionMappingT = Mapping[str, Union[Type[Exception], Mapping[str, Type[Except
|
|
|
52
50
|
|
|
53
51
|
|
|
54
52
|
class CommandsProtocol(Protocol):
|
|
55
|
-
connection_pool: Union["AsyncConnectionPool", "ConnectionPool"]
|
|
56
|
-
|
|
57
53
|
def execute_command(self, *args, **options) -> ResponseT: ...
|
|
58
54
|
|
|
59
55
|
|
redis/utils.py
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import datetime
|
|
2
2
|
import logging
|
|
3
3
|
import textwrap
|
|
4
|
+
from collections.abc import Callable
|
|
4
5
|
from contextlib import contextmanager
|
|
5
6
|
from functools import wraps
|
|
6
|
-
from typing import Any, Dict, List, Mapping, Optional, Union
|
|
7
|
+
from typing import Any, Dict, List, Mapping, Optional, TypeVar, Union
|
|
7
8
|
|
|
8
9
|
from redis.exceptions import DataError
|
|
9
10
|
from redis.typing import AbsExpiryT, EncodableT, ExpiryT
|
|
@@ -12,9 +13,12 @@ try:
|
|
|
12
13
|
import hiredis # noqa
|
|
13
14
|
|
|
14
15
|
# Only support Hiredis >= 3.0:
|
|
15
|
-
|
|
16
|
+
hiredis_version = hiredis.__version__.split(".")
|
|
17
|
+
HIREDIS_AVAILABLE = int(hiredis_version[0]) > 3 or (
|
|
18
|
+
int(hiredis_version[0]) == 3 and int(hiredis_version[1]) >= 2
|
|
19
|
+
)
|
|
16
20
|
if not HIREDIS_AVAILABLE:
|
|
17
|
-
raise ImportError("hiredis package should be >= 3.
|
|
21
|
+
raise ImportError("hiredis package should be >= 3.2.0")
|
|
18
22
|
except ImportError:
|
|
19
23
|
HIREDIS_AVAILABLE = False
|
|
20
24
|
|
|
@@ -147,18 +151,21 @@ def warn_deprecated_arg_usage(
|
|
|
147
151
|
warnings.warn(msg, category=DeprecationWarning, stacklevel=stacklevel)
|
|
148
152
|
|
|
149
153
|
|
|
154
|
+
C = TypeVar("C", bound=Callable)
|
|
155
|
+
|
|
156
|
+
|
|
150
157
|
def deprecated_args(
|
|
151
158
|
args_to_warn: list = ["*"],
|
|
152
159
|
allowed_args: list = [],
|
|
153
160
|
reason: str = "",
|
|
154
161
|
version: str = "",
|
|
155
|
-
):
|
|
162
|
+
) -> Callable[[C], C]:
|
|
156
163
|
"""
|
|
157
164
|
Decorator to mark specified args of a function as deprecated.
|
|
158
165
|
If '*' is in args_to_warn, all arguments will be marked as deprecated.
|
|
159
166
|
"""
|
|
160
167
|
|
|
161
|
-
def decorator(func):
|
|
168
|
+
def decorator(func: C) -> C:
|
|
162
169
|
@wraps(func)
|
|
163
170
|
def wrapper(*args, **kwargs):
|
|
164
171
|
# Get function argument names
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: redis
|
|
3
|
-
Version: 6.
|
|
3
|
+
Version: 6.3.0
|
|
4
4
|
Summary: Python client for Redis database and key-value store
|
|
5
5
|
Project-URL: Changes, https://github.com/redis/redis-py/releases
|
|
6
6
|
Project-URL: Code, https://github.com/redis/redis-py
|
|
@@ -19,7 +19,6 @@ Classifier: Operating System :: OS Independent
|
|
|
19
19
|
Classifier: Programming Language :: Python
|
|
20
20
|
Classifier: Programming Language :: Python :: 3
|
|
21
21
|
Classifier: Programming Language :: Python :: 3 :: Only
|
|
22
|
-
Classifier: Programming Language :: Python :: 3.8
|
|
23
22
|
Classifier: Programming Language :: Python :: 3.9
|
|
24
23
|
Classifier: Programming Language :: Python :: 3.10
|
|
25
24
|
Classifier: Programming Language :: Python :: 3.11
|
|
@@ -27,10 +26,10 @@ Classifier: Programming Language :: Python :: 3.12
|
|
|
27
26
|
Classifier: Programming Language :: Python :: 3.13
|
|
28
27
|
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
29
28
|
Classifier: Programming Language :: Python :: Implementation :: PyPy
|
|
30
|
-
Requires-Python: >=3.
|
|
29
|
+
Requires-Python: >=3.9
|
|
31
30
|
Requires-Dist: async-timeout>=4.0.3; python_full_version < '3.11.3'
|
|
32
31
|
Provides-Extra: hiredis
|
|
33
|
-
Requires-Dist: hiredis>=3.
|
|
32
|
+
Requires-Dist: hiredis>=3.2.0; extra == 'hiredis'
|
|
34
33
|
Provides-Extra: jwt
|
|
35
34
|
Requires-Dist: pyjwt>=2.9.0; extra == 'jwt'
|
|
36
35
|
Provides-Extra: ocsp
|
|
@@ -44,7 +43,7 @@ Description-Content-Type: text/markdown
|
|
|
44
43
|
The Python interface to the Redis key-value store.
|
|
45
44
|
|
|
46
45
|
[](https://github.com/redis/redis-py/actions?query=workflow%3ACI+branch%3Amaster)
|
|
47
|
-
[](https://redis
|
|
46
|
+
[](https://redis.readthedocs.io/en/stable/)
|
|
48
47
|
[](./LICENSE)
|
|
49
48
|
[](https://pypi.org/project/redis/)
|
|
50
49
|
[](https://github.com/redis/redis-py/releases)
|
|
@@ -55,7 +54,7 @@ The Python interface to the Redis key-value store.
|
|
|
55
54
|
---------------------------------------------
|
|
56
55
|
|
|
57
56
|
**Note:** redis-py 5.0 will be the last version of redis-py to support Python 3.7, as it has reached [end of life](https://devguide.python.org/versions/). redis-py 5.1 will support Python 3.8+.
|
|
58
|
-
|
|
57
|
+
**Note:** redis-py 6.1.0 will be the last version of redis-py to support Python 3.8, as it has reached [end of life](https://devguide.python.org/versions/). redis-py 6.2.0 will support Python 3.9+.
|
|
59
58
|
---------------------------------------------
|
|
60
59
|
|
|
61
60
|
## How do I Redis?
|
|
@@ -75,15 +74,14 @@ The Python interface to the Redis key-value store.
|
|
|
75
74
|
Start a redis via docker (for Redis versions >= 8.0):
|
|
76
75
|
|
|
77
76
|
``` bash
|
|
78
|
-
|
|
77
|
+
docker run -p 6379:6379 -it redis:latest
|
|
79
78
|
```
|
|
80
79
|
|
|
81
80
|
Start a redis via docker (for Redis versions < 8.0):
|
|
82
81
|
|
|
83
82
|
``` bash
|
|
84
|
-
|
|
83
|
+
docker run -p 6379:6379 -it redis/redis-stack:latest
|
|
85
84
|
```
|
|
86
|
-
|
|
87
85
|
To install redis-py, simply:
|
|
88
86
|
|
|
89
87
|
``` bash
|
|
@@ -251,4 +249,4 @@ Special thanks to:
|
|
|
251
249
|
system.
|
|
252
250
|
- Paul Hubbard for initial packaging support.
|
|
253
251
|
|
|
254
|
-
[](https://redis.io)
|
|
252
|
+
[](https://redis.io)
|
|
@@ -1,36 +1,36 @@
|
|
|
1
|
-
redis/__init__.py,sha256=
|
|
2
|
-
redis/backoff.py,sha256=
|
|
1
|
+
redis/__init__.py,sha256=fP1FHH-BrfwDHAKlWIds9hEFqSHIi-hUer1pH_JgbAA,2112
|
|
2
|
+
redis/backoff.py,sha256=tQM6Lh2g2FjMH8iXg94br2sU9eri4mEW9FbOrMt0azs,5285
|
|
3
3
|
redis/cache.py,sha256=68rJDNogvNwgdgBel6zSX9QziL11qsKIMhmvQvHvznM,9549
|
|
4
|
-
redis/client.py,sha256=
|
|
5
|
-
redis/cluster.py,sha256=
|
|
6
|
-
redis/connection.py,sha256=
|
|
4
|
+
redis/client.py,sha256=CGyGCMl4r4h0MUPPvPzjmF7Z0iKa7MI_LqhWlmkgHNI,62781
|
|
5
|
+
redis/cluster.py,sha256=CgKGFnprziYjsr--qWbhY--2oaaWQRbuKofi1Qr9m5c,124120
|
|
6
|
+
redis/connection.py,sha256=Nr_tCxUY6ZeiSheoDP25J5Cp525oBl5NMnQjI_faGEk,67301
|
|
7
7
|
redis/crc.py,sha256=Z3kXFtkY2LdgefnQMud1xr4vG5UYvA9LCMqNMX1ywu4,729
|
|
8
8
|
redis/credentials.py,sha256=GOnO3-LSW34efHaIrUbS742Mw8l70mRzF6UrKiKZsMY,1828
|
|
9
9
|
redis/event.py,sha256=urOK241IdgmCQ3fq7GqXRstZ2vcXRV14bBBMdN3latk,12129
|
|
10
|
-
redis/exceptions.py,sha256=
|
|
10
|
+
redis/exceptions.py,sha256=b3OO87gncNCRUnx1d7O57N2kkjP-feXn70fPkXHaLmQ,5789
|
|
11
11
|
redis/lock.py,sha256=GrvPSxaOqKo7iAL2oi5ZUEPsOkxAXHVE_Tp1ejgO2fY,12760
|
|
12
12
|
redis/ocsp.py,sha256=teYSmKnCtk6B3jJLdNYbZN4OE0mxgspt2zUPbkIQzio,11452
|
|
13
13
|
redis/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
14
|
-
redis/retry.py,sha256=
|
|
15
|
-
redis/sentinel.py,sha256=
|
|
16
|
-
redis/typing.py,sha256=
|
|
17
|
-
redis/utils.py,sha256=
|
|
18
|
-
redis/_parsers/__init__.py,sha256=
|
|
19
|
-
redis/_parsers/base.py,sha256=
|
|
14
|
+
redis/retry.py,sha256=oS0nc0nYxEQaD4t95HEr1GhvhpOmnTKMnNtHn8Fqzxo,3405
|
|
15
|
+
redis/sentinel.py,sha256=DP1XtO1HRemZMamC1TFHg_hBJRv9eoQgTMlZfPYRUo8,15013
|
|
16
|
+
redis/typing.py,sha256=z5JQjGkNzejEzb2y7TXct7tS5yzAfLQod9o37Mh1_Ug,1953
|
|
17
|
+
redis/utils.py,sha256=vO-njeF4ntROo1OReUiKtcY72I2JcEZYA62-_ssQW50,8495
|
|
18
|
+
redis/_parsers/__init__.py,sha256=gyf5dp918NuJAkWFl8sX1Z-qAvbX_40-_7YCTM6Rvjc,693
|
|
19
|
+
redis/_parsers/base.py,sha256=k6n7-oTmmzAUiiZpaB6Vfjzlj_torwBsaPBEYdOTDak,9908
|
|
20
20
|
redis/_parsers/commands.py,sha256=pmR4hl4u93UvCmeDgePHFc6pWDr4slrKEvCsdMmtj_M,11052
|
|
21
21
|
redis/_parsers/encoders.py,sha256=X0jvTp-E4TZUlZxV5LJJ88TuVrF1vly5tuC0xjxGaSc,1734
|
|
22
|
-
redis/_parsers/helpers.py,sha256=
|
|
23
|
-
redis/_parsers/hiredis.py,sha256=
|
|
22
|
+
redis/_parsers/helpers.py,sha256=Y6n14fE0eCYbF3TBuJxhycnJ1yHKiYoAJrOCUaiWolg,29223
|
|
23
|
+
redis/_parsers/hiredis.py,sha256=iUjLT5OEgD4zqF_tg3Szmg1c_73RozXyjjAFsVYKCWM,10893
|
|
24
24
|
redis/_parsers/resp2.py,sha256=f22kH-_ZP2iNtOn6xOe65MSy_fJpu8OEn1u_hgeeojI,4813
|
|
25
|
-
redis/_parsers/resp3.py,sha256=
|
|
25
|
+
redis/_parsers/resp3.py,sha256=tiZRbyJAnObqll2LQJ57Br-3jxwQcMocV4GQE_LpC6g,9883
|
|
26
26
|
redis/_parsers/socket.py,sha256=CKD8QW_wFSNlIZzxlbNduaGpiv0I8wBcsGuAIojDfJg,5403
|
|
27
27
|
redis/asyncio/__init__.py,sha256=uoDD8XYVi0Kj6mcufYwLDUTQXmBRx7a0bhKF9stZr7I,1489
|
|
28
|
-
redis/asyncio/client.py,sha256=
|
|
29
|
-
redis/asyncio/cluster.py,sha256=
|
|
30
|
-
redis/asyncio/connection.py,sha256=
|
|
28
|
+
redis/asyncio/client.py,sha256=6a5-txYcRMtObkb7Bfi08MKQQY01oy5NKpHAlfhIFNM,61905
|
|
29
|
+
redis/asyncio/cluster.py,sha256=nQHttKd03Ci10btkVhZ3jm8M9YzMGoOPhIJBgyAOGyw,90498
|
|
30
|
+
redis/asyncio/connection.py,sha256=D28OecfufSf6c2gJ8UhJhorhWMpHeFHxxIaWxvvQHoc,49197
|
|
31
31
|
redis/asyncio/lock.py,sha256=GxgV6EsyKpMjh74KtaOPxh4fNPuwApz6Th46qhvrAws,12801
|
|
32
|
-
redis/asyncio/retry.py,sha256=
|
|
33
|
-
redis/asyncio/sentinel.py,sha256=
|
|
32
|
+
redis/asyncio/retry.py,sha256=Ikm0rsvnFItracA89DdPcejLqb_Sr4QBz73Ow_LUmwU,1880
|
|
33
|
+
redis/asyncio/sentinel.py,sha256=Ppk-jlTubcHpa0lvinZ1pPTtQ5rFHXZkkaCZ7G_TCQs,14868
|
|
34
34
|
redis/asyncio/utils.py,sha256=31xFzXczDgSRyf6hSjiwue1eDQ_XlP_OJdp5dKxW_aE,718
|
|
35
35
|
redis/auth/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
36
36
|
redis/auth/err.py,sha256=WYkbuDIzwp1S-eAvsya6QMlO6g9QIXbzMITOsTWX0xk,694
|
|
@@ -39,10 +39,10 @@ redis/auth/token.py,sha256=qYwAgxFW3S93QDUqp1BTsj7Pj9ZohnixGeOX0s7AsjY,3317
|
|
|
39
39
|
redis/auth/token_manager.py,sha256=ShBsYXiBZBJBOMB_Y-pXfLwEOAmc9s1okaCECinNZ7g,12018
|
|
40
40
|
redis/commands/__init__.py,sha256=cTUH-MGvaLYS0WuoytyqtN1wniw2A1KbkUXcpvOSY3I,576
|
|
41
41
|
redis/commands/cluster.py,sha256=vdWdpl4mP51oqfYBZHg5CUXt6jPaNp7aCLHyTieDrt8,31248
|
|
42
|
-
redis/commands/core.py,sha256=
|
|
42
|
+
redis/commands/core.py,sha256=RjVbTxe_vfnraVOqREH6ofNU2LMX8-ZGSAzd5g3ypvE,241132
|
|
43
43
|
redis/commands/helpers.py,sha256=VCoPdBMCr4wxdWBw1EB9R7ZBbQM0exAG1kws4XwsCII,3318
|
|
44
44
|
redis/commands/redismodules.py,sha256=-kLM4RBklDhNh-MXCra81ZTSstIQ-ulRab6v0dYUTdA,2573
|
|
45
|
-
redis/commands/sentinel.py,sha256=
|
|
45
|
+
redis/commands/sentinel.py,sha256=Q1Xuw7qXA0YRZXGlIKsuOtah8UfF0QnkLywOTRvjiMY,5299
|
|
46
46
|
redis/commands/bf/__init__.py,sha256=qk4DA9KsMiP4WYqYeP1T5ScBwctsVtlLyMhrYIyq1Zc,8019
|
|
47
47
|
redis/commands/bf/commands.py,sha256=xeKt8E7G8HB-l922J0DLg07CEIZTVNGx_2Lfyw1gIck,21283
|
|
48
48
|
redis/commands/bf/info.py,sha256=_OB2v_hAPI9mdVNiBx8jUtH2MhMoct9ZRm-e8In6wQo,3355
|
|
@@ -57,7 +57,7 @@ redis/commands/search/aggregation.py,sha256=CcZSZyquLWLrcSblwgt-bSyMvm-TQS9B7N8Q
|
|
|
57
57
|
redis/commands/search/commands.py,sha256=ozyF6YgCiMArhb6ScXLPy49hnJwm4CGK4vrJRwSeB-I,38413
|
|
58
58
|
redis/commands/search/dialect.py,sha256=-7M6kkr33x0FkMtKmUsbeRAE6qxLUbqdJCqIo0UKIXo,105
|
|
59
59
|
redis/commands/search/document.py,sha256=g2R-PRgq-jN33_GLXzavvse4cpIHBMfjPfPK7tnE9Gc,413
|
|
60
|
-
redis/commands/search/field.py,sha256=
|
|
60
|
+
redis/commands/search/field.py,sha256=g9I1LHrVJKO1KtiUwotxrQvpg89e-sx26oClHuaKTn8,5935
|
|
61
61
|
redis/commands/search/index_definition.py,sha256=VL2CMzjxN0HEIaTn88evnHX1fCEmytbik4vAmiiYSC8,2489
|
|
62
62
|
redis/commands/search/profile_information.py,sha256=w9SbMiHbcZ1TpsZMe8cMIyO1hGkm5GhnZ_Gqg1feLtc,249
|
|
63
63
|
redis/commands/search/query.py,sha256=MbSs-cY7hG1OEkO-i6LJ_Ui1D3d2VyDTXPrmb-rty7w,12199
|
|
@@ -72,7 +72,7 @@ redis/commands/timeseries/utils.py,sha256=NLwSOS5Dz9N8dYQSzEyBIvrItOWwfQ0xgDj8un
|
|
|
72
72
|
redis/commands/vectorset/__init__.py,sha256=_fM0UdYjuzs8YWIUjQGH9QX5FwI0So8_D-5ALWWrWFc,1322
|
|
73
73
|
redis/commands/vectorset/commands.py,sha256=7CvQNFvkXuG3XPhHJ82y_oBYJwewRFz84aEi3OCH4Rw,12495
|
|
74
74
|
redis/commands/vectorset/utils.py,sha256=N-x0URyg76XC39CNfBym6FkFCVgm5NthzWKBnc2H0Xc,2981
|
|
75
|
-
redis-6.
|
|
76
|
-
redis-6.
|
|
77
|
-
redis-6.
|
|
78
|
-
redis-6.
|
|
75
|
+
redis-6.3.0.dist-info/METADATA,sha256=9Ji4pvCT4zk3sXoCl10z2-Dz_MtyRWsrFqDbirZ6FiQ,10784
|
|
76
|
+
redis-6.3.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
77
|
+
redis-6.3.0.dist-info/licenses/LICENSE,sha256=pXslClvwPXr-VbdAYzE_Ktt7ANVGwKsUmok5gzP-PMg,1074
|
|
78
|
+
redis-6.3.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|