redis 6.0.0b1__py3-none-any.whl → 6.1.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.
@@ -0,0 +1,94 @@
1
+ from redis._parsers.helpers import pairs_to_dict
2
+ from redis.commands.vectorset.commands import CallbacksOptions
3
+
4
+
5
+ def parse_vemb_result(response, **options):
6
+ """
7
+ Handle VEMB result since the command can returning different result
8
+ structures depending on input options and on quantization type of the vector set.
9
+
10
+ Parsing VEMB result into:
11
+ - List[Union[bytes, Union[int, float]]]
12
+ - Dict[str, Union[bytes, str, float]]
13
+ """
14
+ if response is None:
15
+ return response
16
+
17
+ if options.get(CallbacksOptions.RAW.value):
18
+ result = {}
19
+ result["quantization"] = (
20
+ response[0].decode("utf-8")
21
+ if options.get(CallbacksOptions.ALLOW_DECODING.value)
22
+ else response[0]
23
+ )
24
+ result["raw"] = response[1]
25
+ result["l2"] = float(response[2])
26
+ if len(response) > 3:
27
+ result["range"] = float(response[3])
28
+ return result
29
+ else:
30
+ if options.get(CallbacksOptions.RESP3.value):
31
+ return response
32
+
33
+ result = []
34
+ for i in range(len(response)):
35
+ try:
36
+ result.append(int(response[i]))
37
+ except ValueError:
38
+ # if the value is not an integer, it should be a float
39
+ result.append(float(response[i]))
40
+
41
+ return result
42
+
43
+
44
+ def parse_vlinks_result(response, **options):
45
+ """
46
+ Handle VLINKS result since the command can be returning different result
47
+ structures depending on input options.
48
+ Parsing VLINKS result into:
49
+ - List[List[str]]
50
+ - List[Dict[str, Number]]
51
+ """
52
+ if response is None:
53
+ return response
54
+
55
+ if options.get(CallbacksOptions.WITHSCORES.value):
56
+ result = []
57
+ # Redis will return a list of list of strings.
58
+ # This list have to be transformed to list of dicts
59
+ for level_item in response:
60
+ level_data_dict = {}
61
+ for key, value in pairs_to_dict(level_item).items():
62
+ value = float(value)
63
+ level_data_dict[key] = value
64
+ result.append(level_data_dict)
65
+ return result
66
+ else:
67
+ # return the list of elements for each level
68
+ # list of lists
69
+ return response
70
+
71
+
72
+ def parse_vsim_result(response, **options):
73
+ """
74
+ Handle VSIM result since the command can be returning different result
75
+ structures depending on input options.
76
+ Parsing VSIM result into:
77
+ - List[List[str]]
78
+ - List[Dict[str, Number]]
79
+ """
80
+ if response is None:
81
+ return response
82
+
83
+ if options.get(CallbacksOptions.WITHSCORES.value):
84
+ # Redis will return a list of list of pairs.
85
+ # This list have to be transformed to dict
86
+ result_dict = {}
87
+ for key, value in pairs_to_dict(response).items():
88
+ value = float(value)
89
+ result_dict[key] = value
90
+ return result_dict
91
+ else:
92
+ # return the list of elements for each level
93
+ # list of lists
94
+ return response
redis/connection.py CHANGED
@@ -376,6 +376,9 @@ class AbstractConnection(ConnectionInterface):
376
376
 
377
377
  def connect(self):
378
378
  "Connects to the Redis server if not already connected"
379
+ self.connect_check_health(check_health=True)
380
+
381
+ def connect_check_health(self, check_health: bool = True):
379
382
  if self._sock:
380
383
  return
381
384
  try:
@@ -391,7 +394,7 @@ class AbstractConnection(ConnectionInterface):
391
394
  try:
392
395
  if self.redis_connect_func is None:
393
396
  # Use the default on_connect function
394
- self.on_connect()
397
+ self.on_connect_check_health(check_health=check_health)
395
398
  else:
396
399
  # Use the passed function redis_connect_func
397
400
  self.redis_connect_func(self)
@@ -421,6 +424,9 @@ class AbstractConnection(ConnectionInterface):
421
424
  return format_error_message(self._host_error(), exception)
422
425
 
423
426
  def on_connect(self):
427
+ self.on_connect_check_health(check_health=True)
428
+
429
+ def on_connect_check_health(self, check_health: bool = True):
424
430
  "Initialize the connection, authenticate and select a database"
425
431
  self._parser.on_connect(self)
426
432
  parser = self._parser
@@ -479,7 +485,7 @@ class AbstractConnection(ConnectionInterface):
479
485
  # update cluster exception classes
480
486
  self._parser.EXCEPTION_CLASSES = parser.EXCEPTION_CLASSES
481
487
  self._parser.on_connect(self)
482
- self.send_command("HELLO", self.protocol)
488
+ self.send_command("HELLO", self.protocol, check_health=check_health)
483
489
  self.handshake_metadata = self.read_response()
484
490
  if (
485
491
  self.handshake_metadata.get(b"proto") != self.protocol
@@ -489,28 +495,45 @@ class AbstractConnection(ConnectionInterface):
489
495
 
490
496
  # if a client_name is given, set it
491
497
  if self.client_name:
492
- self.send_command("CLIENT", "SETNAME", self.client_name)
498
+ self.send_command(
499
+ "CLIENT",
500
+ "SETNAME",
501
+ self.client_name,
502
+ check_health=check_health,
503
+ )
493
504
  if str_if_bytes(self.read_response()) != "OK":
494
505
  raise ConnectionError("Error setting client name")
495
506
 
496
507
  try:
497
508
  # set the library name and version
498
509
  if self.lib_name:
499
- self.send_command("CLIENT", "SETINFO", "LIB-NAME", self.lib_name)
510
+ self.send_command(
511
+ "CLIENT",
512
+ "SETINFO",
513
+ "LIB-NAME",
514
+ self.lib_name,
515
+ check_health=check_health,
516
+ )
500
517
  self.read_response()
501
518
  except ResponseError:
502
519
  pass
503
520
 
504
521
  try:
505
522
  if self.lib_version:
506
- self.send_command("CLIENT", "SETINFO", "LIB-VER", self.lib_version)
523
+ self.send_command(
524
+ "CLIENT",
525
+ "SETINFO",
526
+ "LIB-VER",
527
+ self.lib_version,
528
+ check_health=check_health,
529
+ )
507
530
  self.read_response()
508
531
  except ResponseError:
509
532
  pass
510
533
 
511
534
  # if a database is specified, switch to it
512
535
  if self.db:
513
- self.send_command("SELECT", self.db)
536
+ self.send_command("SELECT", self.db, check_health=check_health)
514
537
  if str_if_bytes(self.read_response()) != "OK":
515
538
  raise ConnectionError("Invalid Database")
516
539
 
@@ -552,7 +575,7 @@ class AbstractConnection(ConnectionInterface):
552
575
  def send_packed_command(self, command, check_health=True):
553
576
  """Send an already packed command to the Redis server"""
554
577
  if not self._sock:
555
- self.connect()
578
+ self.connect_check_health(check_health=False)
556
579
  # guard against health check recursion
557
580
  if check_health:
558
581
  self.check_health()
@@ -764,6 +787,10 @@ class Connection(AbstractConnection):
764
787
  except OSError as _:
765
788
  err = _
766
789
  if sock is not None:
790
+ try:
791
+ sock.shutdown(socket.SHUT_RDWR) # ensure a clean close
792
+ except OSError:
793
+ pass
767
794
  sock.close()
768
795
 
769
796
  if err is not None:
@@ -1001,7 +1028,7 @@ class SSLConnection(Connection):
1001
1028
  ssl_cert_reqs="required",
1002
1029
  ssl_ca_certs=None,
1003
1030
  ssl_ca_data=None,
1004
- ssl_check_hostname=False,
1031
+ ssl_check_hostname=True,
1005
1032
  ssl_ca_path=None,
1006
1033
  ssl_password=None,
1007
1034
  ssl_validate_ocsp=False,
@@ -1017,7 +1044,7 @@ class SSLConnection(Connection):
1017
1044
  Args:
1018
1045
  ssl_keyfile: Path to an ssl private key. Defaults to None.
1019
1046
  ssl_certfile: Path to an ssl certificate. Defaults to None.
1020
- ssl_cert_reqs: The string value for the SSLContext.verify_mode (none, optional, required). Defaults to "required".
1047
+ ssl_cert_reqs: The string value for the SSLContext.verify_mode (none, optional, required), or an ssl.VerifyMode. Defaults to "required".
1021
1048
  ssl_ca_certs: The path to a file of concatenated CA certificates in PEM format. Defaults to None.
1022
1049
  ssl_ca_data: Either an ASCII string of one or more PEM-encoded certificates or a bytes-like object of DER-encoded certificates.
1023
1050
  ssl_check_hostname: If set, match the hostname during the SSL handshake. Defaults to False.
@@ -1056,7 +1083,9 @@ class SSLConnection(Connection):
1056
1083
  self.ca_certs = ssl_ca_certs
1057
1084
  self.ca_data = ssl_ca_data
1058
1085
  self.ca_path = ssl_ca_path
1059
- self.check_hostname = ssl_check_hostname
1086
+ self.check_hostname = (
1087
+ ssl_check_hostname if self.cert_reqs != ssl.CERT_NONE else False
1088
+ )
1060
1089
  self.certificate_password = ssl_password
1061
1090
  self.ssl_validate_ocsp = ssl_validate_ocsp
1062
1091
  self.ssl_validate_ocsp_stapled = ssl_validate_ocsp_stapled
@@ -1179,6 +1208,10 @@ class UnixDomainSocketConnection(AbstractConnection):
1179
1208
  sock.connect(self.path)
1180
1209
  except OSError:
1181
1210
  # Prevent ResourceWarnings for unclosed sockets.
1211
+ try:
1212
+ sock.shutdown(socket.SHUT_RDWR) # ensure a clean close
1213
+ except OSError:
1214
+ pass
1182
1215
  sock.close()
1183
1216
  raise
1184
1217
  sock.settimeout(self.socket_timeout)
@@ -1471,7 +1504,7 @@ class ConnectionPool:
1471
1504
  @deprecated_args(
1472
1505
  args_to_warn=["*"],
1473
1506
  reason="Use get_connection() without args instead",
1474
- version="5.0.3",
1507
+ version="5.3.0",
1475
1508
  )
1476
1509
  def get_connection(self, command_name=None, *keys, **options) -> "Connection":
1477
1510
  "Get a connection from the pool"
@@ -1580,7 +1613,7 @@ class ConnectionPool:
1580
1613
  """Close the pool, disconnecting all connections"""
1581
1614
  self.disconnect()
1582
1615
 
1583
- def set_retry(self, retry: "Retry") -> None:
1616
+ def set_retry(self, retry: Retry) -> None:
1584
1617
  self.connection_kwargs.update({"retry": retry})
1585
1618
  for conn in self._available_connections:
1586
1619
  conn.retry = retry
@@ -1699,7 +1732,7 @@ class BlockingConnectionPool(ConnectionPool):
1699
1732
  @deprecated_args(
1700
1733
  args_to_warn=["*"],
1701
1734
  reason="Use get_connection() without args instead",
1702
- version="5.0.3",
1735
+ version="5.3.0",
1703
1736
  )
1704
1737
  def get_connection(self, command_name=None, *keys, **options):
1705
1738
  """
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/sentinel.py CHANGED
@@ -349,6 +349,8 @@ class Sentinel(SentinelCommands):
349
349
  ):
350
350
  """
351
351
  Returns a redis client instance for the ``service_name`` master.
352
+ Sentinel client will detect failover and reconnect Redis clients
353
+ automatically.
352
354
 
353
355
  A :py:class:`~redis.sentinel.SentinelConnectionPool` class is
354
356
  used to retrieve the master's address before establishing a new
redis/utils.py CHANGED
@@ -1,5 +1,6 @@
1
1
  import datetime
2
2
  import logging
3
+ import textwrap
3
4
  from contextlib import contextmanager
4
5
  from functools import wraps
5
6
  from typing import Any, Dict, List, Mapping, Optional, Union
@@ -298,3 +299,9 @@ def extract_expire_flags(
298
299
  exp_options.extend(["PXAT", pxat])
299
300
 
300
301
  return exp_options
302
+
303
+
304
+ def truncate_text(txt, max_length=100):
305
+ return textwrap.shorten(
306
+ text=txt, width=max_length, placeholder="...", break_long_words=True
307
+ )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: redis
3
- Version: 6.0.0b1
3
+ Version: 6.1.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
@@ -32,7 +32,7 @@ Requires-Dist: async-timeout>=4.0.3; python_full_version < '3.11.3'
32
32
  Provides-Extra: hiredis
33
33
  Requires-Dist: hiredis>=3.0.0; extra == 'hiredis'
34
34
  Provides-Extra: jwt
35
- Requires-Dist: pyjwt~=2.9.0; extra == 'jwt'
35
+ Requires-Dist: pyjwt>=2.9.0; extra == 'jwt'
36
36
  Provides-Extra: ocsp
37
37
  Requires-Dist: cryptography>=36.0.1; extra == 'ocsp'
38
38
  Requires-Dist: pyopenssl>=20.0.1; extra == 'ocsp'
@@ -72,10 +72,16 @@ The Python interface to the Redis key-value store.
72
72
 
73
73
  ## Installation
74
74
 
75
- Start a redis via docker:
75
+ Start a redis via docker (for Redis versions >= 8.0):
76
76
 
77
77
  ``` bash
78
- docker run -p 6379:6379 -it redis/redis-stack:latest
78
+ $ docker run -p 6379:6379 -it redis:latest
79
+ ```
80
+
81
+ Start a redis via docker (for Redis versions < 8.0):
82
+
83
+ ``` bash
84
+ $ docker run -p 6379:6379 -it redis/redis-stack:latest
79
85
  ```
80
86
 
81
87
  To install redis-py, simply:
@@ -95,7 +101,7 @@ Looking for a high-level library to handle object mapping? See [redis-om-python]
95
101
 
96
102
  ## Supported Redis Versions
97
103
 
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).
104
+ 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
105
 
100
106
  The table below highlights version compatibility of the most-recent library versions and redis versions.
101
107
 
@@ -196,8 +202,8 @@ The following example shows how to utilize [Redis Pub/Sub](https://redis.io/docs
196
202
 
197
203
  ### Redis’ search and query capabilities default dialect
198
204
 
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*.
205
+ Release 6.0.0 introduces a client-side default dialect for Redis’ search and query capabilities.
206
+ 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
207
 
202
208
  **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
209
 
@@ -245,4 +251,4 @@ Special thanks to:
245
251
  system.
246
252
  - Paul Hubbard for initial packaging support.
247
253
 
248
- [![Redis](./docs/_static/logo-redis.svg)](https://redis.io)
254
+ [![Redis](./docs/_static/logo-redis.svg)](https://redis.io)
@@ -1,20 +1,20 @@
1
- redis/__init__.py,sha256=6Q6GUD5kP-_gx4CNPPxvNEXkk9JopqQmfzDW3S4hpyA,1824
2
- redis/backoff.py,sha256=d22h74LEatJiFd_5o8HvFW3biFBotYOFZHddHt45ydc,3663
1
+ redis/__init__.py,sha256=-M8cA3QGivn45l9qd2LkwAid1y9uT_dj_qFBByBDkBI,2088
2
+ redis/backoff.py,sha256=2zR-ik5enJDsC2n2AWmE3ALSONgDLtyO4k096ZT6Txo,5275
3
3
  redis/cache.py,sha256=68rJDNogvNwgdgBel6zSX9QziL11qsKIMhmvQvHvznM,9549
4
- redis/client.py,sha256=sFmv_c0vWpZiepzTPSbpao7aO4A-Wu0bX9bq7lAKiXA,62201
5
- redis/cluster.py,sha256=m7ucCyLYd7J3ke5vxfCy60KCogrE2D_QTVBnwFwuga8,98748
6
- redis/connection.py,sha256=lv9eC3jXSBTUwCqrrFbcQtiyz8rj3c9V4lmAPpc5Zhk,65508
4
+ redis/client.py,sha256=ZGKGLJdRwwgY4w01Ag4MOh6bI8g7pP9NYZn7-OamzOU,62486
5
+ redis/cluster.py,sha256=DvB9HMqXWziH99SJhxyCxBrrGNUWKebkVl-Jyp5avuM,123808
6
+ redis/connection.py,sha256=4ibOCqygzOSn77d-vpLORDg9TZEKV_ME13Kt4kE2ySM,66666
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
15
- redis/sentinel.py,sha256=mDIC_TKbkgRBP0JrLyBs0NkVi6-aWkBIMuqqMWgKFbk,14661
14
+ redis/retry.py,sha256=qJPRTARm3TYQPRNnzyjUUjGohbwtMz5KoDphCtHJ44Y,2902
15
+ redis/sentinel.py,sha256=DBphu6uNp6ZCSaVDSVC8nFhSxG93a12DnzgGWpyeh64,14757
16
16
  redis/typing.py,sha256=k7F_3Vtsexeb7mUl6txlwrY1veGDLEhtcHe9FwIJOOo,2149
17
- redis/utils.py,sha256=i7fltyT2JDVk6zqBZFeYlOcl3tXzJNq8kcDZZ8aXesE,8098
17
+ redis/utils.py,sha256=XD4ySRo9JzLIMMpQY_q9MsxUIdEPee1d7rAq7xhmSwM,8268
18
18
  redis/_parsers/__init__.py,sha256=qkfgV2X9iyvQAvbLdSelwgz0dCk9SGAosCvuZC9-qDc,550
19
19
  redis/_parsers/base.py,sha256=WtCbM2CaOgHk7uxwWXA2KXDlZqfYA1EJrVX_NvdOZNk,7801
20
20
  redis/_parsers/commands.py,sha256=pmR4hl4u93UvCmeDgePHFc6pWDr4slrKEvCsdMmtj_M,11052
@@ -22,15 +22,15 @@ redis/_parsers/encoders.py,sha256=X0jvTp-E4TZUlZxV5LJJ88TuVrF1vly5tuC0xjxGaSc,17
22
22
  redis/_parsers/helpers.py,sha256=X5wkGDtuzseeCz23_t3FJpzy1ltIvh7zO1uD3cypiOs,29184
23
23
  redis/_parsers/hiredis.py,sha256=qL1iCkWlxI63PiP99u_MY5-V6zKaesW2fD-IMNtc0QI,8189
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=JgLDeryCAqx75ghM78mAvxumzWBMEWupmFpaRoL6Xqo,11129
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=-U9sPfD2TD5jaW_fKOlcVzPKzYLshOnocRrFv74dRw8,61525
29
- redis/asyncio/cluster.py,sha256=Kb6xptqeiSpal6PH3KItJpfyFLjrZJ0Y3BoClDQ4kCc,66868
30
- redis/asyncio/connection.py,sha256=UI6CQX1TQz8yW5yqa-iv96tHn7fkuOOs13sdLglsr3Y,48061
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=TpqWKA-MSiK1P0xCMivp438YCZY1CeOKfec6vH9txU4,48943
31
31
  redis/asyncio/lock.py,sha256=GxgV6EsyKpMjh74KtaOPxh4fNPuwApz6Th46qhvrAws,12801
32
- redis/asyncio/retry.py,sha256=SnPPOlo5gcyIFtkC4DY7HFvmDgUaILsJ3DeHioogdB8,2219
33
- redis/asyncio/sentinel.py,sha256=HS5UbVlvrGuOcvQoFBHDXvf2YkYjUnKEhkxS_RG-oRk,14540
32
+ redis/asyncio/retry.py,sha256=8carxJLme2f0frB9Z0wU3mHqKzwqzGAGb2TMEtaaMvo,2482
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
36
36
  redis/auth/err.py,sha256=WYkbuDIzwp1S-eAvsya6QMlO6g9QIXbzMITOsTWX0xk,694
@@ -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=Ca_OhsXzLov3NTaSjIJvRGxzYmePKbdRxowrEbdh91w,238477
43
- redis/commands/helpers.py,sha256=f1BDIVgfjyE8xTyTjcVH_vffaNTSd6r1ScN_CcJFbmk,2950
44
- redis/commands/redismodules.py,sha256=y9gxuqY7PmUjpeKLzjQFcN_gZ2IVs36jxq7sSnvG9Nc,1966
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,11 +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
- redis-6.0.0b1.dist-info/METADATA,sha256=RRAjsLblR6FuHuafiPdggI22QVT943Bq439D5zAARhk,10510
73
- redis-6.0.0b1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
74
- redis-6.0.0b1.dist-info/licenses/LICENSE,sha256=pXslClvwPXr-VbdAYzE_Ktt7ANVGwKsUmok5gzP-PMg,1074
75
- redis-6.0.0b1.dist-info/RECORD,,
72
+ redis/commands/vectorset/__init__.py,sha256=_fM0UdYjuzs8YWIUjQGH9QX5FwI0So8_D-5ALWWrWFc,1322
73
+ redis/commands/vectorset/commands.py,sha256=7CvQNFvkXuG3XPhHJ82y_oBYJwewRFz84aEi3OCH4Rw,12495
74
+ redis/commands/vectorset/utils.py,sha256=N-x0URyg76XC39CNfBym6FkFCVgm5NthzWKBnc2H0Xc,2981
75
+ redis-6.1.0.dist-info/METADATA,sha256=RJYbOKZYAVABc_B3-eouMHIHk7v-6gL8c01wl_N7Mkc,10644
76
+ redis-6.1.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
77
+ redis-6.1.0.dist-info/licenses/LICENSE,sha256=pXslClvwPXr-VbdAYzE_Ktt7ANVGwKsUmok5gzP-PMg,1074
78
+ redis-6.1.0.dist-info/RECORD,,
File without changes