~cytrogen/evi-run

ref: 2edde0448002baf703f5f6c765bc40d4d4d21a0f evi-run/bot/middlewares/database_session.py -rw-r--r-- 856 bytes
2edde044 — Bendy Update I18N/en/txt.ftl & I18N/ru/txt.ftl 5 months ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
from typing import Callable, Awaitable, Dict, Any

from aiogram import BaseMiddleware
from aiogram.types import TelegramObject
from sqlalchemy.ext.asyncio import async_sessionmaker

import database.repositories


class DbSessionMiddleware(BaseMiddleware):
    def __init__(self, session_pool: async_sessionmaker):
        super().__init__()
        self.session_pool = session_pool

    async def __call__(
            self,
            handler: Callable[[TelegramObject, Dict[str, Any]], Awaitable[Any]],
            event: TelegramObject,
            data: Dict[str, Any],
    ) -> Any:

        async with self.session_pool() as session:
            data["user_repo"] = database.repositories.user.UserRepository(session)
            data["utils_repo"] = database.repositories.utils.UtilsRepository(session)
            return await handler(event, data)