import abc from typing import TYPE_CHECKING, Generic, TypeVar RequestT = TypeVar("RequestT") ResponseT = TypeVar("ResponseT") class Handler(Generic[RequestT, ResponseT], abc.ABC): if not TYPE_CHECKING: @abc.abstractmethod async def handle(self, request: RequestT) -> ResponseT: pass async def __call__(self, request: RequestT) -> ResponseT: return await self.handle(request)