from __future__ import annotations from abc import ABC, abstractmethod from typing import TYPE_CHECKING, Any, Mapping from ..handler import APIHandler from ..request import Request from ..response import Response if TYPE_CHECKING: from src.logger import BoundLogger __all__ = ["Middleware"] class Middleware(ABC): def __init__(self, handler: APIHandler | "Middleware", debug: bool): self.handler = handler self.debug = debug self.__apispec__: Mapping[str, Any] = handler.__apispec__ def __call__(self, request: Request, *, logger: "BoundLogger", **match_info) -> Response: return self.handle(request, logger=logger, **match_info) @abstractmethod def handle(self, request: Request, *, logger: "BoundLogger", **match_info) -> Response: pass