coredis 5.0.0rc1__py3-none-any.whl → 5.0.1__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.

Potentially problematic release.


This version of coredis might be problematic. Click here for more details.

@@ -1,36 +1,69 @@
1
1
  from __future__ import annotations
2
2
 
3
+ from coredis._json import json
3
4
  from coredis._utils import nativestr
4
5
  from coredis.response._callbacks import ResponseCallback
5
6
  from coredis.response._utils import flat_pairs_to_dict
6
7
  from coredis.response.types import VectorData
7
- from coredis.typing import AnyStr, ResponsePrimitive, StringT
8
+ from coredis.typing import AnyStr, JsonType, ResponsePrimitive, StringT
8
9
 
9
10
 
10
11
  class VSimCallback(
11
12
  ResponseCallback[
12
13
  list[AnyStr],
13
- list[AnyStr] | dict[AnyStr, float],
14
- tuple[AnyStr, ...] | dict[AnyStr, float],
14
+ list[AnyStr] | dict[AnyStr, float | list[float | JsonType]],
15
+ tuple[AnyStr, ...]
16
+ | dict[AnyStr, float]
17
+ | dict[AnyStr, JsonType]
18
+ | dict[AnyStr, tuple[float, JsonType]],
15
19
  ],
16
20
  ):
17
21
  def transform(
18
22
  self,
19
23
  response: list[AnyStr],
20
- ) -> tuple[AnyStr, ...] | dict[AnyStr, float]:
21
- if self.options.get("withscores"):
24
+ ) -> (
25
+ tuple[AnyStr, ...]
26
+ | dict[AnyStr, float]
27
+ | dict[AnyStr, JsonType]
28
+ | dict[AnyStr, tuple[float, JsonType]]
29
+ ):
30
+ withscores, withattribs = self.options.get("withscores"), self.options.get("withattribs")
31
+ if withscores or withattribs:
22
32
  it = iter(response)
23
- return dict(list(zip(it, map(float, it))))
33
+ match withscores, withattribs:
34
+ case True, None | False:
35
+ return dict(list(zip(it, map(float, it))))
36
+ case None | False, True:
37
+ return dict(list(zip(it, map(json.loads, it))))
38
+ case True, True:
39
+ return dict(
40
+ list(zip(it, map(lambda x: (float(x[0]), json.loads(x[1])), zip(it, it))))
41
+ )
24
42
  else:
25
- return tuple(response)
43
+ return self.transform_3(response)
26
44
 
27
45
  def transform_3(
28
46
  self,
29
- response: list[AnyStr] | dict[AnyStr, float],
30
- ) -> tuple[AnyStr, ...] | dict[AnyStr, float]:
31
- if self.options.get("withscores"):
47
+ response: list[AnyStr]
48
+ | dict[AnyStr, float]
49
+ | dict[AnyStr, AnyStr]
50
+ | dict[AnyStr, list[float | AnyStr]],
51
+ ) -> (
52
+ tuple[AnyStr, ...]
53
+ | dict[AnyStr, float]
54
+ | dict[AnyStr, JsonType]
55
+ | dict[AnyStr, tuple[float, JsonType]]
56
+ ):
57
+ withscores, withattribs = self.options.get("withscores"), self.options.get("withattribs")
58
+ if withscores or withattribs:
32
59
  assert isinstance(response, dict)
33
- return response
60
+ match withscores, withattribs:
61
+ case None | False, True:
62
+ return {k: json.loads(v) for k, v in response.items()}
63
+ case True, True:
64
+ return {k: (v[0], json.loads(v[1])) for k, v in response.items()}
65
+ case _:
66
+ return response
34
67
  else:
35
68
  return tuple(response)
36
69
 
coredis/retry.py CHANGED
@@ -6,7 +6,7 @@ from abc import ABC, abstractmethod
6
6
  from functools import wraps
7
7
  from typing import Any
8
8
 
9
- from coredis.typing import Callable, Coroutine, P, R
9
+ from coredis.typing import Awaitable, Callable, P, R
10
10
 
11
11
  logger = logging.getLogger(__name__)
12
12
 
@@ -31,10 +31,10 @@ class RetryPolicy(ABC):
31
31
 
32
32
  async def call_with_retries(
33
33
  self,
34
- func: Callable[..., Coroutine[Any, Any, R]],
35
- before_hook: Callable[..., Coroutine[Any, Any, Any]] | None = None,
36
- failure_hook: Callable[..., Coroutine[Any, Any, None]]
37
- | dict[type[BaseException], Callable[..., Coroutine[Any, Any, None]]]
34
+ func: Callable[..., Awaitable[R]],
35
+ before_hook: Callable[..., Awaitable[Any]] | None = None,
36
+ failure_hook: Callable[..., Awaitable[Any]]
37
+ | dict[type[BaseException], Callable[..., Awaitable[None]]]
38
38
  | None = None,
39
39
  ) -> R:
40
40
  """
@@ -159,12 +159,11 @@ class CompositeRetryPolicy(RetryPolicy):
159
159
 
160
160
  async def call_with_retries(
161
161
  self,
162
- func: Callable[..., Coroutine[Any, Any, R]],
163
- before_hook: Callable[..., Coroutine[Any, Any, Any]] | None = None,
162
+ func: Callable[..., Awaitable[R]],
163
+ before_hook: Callable[..., Awaitable[Any]] | None = None,
164
164
  failure_hook: None
165
165
  | (
166
- Callable[..., Coroutine[Any, Any, None]]
167
- | dict[type[BaseException], Callable[..., Coroutine[Any, Any, None]]]
166
+ Callable[..., Awaitable[Any]] | dict[type[BaseException], Callable[..., Awaitable[Any]]]
168
167
  ) = None,
169
168
  ) -> R:
170
169
  """
@@ -214,15 +213,15 @@ class CompositeRetryPolicy(RetryPolicy):
214
213
 
215
214
  def retryable(
216
215
  policy: RetryPolicy,
217
- failure_hook: Callable[..., Coroutine[Any, Any, None]] | None = None,
218
- ) -> Callable[[Callable[P, Coroutine[Any, Any, R]]], Callable[P, Coroutine[Any, Any, R]]]:
216
+ failure_hook: Callable[..., Awaitable[Any]] | None = None,
217
+ ) -> Callable[[Callable[P, Awaitable[R]]], Callable[P, Awaitable[R]]]:
219
218
  """
220
219
  Decorator to be used to apply a retry policy to a coroutine
221
220
  """
222
221
 
223
222
  def inner(
224
- func: Callable[P, Coroutine[Any, Any, R]],
225
- ) -> Callable[P, Coroutine[Any, Any, R]]:
223
+ func: Callable[P, Awaitable[R]],
224
+ ) -> Callable[P, Awaitable[R]]:
226
225
  @wraps(func)
227
226
  async def _inner(*args: P.args, **kwargs: P.kwargs) -> R:
228
227
  return await policy.call_with_retries(
coredis/sentinel.py CHANGED
@@ -23,7 +23,9 @@ from coredis.typing import (
23
23
  Generic,
24
24
  Iterable,
25
25
  Literal,
26
+ ResponsePrimitive,
26
27
  StringT,
28
+ TypeAdapter,
27
29
  )
28
30
 
29
31
 
@@ -195,6 +197,7 @@ class Sentinel(Generic[AnyStr]):
195
197
  sentinel_kwargs: dict[str, Any] | None = ...,
196
198
  decode_responses: Literal[False] = ...,
197
199
  cache: AbstractCache | None = None,
200
+ type_adapter: TypeAdapter | None = ...,
198
201
  **connection_kwargs: Any,
199
202
  ) -> None: ...
200
203
 
@@ -206,6 +209,7 @@ class Sentinel(Generic[AnyStr]):
206
209
  sentinel_kwargs: dict[str, Any] | None = ...,
207
210
  decode_responses: Literal[True] = ...,
208
211
  cache: AbstractCache | None = None,
212
+ type_adapter: TypeAdapter | None = None,
209
213
  **connection_kwargs: Any,
210
214
  ) -> None: ...
211
215
 
@@ -216,6 +220,7 @@ class Sentinel(Generic[AnyStr]):
216
220
  sentinel_kwargs: dict[str, Any] | None = None,
217
221
  decode_responses: bool = False,
218
222
  cache: AbstractCache | None = None,
223
+ type_adapter: TypeAdapter | None = None,
219
224
  **connection_kwargs: Any,
220
225
  ) -> None:
221
226
  """
@@ -236,6 +241,9 @@ class Sentinel(Generic[AnyStr]):
236
241
  and ``protocol_version`` options specified in :paramref:`connection_kwargs` will be used.
237
242
  :param cache: If provided the cache will be shared between both primaries and replicas
238
243
  returned by this sentinel.
244
+ :param type_adapter: The adapter to use for serializing / deserializing customs types
245
+ when interacting with redis commands. If provided this adapter will be used for both
246
+ primaries and replicas returned by this sentinel.
239
247
  :param connection_kwargs: are keyword arguments that will be used when
240
248
  establishing a connection to a Redis server (i.e. are passed on to the
241
249
  constructor of :class:`Redis` for all primary and replicas).
@@ -260,6 +268,7 @@ class Sentinel(Generic[AnyStr]):
260
268
  self.min_other_sentinels = min_other_sentinels
261
269
  self.connection_kwargs = connection_kwargs
262
270
  self.__cache = cache
271
+ self.__type_adapter = type_adapter
263
272
  self.connection_kwargs["decode_responses"] = self.sentinel_kwargs["decode_responses"] = (
264
273
  decode_responses
265
274
  )
@@ -283,18 +292,18 @@ class Sentinel(Generic[AnyStr]):
283
292
 
284
293
  def __check_primary_state(
285
294
  self,
286
- state: dict[str, int | bool | str],
295
+ state: dict[str, ResponsePrimitive],
287
296
  ) -> bool:
288
297
  if not state["is_master"] or state["is_sdown"] or state["is_odown"]:
289
298
  return False
290
299
 
291
- if int(state["num-other-sentinels"]) < self.min_other_sentinels:
300
+ if int(state["num-other-sentinels"] or 0) < self.min_other_sentinels:
292
301
  return False
293
302
 
294
303
  return True
295
304
 
296
305
  def __filter_replicas(
297
- self, replicas: Iterable[dict[str, str | int | bool]]
306
+ self, replicas: Iterable[dict[str, ResponsePrimitive]]
298
307
  ) -> list[tuple[str, int]]:
299
308
  """Removes replicas that are in an ODOWN or SDOWN state"""
300
309
  replicas_alive: list[tuple[str, int]] = []
@@ -302,7 +311,9 @@ class Sentinel(Generic[AnyStr]):
302
311
  for replica in replicas:
303
312
  if replica["is_odown"] or replica["is_sdown"]:
304
313
  continue
305
- replicas_alive.append((nativestr(replica["ip"]), int(replica["port"])))
314
+ ip, port = replica["ip"], replica["port"]
315
+ assert ip and port
316
+ replicas_alive.append((nativestr(ip), int(port)))
306
317
 
307
318
  return replicas_alive
308
319
 
@@ -329,7 +340,7 @@ class Sentinel(Generic[AnyStr]):
329
340
  self.sentinels[0],
330
341
  )
331
342
 
332
- return nativestr(state["ip"]), int(state["port"])
343
+ return nativestr(state["ip"]), int(state["port"] or -1)
333
344
  raise PrimaryNotFoundError(f"No primary found for {service_name!r}")
334
345
 
335
346
  async def discover_replicas(self, service_name: str) -> list[tuple[str, int]]:
@@ -406,6 +417,7 @@ class Sentinel(Generic[AnyStr]):
406
417
  **connection_kwargs,
407
418
  ),
408
419
  cache=self.__cache,
420
+ type_adapter=self.__type_adapter,
409
421
  )
410
422
 
411
423
  @overload
@@ -461,4 +473,5 @@ class Sentinel(Generic[AnyStr]):
461
473
  **connection_kwargs,
462
474
  ),
463
475
  cache=self.__cache,
476
+ type_adapter=self.__type_adapter,
464
477
  )
coredis/tokens.py CHANGED
@@ -771,6 +771,11 @@ class PureToken(CaseAndEncodingInsensitiveEnum):
771
771
  #: - ``VSIM``
772
772
  TRUTH = b"TRUTH"
773
773
 
774
+ #: Used by:
775
+ #:
776
+ #: - ``VSIM``
777
+ WITHATTRIBS = b"WITHATTRIBS"
778
+
774
779
  #: Used by:
775
780
  #:
776
781
  #: - ``VEMB``
coredis/typing.py CHANGED
@@ -53,8 +53,6 @@ from typing_extensions import (
53
53
 
54
54
  from coredis.config import Config
55
55
 
56
- _runtime_checks = False
57
-
58
56
  RUNTIME_TYPECHECKS = Config.runtime_checks and not TYPE_CHECKING
59
57
 
60
58
  P = ParamSpec("P")
@@ -63,7 +61,7 @@ R = TypeVar("R")
63
61
 
64
62
 
65
63
  def safe_beartype(func: Callable[P, R]) -> Callable[P, R]:
66
- return beartype(func) if RUNTIME_TYPECHECKS else func
64
+ return beartype(func)
67
65
 
68
66
 
69
67
  def add_runtime_checks(func: Callable[P, R]) -> Callable[P, R]:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: coredis
3
- Version: 5.0.0rc1
3
+ Version: 5.0.1
4
4
  Summary: Python async client for Redis key-value store
5
5
  Home-page: https://github.com/alisaifee/coredis
6
6
  Author: Ali-Akber Saifee
@@ -14,7 +14,6 @@ Project-URL: Documentation, https://coredis.readthedocs.org
14
14
  Keywords: Redis,key-value store,asyncio
15
15
  Classifier: Development Status :: 5 - Production/Stable
16
16
  Classifier: Intended Audience :: Developers
17
- Classifier: License :: OSI Approved :: MIT License
18
17
  Classifier: Operating System :: OS Independent
19
18
  Classifier: Programming Language :: Python
20
19
  Classifier: Programming Language :: Python :: 3.10
@@ -80,9 +79,6 @@ coredis is an async redis client with support for redis server, cluster & sentin
80
79
  and the [API Documentation](https://coredis.readthedocs.io/en/latest/api/index.html)
81
80
  for more details.
82
81
 
83
- > **Warning**
84
- > The command API does NOT mirror the official python [redis client](https://github.com/redis/redis-py). For details about the high level differences refer to [Divergence from aredis & redis-py](https://coredis.readthedocs.io/en/latest/history.html#divergence-from-aredis-redis-py)
85
-
86
82
  ______________________________________________________________________
87
83
 
88
84
  <!-- TOC depthFrom:2 depthTo:6 withLinks:1 updateOnSave:1 orderedList:0 -->
@@ -1,12 +1,12 @@
1
1
  coredis/__init__.py,sha256=SMfOaj8prRC4xyBZycECI-uHL8pP6keNZiqqboh6_ik,951
2
2
  coredis/_json.py,sha256=XjrTlG6Up6BjzfIxk-KSU7IhYeD0fLvXdOPpsMZ6Ff8,186
3
3
  coredis/_packer.py,sha256=iXaIKyVJiPiNtB5Hryz4nkjhjLeB-xUWqZdyM7oDpk0,2726
4
- coredis/_protocols.py,sha256=wx2O8JuN1tayprUlxPLtK4jS5p4EYMxKExbLn2JNGyE,1617
4
+ coredis/_protocols.py,sha256=dzn0W-RCxMGQ4xBDop4FV5Ez4dF6i0QDmmDRRazwJNQ,1059
5
5
  coredis/_py_311_typing.py,sha256=QTh0tPRnwd7E39FXlh0RrWqloFWTeidOkfr4mRnp4K8,557
6
6
  coredis/_py_312_typing.py,sha256=zB6scCVDNdSu3YBujf3Hq3rn-i-i8DcsbwbmcT-HrcQ,517
7
7
  coredis/_sidecar.py,sha256=ci3hx7RojTdodMqe_zf07HL-E6DlqSliscENTa3dbzI,4404
8
- coredis/_utils.py,sha256=CWb5T-CUPFX9bozunBCrJIgrTErXydpU2G9uoteiB2E,9998
9
- coredis/_version.py,sha256=rzh24UEmx_s_DgCOvtV-vrrnwKL8kq20sbeuk5w5bJw,500
8
+ coredis/_utils.py,sha256=gf0TvLa4lZCRsNjYB98nV1IIQt3sxuwUSo-yRIg7vp4,10205
9
+ coredis/_version.py,sha256=f3A0WQ-A7fLk9D-rmdWpzTqamBNSUiriXvZIQJPKky8,497
10
10
  coredis/cache.py,sha256=entnV__Bpv4DjqK9BmejuyEgknLBWQnz-Sp8p1CwjQw,26308
11
11
  coredis/config.py,sha256=Ni2uXMNzdfSRDEJl0KxrS78shLszfYM-ZbE7GK_O7Pk,1368
12
12
  coredis/connection.py,sha256=0GbYjcBZizz-1fscoXG3fQRHOvh6c4Flc3yDrMNzJV8,30899
@@ -15,14 +15,14 @@ coredis/credentials.py,sha256=iVSZEyMfd6nEePpVRrx3Ora-EuCCwJ9G9NshEI5Qs2A,1102
15
15
  coredis/exceptions.py,sha256=8P3npdmixnUso9GdcKit6FzXywSWFJhj6EEyiGja8As,8709
16
16
  coredis/globals.py,sha256=R0Ys_wd3v29cMiojSwlyyflA3GK2lFNCjnVL4PMANag,678
17
17
  coredis/parser.py,sha256=9pzxtIOqyj1O91DwKGCMCWf807qsJThDBtD5qslBwkY,11754
18
- coredis/pipeline.py,sha256=SR3zcwOAP37sfEJ7ZljDYbNPt50GpWEtHbu4jyWJkZ0,46046
18
+ coredis/pipeline.py,sha256=_cCyBHTjFHq1K5MOJAlAxBNSiobiKua7H2v1DXjLosA,43613
19
19
  coredis/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
20
- coredis/retry.py,sha256=WG4FA-lG2ksc2EGOnKmAAUwa-LrdxG06SSYUXZlPycA,8350
21
- coredis/sentinel.py,sha256=AE0jzHaaDziroxzR-_x9tmCw954Ui3QJ8Jl8c0GL4m8,16293
20
+ coredis/retry.py,sha256=Ia-dajjrUK8OcSALL7RBz4rinJKuaG5lc0zfOuUa4aE,8204
21
+ coredis/sentinel.py,sha256=ljUrQB23a1fspWlNMi0ExrwpACaBHTSE7RFTY4x542E,16937
22
22
  coredis/speedups.pyi,sha256=cUYJLKVGVgyGisMNUExWnnoLTYleCuH2v3XwTXOwnFM,109
23
23
  coredis/stream.py,sha256=tQStAfamoGr3OTkWLTqxyEV60epVRPBxwaGwPVW6tzc,14935
24
- coredis/tokens.py,sha256=t8a3Rosho77jMD6rUO15A0qw3WoWOJe-CW-z_DunPpA,36586
25
- coredis/typing.py,sha256=m2P1982NIvtAtkTVHhB6DiOglUMvweolEBXq6_5pCKE,20684
24
+ coredis/tokens.py,sha256=LDJbgl2UnrTAF6Iy9xW4OvD4UAMpPaISaJYQ368xVS0,36662
25
+ coredis/typing.py,sha256=0oEm8aP4QkH6z_m3WVf6rhTTCJ6Rby7U2XspZuW4Awk,20627
26
26
  coredis/client/__init__.py,sha256=J4r1pi5r68EwodMV8-eHvzM83tkz2mTlWayKy-JScrg,150
27
27
  coredis/client/basic.py,sha256=kg9k0pMfIuzVCIhnL_wjJxixzh0NW0sEreJi9N_ycSA,46241
28
28
  coredis/client/cluster.py,sha256=EszhB5qxLGZCdEEzmRYKedSMMfr8Vokhf36grdATnwc,50609
@@ -33,13 +33,13 @@ coredis/commands/_validators.py,sha256=yo0I81uMpy7FMvPxMheqdMPved-ujkpaWUs0WpuOP
33
33
  coredis/commands/_wrappers.py,sha256=rw-HF3XxsImRRB0ptK1zrgOyMlRXLyz6wbfViblK5e8,5653
34
34
  coredis/commands/bitfield.py,sha256=aB-m4KoUbGpI4zxzNU0VCfmPt7HGhB5kt4g8KX5CoRo,3405
35
35
  coredis/commands/constants.py,sha256=KZs05uSnn7cg3K723UrqEOGDcClWNAc29EbDPyPk4gQ,30312
36
- coredis/commands/core.py,sha256=UJr6mDLVPM__HPXHTLhOsOpTFoGuLEAS0hUZSZDHVA4,278545
36
+ coredis/commands/core.py,sha256=Fx2BiCK1EOAng6W9VIOnaLlCwpMYLmlNtQlxaUwnGQE,280022
37
37
  coredis/commands/function.py,sha256=mznJds0S09qAAjII8Jw1TjkS8maljAc65QzEtWDhrgk,16301
38
38
  coredis/commands/monitor.py,sha256=Zu_PmUggLkRke5XFTE3cb5-5ocCxhfrKjlm_e00-kvI,5766
39
39
  coredis/commands/pubsub.py,sha256=_svI6BK5F9MIF7DHKmpW1ob7ypN13O9BFDpwSrLBYKs,34371
40
40
  coredis/commands/request.py,sha256=9tMw5q6KdF4y6SyHfcguRe6P7mjArqE8Djk9FSvxKts,3663
41
- coredis/commands/script.py,sha256=Ld6NiOD2ILeOoIQDUMAm6WVA9fZOvQlubS2qCyu40dk,12223
42
- coredis/commands/sentinel.py,sha256=9giNW1QyhRD5SaAkPSgiBFEnm9XnGa2QM6vBQDZEwp0,7789
41
+ coredis/commands/script.py,sha256=6cb_JhaM49-Kjb6iuSTAU0boOFw9CuHIMa5HRnGosJs,12135
42
+ coredis/commands/sentinel.py,sha256=y2t9PO89qs3d5SUCs1Plsgtg-RAqxWBsygXGatsELGI,7818
43
43
  coredis/experimental/__init__.py,sha256=U4S_2y3zgLZVfMenHRaJFBW8yqh2mUBuI291LGQVOJ8,35
44
44
  coredis/modules/__init__.py,sha256=eqWwEYNI-B7Lc19R23n6NQaQoKHmpj8mrtkYBcQ2fCA,2917
45
45
  coredis/modules/autocomplete.py,sha256=ZqT9wcmuP7_FNdQq4ZrYy3Dv_iStVCUc2LUtQ7cyikc,4945
@@ -81,15 +81,15 @@ coredis/response/_callbacks/hash.py,sha256=lDjxEZ_YO36IJJ4JIZaF1I5ZRoeDURxRCYSMV
81
81
  coredis/response/_callbacks/keys.py,sha256=fKfzvN91Wwk2TsJ65tDUWFa2_--SVrOaAj5C-3Tlxqg,1546
82
82
  coredis/response/_callbacks/module.py,sha256=WLJwHw0Kq3X5HafRrGGNBmxB8eCyThqV4YK1tSDg3DU,886
83
83
  coredis/response/_callbacks/script.py,sha256=o_chD_GOj59ObuKvFgMglTheQOFpmOJPjOUBjsAG8C8,3063
84
- coredis/response/_callbacks/sentinel.py,sha256=xwgbztFRuT3TI2_tSWKROlwme977Cg7YoSXj1RY1z0Y,4721
84
+ coredis/response/_callbacks/sentinel.py,sha256=qPoz3K_gb0gQX9YV2_fIuqckX-vTuLnUPaztRjcjDM4,4904
85
85
  coredis/response/_callbacks/server.py,sha256=2bEPZi2nq7X417Ua0qH8vSnawT2TqHl5sc67xnd0pu4,7520
86
86
  coredis/response/_callbacks/sets.py,sha256=aaGh3BF0TkW_jGnpFENipAzWA-R9TgnioKudf_6Dk2w,1310
87
87
  coredis/response/_callbacks/sorted_set.py,sha256=LrqHBMPluR2MufkCoE8y_FRO4_WrfGq5wsdri4Sxkqo,6335
88
88
  coredis/response/_callbacks/streams.py,sha256=vq4C8sidFam32n7rlfUrt1XzkOdmeTtFv0tl0mLRcYA,6241
89
89
  coredis/response/_callbacks/strings.py,sha256=sjHY2JwxHl4ndIl9WhHD48VKuGn39FArE8XnRUparu4,1955
90
- coredis/response/_callbacks/vector_sets.py,sha256=nErA6NvtwObdE8NVirCNeB3nDNw3EkNnQkNdAO72Uq8,3993
91
- coredis-5.0.0rc1.dist-info/licenses/LICENSE,sha256=pTSTkaH3iX2r6C88El9edMoi6r_Og6Wf4b6Zgq-LSOQ,1107
92
- coredis-5.0.0rc1.dist-info/METADATA,sha256=pyll4nXS4RM8mi-mViEP9U2A72Uy4eXLm07gSsDi-98,9119
93
- coredis-5.0.0rc1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
94
- coredis-5.0.0rc1.dist-info/top_level.txt,sha256=PWp3SlvenceLQUL9VJ1_rKwKoi-U9g3KDJS5ws8tOG8,8
95
- coredis-5.0.0rc1.dist-info/RECORD,,
90
+ coredis/response/_callbacks/vector_sets.py,sha256=z1fUPaGjui9f4hVDIPLu6iA3R2EIG-np6hS8ZmCaGOQ,5334
91
+ coredis-5.0.1.dist-info/licenses/LICENSE,sha256=pTSTkaH3iX2r6C88El9edMoi6r_Og6Wf4b6Zgq-LSOQ,1107
92
+ coredis-5.0.1.dist-info/METADATA,sha256=va27ao_ErNx1-Z8ITIdg412gbbswUl9cyzO1j1xe_GY,8768
93
+ coredis-5.0.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
94
+ coredis-5.0.1.dist-info/top_level.txt,sha256=PWp3SlvenceLQUL9VJ1_rKwKoi-U9g3KDJS5ws8tOG8,8
95
+ coredis-5.0.1.dist-info/RECORD,,