from abc import ABC, abstractmethod from typing import Any, Awaitable, Callable, Dict, TypeVar from aiogram.types import TelegramObject T = TypeVar("T") class BaseMiddleware(ABC): """ Generic middleware class """ @abstractmethod async def __call__( self, handler: Callable[[TelegramObject, Dict[str, Any]], Awaitable[Any]], event: TelegramObject, data: Dict[str, Any], ) -> Any: # pragma: no cover """ Execute middleware :param handler: Wrapped handler in middlewares chain :param event: Incoming event (Subclass of :class:`aiogram.types.base.TelegramObject`) :param data: Contextual data. Will be mapped to handler arguments :return: :class:`Any` """ pass