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/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(self, check_health: bool = True):
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
- sock = self.retry.call_with_retry(
386
- lambda: self._connect(), lambda error: self.disconnect(error)
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] and not HIREDIS_AVAILABLE:
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) -> (str, str):
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"<{type(self).__module__}.{type(self).__name__}"
1438
- f"({repr(self.connection_class(**self.connection_kwargs))})>"
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 ConnectionError("Too many connections")
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 Retry:
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[Exception], ...] = (
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
- if not isinstance(other, Retry):
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 ConnectionError, ReadOnlyError, ResponseError, TimeoutError
9
- from redis.utils import str_if_bytes
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
- super().connect()
39
- if self.connection_pool.check_connection:
40
- self.send_command("PING")
41
- if str_if_bytes(self.read_response()) != "PONG":
42
- raise ConnectionError("PING failed")
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.get("once", False))
258
- if "once" in kwargs.keys():
259
- kwargs.pop("once")
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
- else:
264
- for sentinel in self.sentinels:
265
- sentinel.execute_command(*args, **kwargs)
266
- return True
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
- HIREDIS_AVAILABLE = int(hiredis.__version__.split(".")[0]) >= 3
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.0.0")
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.1.1
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.8
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.0.0; extra == 'hiredis'
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
  [![CI](https://github.com/redis/redis-py/workflows/CI/badge.svg?branch=master)](https://github.com/redis/redis-py/actions?query=workflow%3ACI+branch%3Amaster)
47
- [![docs](https://readthedocs.org/projects/redis/badge/?version=stable&style=flat)](https://redis-py.readthedocs.io/en/stable/)
46
+ [![docs](https://readthedocs.org/projects/redis/badge/?version=stable&style=flat)](https://redis.readthedocs.io/en/stable/)
48
47
  [![MIT licensed](https://img.shields.io/badge/license-MIT-blue.svg)](./LICENSE)
49
48
  [![pypi](https://badge.fury.io/py/redis.svg)](https://pypi.org/project/redis/)
50
49
  [![pre-release](https://img.shields.io/github/v/release/redis/redis-py?include_prereleases&label=latest-prerelease)](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
- $ docker run -p 6379:6379 -it redis:latest
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
- $ docker run -p 6379:6379 -it redis/redis-stack:latest
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
- [![Redis](./docs/_static/logo-redis.svg)](https://redis.io)
252
+ [![Redis](./docs/_static/logo-redis.svg)](https://redis.io)
@@ -1,36 +1,36 @@
1
- redis/__init__.py,sha256=v4Hs3gUcTOHjfzv2DYugQ2S2aSXHd6nRq0MNSVy7RZc,2088
2
- redis/backoff.py,sha256=2zR-ik5enJDsC2n2AWmE3ALSONgDLtyO4k096ZT6Txo,5275
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=9mspL8Dg8T7R8RJp47y-1157IkgzvamXwgEPPLAg_h8,62807
5
- redis/cluster.py,sha256=wmuctaVQbXdeRktMKxRkHhZdTNBB3TLbwobCApdE7wU,123811
6
- redis/connection.py,sha256=rbu62qHQmzZXRsIu0wljl9gk1nEM8gAjSNcfmFqQVd0,66931
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=46H-asqIaZ65Gc-voGzP7S39JtxdICGdHzdsT6LSMJE,5617
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=qJPRTARm3TYQPRNnzyjUUjGohbwtMz5KoDphCtHJ44Y,2902
15
- redis/sentinel.py,sha256=DBphu6uNp6ZCSaVDSVC8nFhSxG93a12DnzgGWpyeh64,14757
16
- redis/typing.py,sha256=k7F_3Vtsexeb7mUl6txlwrY1veGDLEhtcHe9FwIJOOo,2149
17
- redis/utils.py,sha256=XD4ySRo9JzLIMMpQY_q9MsxUIdEPee1d7rAq7xhmSwM,8268
18
- redis/_parsers/__init__.py,sha256=qkfgV2X9iyvQAvbLdSelwgz0dCk9SGAosCvuZC9-qDc,550
19
- redis/_parsers/base.py,sha256=WtCbM2CaOgHk7uxwWXA2KXDlZqfYA1EJrVX_NvdOZNk,7801
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=X5wkGDtuzseeCz23_t3FJpzy1ltIvh7zO1uD3cypiOs,29184
23
- redis/_parsers/hiredis.py,sha256=qL1iCkWlxI63PiP99u_MY5-V6zKaesW2fD-IMNtc0QI,8189
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=JgLDeryCAqx75ghM78mAvxumzWBMEWupmFpaRoL6Xqo,11129
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=xZNHB8SEWe_CrDOrNoKUEZMW4Aw_zKF0iygD7MOsujI,61954
29
- redis/asyncio/cluster.py,sha256=190gM2GMnvrOhOI1I6t2ogS9UkMeokqe-uiFOtHk_1M,67891
30
- redis/asyncio/connection.py,sha256=AdsKxm-UlqFQQojP7hRDm-cTI5-KeavJkST-8zSif80,48944
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=8carxJLme2f0frB9Z0wU3mHqKzwqzGAGb2TMEtaaMvo,2482
33
- redis/asyncio/sentinel.py,sha256=H7N_hvdATojwY06aH1AawFV-05AImqtOSAq0xKElbbk,14636
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=lIi3DUP2kPdBC_RXrSTcUpjI_ORL9nKck9YayWIF_Pc,238242
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=hRcIQ9x9nEkdcCsJzo6Ves6vk-3tsfQqfJTT_v3oLY0,4110
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=ZWHYTtrLi-zZojohqXoidfllxP0SiadBW6hnGkBw7mM,5891
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.1.1.dist-info/METADATA,sha256=_9FLKERagTPwBAm2ISdJ3GcENz4Mn5TjHrXrjlIg8Eg,10644
76
- redis-6.1.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
77
- redis-6.1.1.dist-info/licenses/LICENSE,sha256=pXslClvwPXr-VbdAYzE_Ktt7ANVGwKsUmok5gzP-PMg,1074
78
- redis-6.1.1.dist-info/RECORD,,
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