fastapi
39 строк · 1.0 Кб
1import time2from typing import Callable3
4from fastapi import APIRouter, FastAPI, Request, Response5from fastapi.routing import APIRoute6
7
8class TimedRoute(APIRoute):9def get_route_handler(self) -> Callable:10original_route_handler = super().get_route_handler()11
12async def custom_route_handler(request: Request) -> Response:13before = time.time()14response: Response = await original_route_handler(request)15duration = time.time() - before16response.headers["X-Response-Time"] = str(duration)17print(f"route duration: {duration}")18print(f"route response: {response}")19print(f"route response headers: {response.headers}")20return response21
22return custom_route_handler23
24
25app = FastAPI()26router = APIRouter(route_class=TimedRoute)27
28
29@app.get("/")30async def not_timed():31return {"message": "Not timed"}32
33
34@router.get("/timed")35async def timed():36return {"message": "It's the time of my life"}37
38
39app.include_router(router)40