redis 6.0.0b2__py3-none-any.whl → 6.2.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.
@@ -120,7 +120,7 @@ class JSON(JSONCommands):
120
120
  startup_nodes=self.client.nodes_manager.startup_nodes,
121
121
  result_callbacks=self.client.result_callbacks,
122
122
  cluster_response_callbacks=self.client.cluster_response_callbacks,
123
- cluster_error_retry_attempts=self.client.cluster_error_retry_attempts,
123
+ cluster_error_retry_attempts=self.client.retry.get_retries(),
124
124
  read_from_replicas=self.client.read_from_replicas,
125
125
  reinitialize_steps=self.client.reinitialize_steps,
126
126
  lock=self.client._lock,
@@ -15,7 +15,7 @@ class JSONCommands:
15
15
 
16
16
  def arrappend(
17
17
  self, name: str, path: Optional[str] = Path.root_path(), *args: List[JsonType]
18
- ) -> List[Union[int, None]]:
18
+ ) -> List[Optional[int]]:
19
19
  """Append the objects ``args`` to the array under the
20
20
  ``path` in key ``name``.
21
21
 
@@ -33,7 +33,7 @@ class JSONCommands:
33
33
  scalar: int,
34
34
  start: Optional[int] = None,
35
35
  stop: Optional[int] = None,
36
- ) -> List[Union[int, None]]:
36
+ ) -> List[Optional[int]]:
37
37
  """
38
38
  Return the index of ``scalar`` in the JSON array under ``path`` at key
39
39
  ``name``.
@@ -53,7 +53,7 @@ class JSONCommands:
53
53
 
54
54
  def arrinsert(
55
55
  self, name: str, path: str, index: int, *args: List[JsonType]
56
- ) -> List[Union[int, None]]:
56
+ ) -> List[Optional[int]]:
57
57
  """Insert the objects ``args`` to the array at index ``index``
58
58
  under the ``path` in key ``name``.
59
59
 
@@ -66,7 +66,7 @@ class JSONCommands:
66
66
 
67
67
  def arrlen(
68
68
  self, name: str, path: Optional[str] = Path.root_path()
69
- ) -> List[Union[int, None]]:
69
+ ) -> List[Optional[int]]:
70
70
  """Return the length of the array JSON value under ``path``
71
71
  at key``name``.
72
72
 
@@ -79,7 +79,7 @@ class JSONCommands:
79
79
  name: str,
80
80
  path: Optional[str] = Path.root_path(),
81
81
  index: Optional[int] = -1,
82
- ) -> List[Union[str, None]]:
82
+ ) -> List[Optional[str]]:
83
83
  """Pop the element at ``index`` in the array JSON value under
84
84
  ``path`` at key ``name``.
85
85
 
@@ -89,7 +89,7 @@ class JSONCommands:
89
89
 
90
90
  def arrtrim(
91
91
  self, name: str, path: str, start: int, stop: int
92
- ) -> List[Union[int, None]]:
92
+ ) -> List[Optional[int]]:
93
93
  """Trim the array JSON value under ``path`` at key ``name`` to the
94
94
  inclusive range given by ``start`` and ``stop``.
95
95
 
@@ -113,7 +113,7 @@ class JSONCommands:
113
113
 
114
114
  def objkeys(
115
115
  self, name: str, path: Optional[str] = Path.root_path()
116
- ) -> List[Union[List[str], None]]:
116
+ ) -> List[Optional[List[str]]]:
117
117
  """Return the key names in the dictionary JSON value under ``path`` at
118
118
  key ``name``.
119
119
 
@@ -357,7 +357,7 @@ class JSONCommands:
357
357
 
358
358
  return set_files_result
359
359
 
360
- def strlen(self, name: str, path: Optional[str] = None) -> List[Union[int, None]]:
360
+ def strlen(self, name: str, path: Optional[str] = None) -> List[Optional[int]]:
361
361
  """Return the length of the string JSON value under ``path`` at key
362
362
  ``name``.
363
363
 
@@ -1,4 +1,14 @@
1
+ from __future__ import annotations
2
+
1
3
  from json import JSONDecoder, JSONEncoder
4
+ from typing import TYPE_CHECKING
5
+
6
+ if TYPE_CHECKING:
7
+ from .bf import BFBloom, CFBloom, CMSBloom, TDigestBloom, TOPKBloom
8
+ from .json import JSON
9
+ from .search import AsyncSearch, Search
10
+ from .timeseries import TimeSeries
11
+ from .vectorset import VectorSet
2
12
 
3
13
 
4
14
  class RedisModuleCommands:
@@ -6,7 +16,7 @@ class RedisModuleCommands:
6
16
  modules into the command namespace.
7
17
  """
8
18
 
9
- def json(self, encoder=JSONEncoder(), decoder=JSONDecoder()):
19
+ def json(self, encoder=JSONEncoder(), decoder=JSONDecoder()) -> JSON:
10
20
  """Access the json namespace, providing support for redis json."""
11
21
 
12
22
  from .json import JSON
@@ -14,7 +24,7 @@ class RedisModuleCommands:
14
24
  jj = JSON(client=self, encoder=encoder, decoder=decoder)
15
25
  return jj
16
26
 
17
- def ft(self, index_name="idx"):
27
+ def ft(self, index_name="idx") -> Search:
18
28
  """Access the search namespace, providing support for redis search."""
19
29
 
20
30
  from .search import Search
@@ -22,7 +32,7 @@ class RedisModuleCommands:
22
32
  s = Search(client=self, index_name=index_name)
23
33
  return s
24
34
 
25
- def ts(self):
35
+ def ts(self) -> TimeSeries:
26
36
  """Access the timeseries namespace, providing support for
27
37
  redis timeseries data.
28
38
  """
@@ -32,7 +42,7 @@ class RedisModuleCommands:
32
42
  s = TimeSeries(client=self)
33
43
  return s
34
44
 
35
- def bf(self):
45
+ def bf(self) -> BFBloom:
36
46
  """Access the bloom namespace."""
37
47
 
38
48
  from .bf import BFBloom
@@ -40,7 +50,7 @@ class RedisModuleCommands:
40
50
  bf = BFBloom(client=self)
41
51
  return bf
42
52
 
43
- def cf(self):
53
+ def cf(self) -> CFBloom:
44
54
  """Access the bloom namespace."""
45
55
 
46
56
  from .bf import CFBloom
@@ -48,7 +58,7 @@ class RedisModuleCommands:
48
58
  cf = CFBloom(client=self)
49
59
  return cf
50
60
 
51
- def cms(self):
61
+ def cms(self) -> CMSBloom:
52
62
  """Access the bloom namespace."""
53
63
 
54
64
  from .bf import CMSBloom
@@ -56,7 +66,7 @@ class RedisModuleCommands:
56
66
  cms = CMSBloom(client=self)
57
67
  return cms
58
68
 
59
- def topk(self):
69
+ def topk(self) -> TOPKBloom:
60
70
  """Access the bloom namespace."""
61
71
 
62
72
  from .bf import TOPKBloom
@@ -64,7 +74,7 @@ class RedisModuleCommands:
64
74
  topk = TOPKBloom(client=self)
65
75
  return topk
66
76
 
67
- def tdigest(self):
77
+ def tdigest(self) -> TDigestBloom:
68
78
  """Access the bloom namespace."""
69
79
 
70
80
  from .bf import TDigestBloom
@@ -72,7 +82,7 @@ class RedisModuleCommands:
72
82
  tdigest = TDigestBloom(client=self)
73
83
  return tdigest
74
84
 
75
- def vset(self):
85
+ def vset(self) -> VectorSet:
76
86
  """Access the VectorSet commands namespace."""
77
87
 
78
88
  from .vectorset import VectorSet
@@ -82,7 +92,7 @@ class RedisModuleCommands:
82
92
 
83
93
 
84
94
  class AsyncRedisModuleCommands(RedisModuleCommands):
85
- def ft(self, index_name="idx"):
95
+ def ft(self, index_name="idx") -> AsyncSearch:
86
96
  """Access the search namespace, providing support for redis search."""
87
97
 
88
98
  from .search import AsyncSearch
@@ -23,7 +23,6 @@ ALTER_CMD = "FT.ALTER"
23
23
  SEARCH_CMD = "FT.SEARCH"
24
24
  ADD_CMD = "FT.ADD"
25
25
  ADDHASH_CMD = "FT.ADDHASH"
26
- DROP_CMD = "FT.DROP"
27
26
  DROPINDEX_CMD = "FT.DROPINDEX"
28
27
  EXPLAIN_CMD = "FT.EXPLAIN"
29
28
  EXPLAINCLI_CMD = "FT.EXPLAINCLI"
@@ -35,7 +34,6 @@ SPELLCHECK_CMD = "FT.SPELLCHECK"
35
34
  DICT_ADD_CMD = "FT.DICTADD"
36
35
  DICT_DEL_CMD = "FT.DICTDEL"
37
36
  DICT_DUMP_CMD = "FT.DICTDUMP"
38
- GET_CMD = "FT.GET"
39
37
  MGET_CMD = "FT.MGET"
40
38
  CONFIG_CMD = "FT.CONFIG"
41
39
  TAGVALS_CMD = "FT.TAGVALS"
@@ -406,6 +404,7 @@ class SearchCommands:
406
404
  doc_id, conn=None, score=score, language=language, replace=replace
407
405
  )
408
406
 
407
+ @deprecated_function(version="2.0.0", reason="deprecated since redisearch 2.0")
409
408
  def delete_document(self, doc_id, conn=None, delete_actual_document=False):
410
409
  """
411
410
  Delete a document from index
@@ -440,6 +439,7 @@ class SearchCommands:
440
439
 
441
440
  return Document(id=id, **fields)
442
441
 
442
+ @deprecated_function(version="2.0.0", reason="deprecated since redisearch 2.0")
443
443
  def get(self, *ids):
444
444
  """
445
445
  Returns the full contents of multiple documents.
@@ -84,7 +84,7 @@ class TimeSeries(TimeSeriesCommands):
84
84
  startup_nodes=self.client.nodes_manager.startup_nodes,
85
85
  result_callbacks=self.client.result_callbacks,
86
86
  cluster_response_callbacks=self.client.cluster_response_callbacks,
87
- cluster_error_retry_attempts=self.client.cluster_error_retry_attempts,
87
+ cluster_error_retry_attempts=self.client.retry.get_retries(),
88
88
  read_from_replicas=self.client.read_from_replicas,
89
89
  reinitialize_steps=self.client.reinitialize_steps,
90
90
  lock=self.client._lock,
redis/connection.py CHANGED
@@ -636,7 +636,7 @@ class AbstractConnection(ConnectionInterface):
636
636
  host_error = self._host_error()
637
637
 
638
638
  try:
639
- if self.protocol in ["3", 3] and not HIREDIS_AVAILABLE:
639
+ if self.protocol in ["3", 3]:
640
640
  response = self._parser.read_response(
641
641
  disable_decoding=disable_decoding, push_request=push_request
642
642
  )
@@ -820,7 +820,7 @@ class CacheProxyConnection(ConnectionInterface):
820
820
  self.credential_provider = conn.credential_provider
821
821
  self._pool_lock = pool_lock
822
822
  self._cache = cache
823
- self._cache_lock = threading.Lock()
823
+ self._cache_lock = threading.RLock()
824
824
  self._current_command_cache_key = None
825
825
  self._current_options = None
826
826
  self.register_connect_callback(self._enable_tracking_callback)
@@ -1028,7 +1028,7 @@ class SSLConnection(Connection):
1028
1028
  ssl_cert_reqs="required",
1029
1029
  ssl_ca_certs=None,
1030
1030
  ssl_ca_data=None,
1031
- ssl_check_hostname=False,
1031
+ ssl_check_hostname=True,
1032
1032
  ssl_ca_path=None,
1033
1033
  ssl_password=None,
1034
1034
  ssl_validate_ocsp=False,
@@ -1083,7 +1083,9 @@ class SSLConnection(Connection):
1083
1083
  self.ca_certs = ssl_ca_certs
1084
1084
  self.ca_data = ssl_ca_data
1085
1085
  self.ca_path = ssl_ca_path
1086
- self.check_hostname = ssl_check_hostname
1086
+ self.check_hostname = (
1087
+ ssl_check_hostname if self.cert_reqs != ssl.CERT_NONE else False
1088
+ )
1087
1089
  self.certificate_password = ssl_password
1088
1090
  self.ssl_validate_ocsp = ssl_validate_ocsp
1089
1091
  self.ssl_validate_ocsp_stapled = ssl_validate_ocsp_stapled
@@ -1418,8 +1420,16 @@ class ConnectionPool:
1418
1420
  # object of this pool. subsequent threads acquiring this lock
1419
1421
  # will notice the first thread already did the work and simply
1420
1422
  # release the lock.
1421
- self._fork_lock = threading.Lock()
1422
- self._lock = threading.Lock()
1423
+
1424
+ self._fork_lock = threading.RLock()
1425
+
1426
+ if self.cache is None:
1427
+ self._lock = threading.RLock()
1428
+ else:
1429
+ # TODO: To avoid breaking changes during the bug fix, we have to keep non-reentrant lock.
1430
+ # TODO: Remove this before next major version (7.0.0)
1431
+ self._lock = threading.Lock()
1432
+
1423
1433
  self.reset()
1424
1434
 
1425
1435
  def __repr__(self) -> (str, str):
@@ -1502,7 +1512,7 @@ class ConnectionPool:
1502
1512
  @deprecated_args(
1503
1513
  args_to_warn=["*"],
1504
1514
  reason="Use get_connection() without args instead",
1505
- version="5.0.3",
1515
+ version="5.3.0",
1506
1516
  )
1507
1517
  def get_connection(self, command_name=None, *keys, **options) -> "Connection":
1508
1518
  "Get a connection from the pool"
@@ -1611,7 +1621,7 @@ class ConnectionPool:
1611
1621
  """Close the pool, disconnecting all connections"""
1612
1622
  self.disconnect()
1613
1623
 
1614
- def set_retry(self, retry: "Retry") -> None:
1624
+ def set_retry(self, retry: Retry) -> None:
1615
1625
  self.connection_kwargs.update({"retry": retry})
1616
1626
  for conn in self._available_connections:
1617
1627
  conn.retry = retry
@@ -1730,7 +1740,7 @@ class BlockingConnectionPool(ConnectionPool):
1730
1740
  @deprecated_args(
1731
1741
  args_to_warn=["*"],
1732
1742
  reason="Use get_connection() without args instead",
1733
- version="5.0.3",
1743
+ version="5.3.0",
1734
1744
  )
1735
1745
  def get_connection(self, command_name=None, *keys, **options):
1736
1746
  """
redis/exceptions.py CHANGED
@@ -221,3 +221,21 @@ class SlotNotCoveredError(RedisClusterException):
221
221
 
222
222
 
223
223
  class MaxConnectionsError(ConnectionError): ...
224
+
225
+
226
+ class CrossSlotTransactionError(RedisClusterException):
227
+ """
228
+ Raised when a transaction or watch is triggered in a pipeline
229
+ and not all keys or all commands belong to the same slot.
230
+ """
231
+
232
+ pass
233
+
234
+
235
+ class InvalidPipelineStack(RedisClusterException):
236
+ """
237
+ Raised on unexpected response length on pipelines. This is
238
+ most likely a handling error on the stack.
239
+ """
240
+
241
+ pass
redis/retry.py CHANGED
@@ -34,6 +34,19 @@ class Retry:
34
34
  self._retries = retries
35
35
  self._supported_errors = supported_errors
36
36
 
37
+ 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
+ )
46
+
47
+ def __hash__(self) -> int:
48
+ return hash((self._backoff, self._retries, frozenset(self._supported_errors)))
49
+
37
50
  def update_supported_errors(
38
51
  self, specified_errors: Iterable[Type[Exception]]
39
52
  ) -> None:
@@ -44,6 +57,18 @@ class Retry:
44
57
  set(self._supported_errors + tuple(specified_errors))
45
58
  )
46
59
 
60
+ def get_retries(self) -> int:
61
+ """
62
+ Get the number of retries.
63
+ """
64
+ return self._retries
65
+
66
+ def update_retries(self, value: int) -> None:
67
+ """
68
+ Set the number of retries.
69
+ """
70
+ self._retries = value
71
+
47
72
  def call_with_retry(
48
73
  self,
49
74
  do: Callable[[], T],
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
@@ -12,9 +12,12 @@ try:
12
12
  import hiredis # noqa
13
13
 
14
14
  # Only support Hiredis >= 3.0:
15
- HIREDIS_AVAILABLE = int(hiredis.__version__.split(".")[0]) >= 3
15
+ hiredis_version = hiredis.__version__.split(".")
16
+ HIREDIS_AVAILABLE = int(hiredis_version[0]) > 3 or (
17
+ int(hiredis_version[0]) == 3 and int(hiredis_version[1]) >= 2
18
+ )
16
19
  if not HIREDIS_AVAILABLE:
17
- raise ImportError("hiredis package should be >= 3.0.0")
20
+ raise ImportError("hiredis package should be >= 3.2.0")
18
21
  except ImportError:
19
22
  HIREDIS_AVAILABLE = False
20
23
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: redis
3
- Version: 6.0.0b2
3
+ Version: 6.2.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,12 +26,12 @@ 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
- Requires-Dist: pyjwt~=2.9.0; extra == 'jwt'
34
+ Requires-Dist: pyjwt>=2.9.0; extra == 'jwt'
36
35
  Provides-Extra: ocsp
37
36
  Requires-Dist: cryptography>=36.0.1; extra == 'ocsp'
38
37
  Requires-Dist: pyopenssl>=20.0.1; extra == 'ocsp'
@@ -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?
@@ -72,12 +71,17 @@ The Python interface to the Redis key-value store.
72
71
 
73
72
  ## Installation
74
73
 
75
- Start a redis via docker:
74
+ Start a redis via docker (for Redis versions >= 8.0):
76
75
 
77
76
  ``` bash
78
- docker run -p 6379:6379 -it redis/redis-stack:latest
77
+ docker run -p 6379:6379 -it redis:latest
79
78
  ```
80
79
 
80
+ Start a redis via docker (for Redis versions < 8.0):
81
+
82
+ ``` bash
83
+ docker run -p 6379:6379 -it redis/redis-stack:latest
84
+
81
85
  To install redis-py, simply:
82
86
 
83
87
  ``` bash
@@ -95,7 +99,7 @@ Looking for a high-level library to handle object mapping? See [redis-om-python]
95
99
 
96
100
  ## Supported Redis Versions
97
101
 
98
- The most recent version of this library supports redis version [7.2](https://github.com/redis/redis/blob/7.2/00-RELEASENOTES), [7.4](https://github.com/redis/redis/blob/7.4/00-RELEASENOTES) and [8.0](https://github.com/redis/redis/blob/8.0/00-RELEASENOTES).
102
+ The most recent version of this library supports Redis version [7.2](https://github.com/redis/redis/blob/7.2/00-RELEASENOTES), [7.4](https://github.com/redis/redis/blob/7.4/00-RELEASENOTES) and [8.0](https://github.com/redis/redis/blob/8.0/00-RELEASENOTES).
99
103
 
100
104
  The table below highlights version compatibility of the most-recent library versions and redis versions.
101
105
 
@@ -196,8 +200,8 @@ The following example shows how to utilize [Redis Pub/Sub](https://redis.io/docs
196
200
 
197
201
  ### Redis’ search and query capabilities default dialect
198
202
 
199
- Release 6.0.0 introduces a client-side default dialect for Redis’ search and query capabilities.
200
- By default, the client now overrides the server-side dialect with version 2, automatically appending *DIALECT 2* to commands like *FT.AGGREGATE* and *FT.SEARCH*.
203
+ Release 6.0.0 introduces a client-side default dialect for Redis’ search and query capabilities.
204
+ By default, the client now overrides the server-side dialect with version 2, automatically appending *DIALECT 2* to commands like *FT.AGGREGATE* and *FT.SEARCH*.
201
205
 
202
206
  **Important**: Be aware that the query dialect may impact the results returned. If needed, you can revert to a different dialect version by configuring the client accordingly.
203
207
 
@@ -245,4 +249,4 @@ Special thanks to:
245
249
  system.
246
250
  - Paul Hubbard for initial packaging support.
247
251
 
248
- [![Redis](./docs/_static/logo-redis.svg)](https://redis.io)
252
+ [![Redis](./docs/_static/logo-redis.svg)](https://redis.io)
@@ -1,35 +1,35 @@
1
- redis/__init__.py,sha256=HqUOIkvNCUIXIazHsZTzgQFUuEF8ThizLYnusJ69ubs,1824
2
- redis/backoff.py,sha256=d22h74LEatJiFd_5o8HvFW3biFBotYOFZHddHt45ydc,3663
1
+ redis/__init__.py,sha256=h5BepEwJtNeHNFaMJ0VdpbtFFTC8QcY5s9wqAnYG8TE,2060
2
+ redis/backoff.py,sha256=2zR-ik5enJDsC2n2AWmE3ALSONgDLtyO4k096ZT6Txo,5275
3
3
  redis/cache.py,sha256=68rJDNogvNwgdgBel6zSX9QziL11qsKIMhmvQvHvznM,9549
4
- redis/client.py,sha256=36anNE36mK76rerheyoLmGiiRW91KcXkoLEnc-2oKB4,62276
5
- redis/cluster.py,sha256=ABMagl5AEHbCzlesI9AdzPFnIc-Ihb_DhPskyn5UG_I,98798
6
- redis/connection.py,sha256=Nx8n88ATiViym85Jlgkh2ETkShs303Wmwa8OP5KKYlI,66599
4
+ redis/client.py,sha256=BrYjhRBWw7Sw3LKPNbdW0UzaQsd-y-wPR70SMgDTeEc,62758
5
+ redis/cluster.py,sha256=_Pi_u8U9meq-WcTHV0j4u0lgOQVqmALj37wU1qekWcE,123762
6
+ redis/connection.py,sha256=z1m1-maULRuw4KeiuKXmzL_DtFxcXiqMbKFJm_3V7ao,66905
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=wWrzT28g_P7PMISyP2zUsYd4oFBUycSD1L5ln2_pD7o,5216
10
+ redis/exceptions.py,sha256=46H-asqIaZ65Gc-voGzP7S39JtxdICGdHzdsT6LSMJE,5617
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=JiIDxeD890vgi_me8pwypO1LixwhU0Fv3A5NEay8SAY,2206
14
+ redis/retry.py,sha256=qJPRTARm3TYQPRNnzyjUUjGohbwtMz5KoDphCtHJ44Y,2902
15
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
16
+ redis/typing.py,sha256=z5JQjGkNzejEzb2y7TXct7tS5yzAfLQod9o37Mh1_Ug,1953
17
+ redis/utils.py,sha256=q7tQJs6Tj5M91QypOwZtGnFXs2Bcji3eTt9VEwLYOeA,8386
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
22
  redis/_parsers/helpers.py,sha256=X5wkGDtuzseeCz23_t3FJpzy1ltIvh7zO1uD3cypiOs,29184
23
- redis/_parsers/hiredis.py,sha256=qL1iCkWlxI63PiP99u_MY5-V6zKaesW2fD-IMNtc0QI,8189
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=jHtL1LYJegJ_LiNTsjzIvS-kZyNR58jZ_YV4cRfwuN0,11127
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=DHeSpWCjdMjhmq-d9-STRCIhKzjRNI4ISnwfczPs1ws,61651
29
- redis/asyncio/cluster.py,sha256=Nd6yG23Alv2kXz7Ffv4Fyp989b2l4zRJeJKD9xaMRIA,66987
30
- redis/asyncio/connection.py,sha256=6GFT5CJvTRTIAzYd6SxvLs6QtLcYUZhkQazwWUOjQvg,48875
28
+ redis/asyncio/client.py,sha256=6a5-txYcRMtObkb7Bfi08MKQQY01oy5NKpHAlfhIFNM,61905
29
+ redis/asyncio/cluster.py,sha256=LNEXjBJKr9M13jGnN52BQgYX6PbojCcxT_Jix9W2k0Y,90121
30
+ redis/asyncio/connection.py,sha256=32MXfAoa5bOj2rNw-8YKJad6kpDmcOBNz2qsZd4Ty6Q,48828
31
31
  redis/asyncio/lock.py,sha256=GxgV6EsyKpMjh74KtaOPxh4fNPuwApz6Th46qhvrAws,12801
32
- redis/asyncio/retry.py,sha256=SnPPOlo5gcyIFtkC4DY7HFvmDgUaILsJ3DeHioogdB8,2219
32
+ redis/asyncio/retry.py,sha256=8carxJLme2f0frB9Z0wU3mHqKzwqzGAGb2TMEtaaMvo,2482
33
33
  redis/asyncio/sentinel.py,sha256=H7N_hvdATojwY06aH1AawFV-05AImqtOSAq0xKElbbk,14636
34
34
  redis/asyncio/utils.py,sha256=31xFzXczDgSRyf6hSjiwue1eDQ_XlP_OJdp5dKxW_aE,718
35
35
  redis/auth/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -39,22 +39,22 @@ 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=dw1iVparHVoWBivdRNuEQXHNwP7_8cTJ-yj1uFZeDC4,238478
43
- redis/commands/helpers.py,sha256=f1BDIVgfjyE8xTyTjcVH_vffaNTSd6r1ScN_CcJFbmk,2950
44
- redis/commands/redismodules.py,sha256=H3lHeyWO-KrOmNn0dilebQyiHRCflED4tgXuswWpSGs,2143
42
+ redis/commands/core.py,sha256=lIi3DUP2kPdBC_RXrSTcUpjI_ORL9nKck9YayWIF_Pc,238242
43
+ redis/commands/helpers.py,sha256=VCoPdBMCr4wxdWBw1EB9R7ZBbQM0exAG1kws4XwsCII,3318
44
+ redis/commands/redismodules.py,sha256=-kLM4RBklDhNh-MXCra81ZTSstIQ-ulRab6v0dYUTdA,2573
45
45
  redis/commands/sentinel.py,sha256=hRcIQ9x9nEkdcCsJzo6Ves6vk-3tsfQqfJTT_v3oLY0,4110
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
49
- redis/commands/json/__init__.py,sha256=llpDQz2kBNnJyfQfuh0-2oY-knMb6gAS0ADtPmaTKsM,4854
49
+ redis/commands/json/__init__.py,sha256=bznXhLYR652rfLfLp8cz0ZN0Yr8IRx4FgON_tq9_2Io,4845
50
50
  redis/commands/json/_util.py,sha256=b_VQTh10FyLl8BtREfJfDagOJCyd6wTQQs8g63pi5GI,116
51
- redis/commands/json/commands.py,sha256=8CRierNqK_VfFoaa9s0rr28uZmqs7nQaAuz4qo0UYZY,15747
51
+ redis/commands/json/commands.py,sha256=ih8upnxeOpjPZXNfqeFBYxiCN2Cmyv8UGu3AlQnT6JQ,15723
52
52
  redis/commands/json/decoders.py,sha256=a_IoMV_wgeJyUifD4P6HTcM9s6FhricwmzQcZRmc-Gw,1411
53
53
  redis/commands/json/path.py,sha256=0zaO6_q_FVMk1Bkhkb7Wcr8AF2Tfr69VhkKy1IBVhpA,393
54
54
  redis/commands/search/__init__.py,sha256=happQFVF0j7P87p7LQsUK5AK0kuem9cA-xvVRdQWpos,5744
55
55
  redis/commands/search/_util.py,sha256=9Mp72OO5Ib5UbfN7uXb-iB7hQCm1jQLV90ms2P9XSGU,219
56
56
  redis/commands/search/aggregation.py,sha256=CcZSZyquLWLrcSblwgt-bSyMvm-TQS9B7N8QI_ahCBU,11582
57
- redis/commands/search/commands.py,sha256=U7NZY_s8LDMBRVO9Es2-9P1loIZJ7og4qx3TUgnDOiw,38285
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
60
  redis/commands/search/field.py,sha256=ZWHYTtrLi-zZojohqXoidfllxP0SiadBW6hnGkBw7mM,5891
@@ -65,14 +65,14 @@ redis/commands/search/querystring.py,sha256=dE577kOqkCErNgO-IXI4xFVHI8kQE-JiH5ZR
65
65
  redis/commands/search/reducers.py,sha256=Scceylx8BjyqS-TJOdhNW63n6tecL9ojt4U5Sqho5UY,4220
66
66
  redis/commands/search/result.py,sha256=iuqmwOeCNo_7N4a_YxxDzVdOTpbwfF1T2uuq5sTqzMo,2624
67
67
  redis/commands/search/suggestion.py,sha256=V_re6suDCoNc0ETn_P1t51FeK4pCamPwxZRxCY8jscE,1612
68
- redis/commands/timeseries/__init__.py,sha256=gkz6wshEzzQQryBOnrAqqQzttS-AHfXmuN_H1J38EbM,3459
68
+ redis/commands/timeseries/__init__.py,sha256=k492_xE_lBD0cVSX82TWBiNxOWuDDrrVZUjINi3LZSc,3450
69
69
  redis/commands/timeseries/commands.py,sha256=8Z2BEyP23qTYCJR_e9zdG11yWmIDwGBMO2PJNLtK2BA,47147
70
70
  redis/commands/timeseries/info.py,sha256=meZYdu7IV9KaUWMKZs9qW4vo3Q9MwhdY-EBtKQzls5o,3223
71
71
  redis/commands/timeseries/utils.py,sha256=NLwSOS5Dz9N8dYQSzEyBIvrItOWwfQ0xgDj8un6x3dU,1319
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.0.0b2.dist-info/METADATA,sha256=-hyuUYoQOMznsT5hBjAPVD60AIAwWL6nCiJp1yWBgmE,10510
76
- redis-6.0.0b2.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
77
- redis-6.0.0b2.dist-info/licenses/LICENSE,sha256=pXslClvwPXr-VbdAYzE_Ktt7ANVGwKsUmok5gzP-PMg,1074
78
- redis-6.0.0b2.dist-info/RECORD,,
75
+ redis-6.2.0.dist-info/METADATA,sha256=nU7-kjJL_I8KHMRNFmLBeS9tWPwTPOw2_oQ8dEBfSPM,10783
76
+ redis-6.2.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
77
+ redis-6.2.0.dist-info/licenses/LICENSE,sha256=pXslClvwPXr-VbdAYzE_Ktt7ANVGwKsUmok5gzP-PMg,1074
78
+ redis-6.2.0.dist-info/RECORD,,
File without changes