diff --git a/bot.py b/bot.py index 6d66703..5d216ea 100644 --- a/bot.py +++ b/bot.py @@ -11,7 +11,8 @@ from data import config # noinspection PyUnusedLocal async def on_startup(app: web.Application): - import middlewares, filters + import middlewares + import filters import handlers middlewares.setup(dp) filters.setup(dp) @@ -46,7 +47,7 @@ async def init() -> web.Application: if __name__ == '__main__': bot = Bot(config.BOT_TOKEN, parse_mode=ParseMode.HTML, validate_token=True) - storage = RedisStorage2(**config.aiogram_redis) + storage = RedisStorage2(**config.redis) dp = Dispatcher(bot, storage=storage) web.run_app(init()) diff --git a/data/config.py b/data/config.py index 8d1d218..b08f110 100644 --- a/data/config.py +++ b/data/config.py @@ -2,7 +2,7 @@ from pathlib import Path BOT_TOKEN = '' BASE_URL = 'https://example.com' # Webhook domain -WEBHOOK_PATH = f'/webhook/bot/{BOT_TOKEN}' +WEBHOOK_PATH = f'/tg/webhooks/bot/{BOT_TOKEN}' WEBHOOK_URL = f'{BASE_URL}{WEBHOOK_PATH}' LOGS_BASE_PATH = str(Path(__file__).parent.parent / 'logs') @@ -23,13 +23,7 @@ mysql_info = { 'port': 3306, } -aiogram_redis = { +redis = { 'host': ip['redis'], 'password': '' } - -redis = { - 'address': (ip['redis'], 6379), - 'password': '', - 'encoding': 'utf8' -} diff --git a/utils/redis/consts.py b/utils/redis/consts.py index dd7c801..8b9da3a 100644 --- a/utils/redis/consts.py +++ b/utils/redis/consts.py @@ -13,4 +13,42 @@ async def create_pools(): 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())