Open
Description
Description
When using redis-vl
with redis-py
, the AsyncRedisCluster.from_url() method raises a TypeError if the cluster=true
setting is passed either via the URL query string or as a keyword argument.
**kwargs: Any
argument was removed in redis.asyncio.RedisCluster.__init__()
function in the following PR: redis/redis-py#2217
Example:
from redis import Redis, RedisCluster
from redis.asyncio import Redis as AsyncRedis
from redis.asyncio.cluster import RedisCluster as AsyncRedisCluster
from redisvl.redis.utils import is_cluster_url
# --- Passing cluster setting via url query
url = 'redis://<user>:<password>@<cluster_host>:6379/?cluster=true'
print(f"Is cluster url? {str(is_cluster_url(url))}") # True
r = Redis.from_url(url) # OK
rc = RedisCluster.from_url(url) # OK
ar = AsyncRedis.from_url(url) # OK
arc = AsyncRedisCluster.from_url(url) # TypeError: RedisCluster.__init__() got an unexpected keyword argument 'cluster'
# --- Passing cluster setting via kwargs
url = 'redis://<user>:<password>@<cluster_host>:6379'
kwargs = { "cluster": True }
print(f"Is cluster url? {str(is_cluster_url(url, **kwargs))}") # True
r = Redis.from_url(url, **kwargs) # OK
rc = RedisCluster.from_url(url, **kwargs) # OK
ar = AsyncRedis.from_url(url, **kwargs) # OK
arc = AsyncRedisCluster.from_url(url, **kwargs) # TypeError: RedisCluster.__init__() got an unexpected keyword argument 'cluster'
Suggested Fix:
Before calling AsyncRedisCluster.from_url()
, the cluster parameter should be stripped from both the URL and kwargs, as those are currently not supported (https://github.com/redis/redis-py/blob/master/redis/asyncio/cluster.py#L263-L310).
This change should be implemented here:
redis-vl-python/redisvl/redis/connection.py
Lines 295 to 296 in cd74f16
It would also make sense to align the
redis.asyncio.RedisClient.__init__()
on the redis-py
repository too with other client implementations that accept **kwargs
and modify/clean them if needed.Metadata
Metadata
Assignees
Labels
No labels