fix latin-1 errors

This commit is contained in:
Mateusz Gruszczyński
2025-10-24 20:22:34 +02:00
parent c2eb7c765d
commit c75ad0b564
2 changed files with 43 additions and 8 deletions

View File

@@ -11,14 +11,28 @@ app.include_router(router)
async def add_geo_headers(request, call_next):
import unicodedata
from starlette.responses import Response # tylko dla typu
def _ascii(s: str) -> str:
try:
s.encode("latin-1")
return s
except UnicodeEncodeError:
return unicodedata.normalize("NFKD", s).encode("ascii", "ignore").decode("ascii") or "?"
ip = get_client_ip(request)
geo = get_geo()
data = geo.lookup(ip)
response: Response = await call_next(request)
for k, v in geo_headers(data).items():
response.headers[k] = v
for k, v in (geo_headers(data) or {}).items():
ks = _ascii(str(k))
vs = _ascii(str(v))
# gwarancja, że przejdzie przez kodowanie nagłówków Starlette
response.headers[ks] = vs
return response