fix latin-1 errors
This commit is contained in:
18
app/main.py
18
app/main.py
@@ -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
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user