我非常喜欢Python中的returns库,并且我想更多地使用它.我现在有一个小问题.目前,我有一个使用redis客户端并获取与键对应的值的函数,如下所示:
from redis import Redis
from returns.context import RequiresContext
def get_value(key: str) -> RequiresContext[str, Redis]:
def inner(client: Redis) -> str:
value = client.get(key)
return value.decode("utf-8")
return RequiresContext(inner)
显然,该功能就像一种魅力:
with Redis(
host=redis_host,
port=redis_port,
password=redis_password,
) as redis_client:
value = get_value(key="my-key")(redis_client)
print("value = ", value)
现在,我想使用该代码的Incio吊坠,即使用redis.asyncio.Redis
.不幸的是,在这种情况下,事情看起来变得有点复杂.我可能应该从RequiresContext
切换到RequiresContextFutureResultE
,但我找不到工作解决方案.这是我能想出的最好的代码:
async def get_value(key: str) -> RequiresContextFutureResultE[str, Redis]:
async def inner(client: Redis) -> FutureResultE[str]:
value = await client.get(key)
return FutureResult.from_value(value.decode("utf-8"))
return RequiresContextFutureResultE(inner)
当我这样运行它时:
async def main():
async with Redis(
host="localhost",
port=6379,
password="902nks291",
db=15,
) as redis_client:
rcfr = get_value(key="user-id")
value = await rcfr(redis_client)
print("value: ", value)
asyncio.run(main())
我得到的错误是rcfr
不是可调用的.有人可以帮助我弄清楚如何修复我的代码,使其以我想要的方式工作吗?