20 lines
712 B
Python
20 lines
712 B
Python
from aiogram import BaseMiddleware
|
|
from sqlalchemy.ext.asyncio import async_sessionmaker, create_async_engine
|
|
|
|
from config import DATABASE_URL
|
|
|
|
|
|
class SessionMiddleware(BaseMiddleware):
|
|
def __init__(self, sessionmaker=None) -> None:
|
|
super().__init__()
|
|
if sessionmaker is None:
|
|
engine = create_async_engine(DATABASE_URL, pool_size=20, max_overflow=0)
|
|
self.sessionmaker = async_sessionmaker(engine, expire_on_commit=False)
|
|
else:
|
|
self.sessionmaker = sessionmaker
|
|
|
|
async def __call__(self, handler, event, data):
|
|
async with self.sessionmaker() as session:
|
|
data["session"] = session
|
|
return await handler(event, data)
|