39 lines
1010 B
Python
39 lines
1010 B
Python
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"
|