from pathlib import Path from typing import Annotated from datetime import datetime import csv from fastapi import FastAPI, HTTPException, Header, Depends from pydantic_settings import BaseSettings from pydantic import BaseModel from starlette.status import HTTP_401_UNAUTHORIZED class Settings(BaseSettings): token: str log_file: Path = Path("out") / "log.csv" SETTINGS = Settings() # pyright: ignore[reportCallIssue] def valid_token(authorization: Annotated[str, Header()]): if SETTINGS.token not in authorization: raise HTTPException(HTTP_401_UNAUTHORIZED) app = FastAPI() @app.get("/") async def index(): return "works" class Log(BaseModel): a0: int a1: int a2: int @app.post("/log") async def post_log(log: Log, _: Annotated[None, Depends(valid_token)]): now = datetime.now() with open(SETTINGS.log_file, "a") as f: w = csv.writer(f) w.writerow([now, log.a0, log.a1, log.a2]) # pyright: ignore[reportUnknownMemberType] return "ok"