Есть класс с базовым функционалом выполнения запросов к редис (через aioredis)
class RedisService:
def __init__(self, r_url) -> str:
self.redis = r_url
async def create_connection(self):
return await aioredis.create_redis(self.redis)
async def _get(self, key) -> str:
try:
return await self.create_connection().get(key, encoding='utf-8')
finally:
await self._close()
async def _set(self, key, value) -> None:
await self.create_connection().set(key, value)
await self._close()
async def _close(self) -> None:
self.create_connection.close()
await self._redis.wait_closed()
И хендлер для проверки работоспособности
@router.post('/perform')
async def index():
key = 'test'
value = 'test'
value = await RedisService(r_url)._set(key, value)
return {'result': value}
Сейчас при запуске хендлера возникает ошибка
await self.create_connection.set(key, value)
AttributeError: 'coroutine' object has no attribute 'set'
Я предполагаю что причина в том что корутина должна выполняться в евент лупе
asyncio.run(some coroutine)
но вот как его прикрутить не могу догнать, хотя возможно не только в этом дело.
В доках это выглядит как то так
import asyncio
import aioredis
async def main():
# Redis client bound to single connection (no auto reconnection).
redis = await aioredis.create_redis(
'redis://localhost')
await redis.set('my-key', 'value')
val = await redis.get('my-key')
print(val)
# gracefully closing underlying connection
redis.close()
await redis.wait_closed()
await redis.wait_closed()
if __name__ == '__main__':
asyncio.run(main())