From ed49bb17b9e93a1406ab51f7dca5906661863627 Mon Sep 17 00:00:00 2001 From: Stas Medvedev Date: Wed, 12 Jun 2024 16:05:12 +0300 Subject: refactore utils refactore html about, client_geo --- app/main.py | 18 ++++++++++++------ app/utils.py | 32 -------------------------------- 2 files changed, 12 insertions(+), 38 deletions(-) delete mode 100644 app/utils.py (limited to 'app') diff --git a/app/main.py b/app/main.py index 7cf756c..59e7a8b 100644 --- a/app/main.py +++ b/app/main.py @@ -5,8 +5,7 @@ from fastapi.responses import HTMLResponse from fastapi.staticfiles import StaticFiles from starlette.templating import Jinja2Templates -from app.utils import get_avatar_urls, get_client_geo -from app.logging import logger +from utils import get_avatar_urls, get_client_geo templates = Jinja2Templates(directory="templates") @@ -17,13 +16,20 @@ app.mount("/static", StaticFiles(directory="static"), name="static") @app.get("/", response_class=HTMLResponse) async def index( request: Request, - client_geo: Annotated[dict, Depends(get_client_geo)], avatar_urls: Annotated[list[str], Depends(get_avatar_urls)], ): + return templates.TemplateResponse( + "index.html", + {"request": request, "avatar_urls": avatar_urls}, + ) - logger.info(str(dict(request.headers))) +@app.get("/client_geo", response_class=HTMLResponse) +async def client_addr( + request: Request, + client_geo: Annotated[dict, Depends(get_client_geo)], +): return templates.TemplateResponse( - "index.html", - {"request": request, "client_geo": client_geo, "avatar_urls": avatar_urls}, + "partials/client_geo.html", + {"request": request, "client_geo": client_geo}, ) diff --git a/app/utils.py b/app/utils.py deleted file mode 100644 index 22d7058..0000000 --- a/app/utils.py +++ /dev/null @@ -1,32 +0,0 @@ -from pathlib import Path -from typing import Annotated - -from fastapi import Request, Header, Depends -import httpx - - -def get_avatar_urls() -> list[str]: - path = Path("./static") / "avatars" - if not path.exists(): - path.mkdir() - - return sorted([str(jpg_avatar) for jpg_avatar in path.glob("*.jpg")]) - - -def get_client_host( - request: Request, x_real_ip: Annotated[str | None, Header()] = None -) -> str: - if x_real_ip: - return x_real_ip - return request.client.host - - -async def get_client_geo(client_host: Annotated[str, Depends(get_client_host)]) -> dict: - async with httpx.AsyncClient() as client: - response = await client.get( - # использование https платная опция сервиса, инфо тут https://members.ip-api.com/ - url="http://ip-api.com/json/{}".format(client_host), - params={"lang": "ru"}, - ) - data = response.json() - return data -- cgit v1.2.3