aiogram-bot-template/utils/db/redis/consts.py
2020-10-02 14:11:00 +03:00

55 lines
1.5 KiB
Python

import asyncio
from typing import Optional
import aioredis
from data import config
data_pool: Optional[aioredis.Redis] = None
async def create_pools():
global data_pool
data_pool = await aioredis.create_redis_pool(**config.redis, db=1)
class BaseRedis:
def __init__(self, host: str, port: int = 6379, db: int = 0, password: str = ''):
self.host = host
self.port = port
self.db = db
self.password = password
self._redis: Optional[aioredis.Redis] = None
@property
def closed(self):
return not self._redis or self._redis.closed
async def connect(self):
if self.closed:
self._redis = await aioredis.create_redis_pool((self.host, self.port), db=self.db, password=self.password,
timeout=10, encoding='utf8')
async def disconnect(self):
if not self.closed:
self._redis.close()
await self._redis.wait_closed()
@property
def redis(self) -> aioredis.Redis:
if self.closed:
if not self._redis:
try:
await self.connect()
except asyncio.TimeoutError:
raise TimeoutError('Redis connection timeout')
else:
return self._redis
else:
raise RuntimeError("Redis connection is not opened")
return self._redis
asyncio.get_event_loop().run_until_complete(create_pools())