refactor: refactored working with redis connections

This commit is contained in:
Forden 2020-08-15 15:39:39 +03:00
parent ea907d0bf2
commit 1a5b4d0e63
3 changed files with 43 additions and 10 deletions

5
bot.py
View File

@ -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())

View File

@ -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'
}

View File

@ -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())