fastapi

Форк
0
39 строк · 1.0 Кб
1
import time
2
from typing import Callable
3

4
from fastapi import APIRouter, FastAPI, Request, Response
5
from fastapi.routing import APIRoute
6

7

8
class TimedRoute(APIRoute):
9
    def get_route_handler(self) -> Callable:
10
        original_route_handler = super().get_route_handler()
11

12
        async def custom_route_handler(request: Request) -> Response:
13
            before = time.time()
14
            response: Response = await original_route_handler(request)
15
            duration = time.time() - before
16
            response.headers["X-Response-Time"] = str(duration)
17
            print(f"route duration: {duration}")
18
            print(f"route response: {response}")
19
            print(f"route response headers: {response.headers}")
20
            return response
21

22
        return custom_route_handler
23

24

25
app = FastAPI()
26
router = APIRouter(route_class=TimedRoute)
27

28

29
@app.get("/")
30
async def not_timed():
31
    return {"message": "Not timed"}
32

33

34
@router.get("/timed")
35
async def timed():
36
    return {"message": "It's the time of my life"}
37

38

39
app.include_router(router)
40

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.