from pathlib import Path from typing import Annotated from fastapi import Request, Header, Depends import httpx from . import restricted_exec __all__ = [ 'restricted_exec', 'get_avatar_urls', 'get_client_host', 'get_client_geo' ] 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