From bea557127d2beb03cd92266b17bf3933676b539c Mon Sep 17 00:00:00 2001 From: Michiel Scholten Date: Wed, 24 Sep 2025 12:04:50 +0200 Subject: [PATCH] Use unidecode for accent-less word comparison; latest requirements --- requirements-server.txt | 42 +++++++++++++++++++++-------------------- requirements.in | 5 ++++- requirements.txt | 42 +++++++++++++++++++++-------------------- src/alfagok/main.py | 8 ++++---- 4 files changed, 52 insertions(+), 45 deletions(-) diff --git a/requirements-server.txt b/requirements-server.txt index aff6352..a10177d 100644 --- a/requirements-server.txt +++ b/requirements-server.txt @@ -2,27 +2,27 @@ # uv pip compile requirements-server.in annotated-types==0.7.0 # via pydantic -anyio==4.9.0 +anyio==4.11.0 # via # httpx # starlette # watchfiles -certifi==2025.4.26 +certifi==2025.8.3 # via # httpcore # httpx -click==8.1.8 +click==8.3.0 # via # rich-toolkit # typer # uvicorn -dnspython==2.7.0 +dnspython==2.8.0 # via email-validator -email-validator==2.2.0 +email-validator==2.3.0 # via fastapi -fastapi==0.115.12 +fastapi==0.117.1 # via -r requirements.in -fastapi-cli==0.0.7 +fastapi-cli==0.0.13 # via fastapi gunicorn==23.0.0 # via -r requirements-server.in @@ -43,7 +43,7 @@ idna==3.10 # httpx jinja2==3.1.6 # via fastapi -markdown-it-py==3.0.0 +markdown-it-py==4.0.0 # via rich markupsafe==3.0.2 # via jinja2 @@ -51,17 +51,17 @@ mdurl==0.1.2 # via markdown-it-py packaging==25.0 # via gunicorn -pydantic==2.11.4 +pydantic==2.11.9 # via # fastapi # pydantic-settings pydantic-core==2.33.2 # via pydantic -pydantic-settings==2.9.1 +pydantic-settings==2.10.1 # via -r requirements.in -pygments==2.19.1 +pygments==2.19.2 # via rich -python-dotenv==1.1.0 +python-dotenv==1.1.1 # via # pydantic-settings # uvicorn @@ -69,21 +69,21 @@ python-multipart==0.0.20 # via fastapi pyyaml==6.0.2 # via uvicorn -rich==14.0.0 +rich==14.1.0 # via # rich-toolkit # typer -rich-toolkit==0.14.6 +rich-toolkit==0.15.1 # via fastapi-cli shellingham==1.5.4 # via typer sniffio==1.3.1 # via anyio -starlette==0.46.2 +starlette==0.48.0 # via fastapi -typer==0.15.4 +typer==0.19.2 # via fastapi-cli -typing-extensions==4.13.2 +typing-extensions==4.15.0 # via # fastapi # pydantic @@ -91,17 +91,19 @@ typing-extensions==4.13.2 # rich-toolkit # typer # typing-inspection -typing-inspection==0.4.0 +typing-inspection==0.4.1 # via # pydantic # pydantic-settings -uvicorn==0.34.2 +unidecode==1.4.0 + # via -r requirements.in +uvicorn==0.37.0 # via # fastapi # fastapi-cli uvloop==0.21.0 # via uvicorn -watchfiles==1.0.5 +watchfiles==1.1.0 # via uvicorn websockets==15.0.1 # via uvicorn diff --git a/requirements.in b/requirements.in index 0b952f5..7753242 100644 --- a/requirements.in +++ b/requirements.in @@ -1,2 +1,5 @@ -fastapi[standard] +fastapi[standard-no-fastapi-cloud-cli] pydantic-settings + +# Normalise strings so we can compare without accents +unidecode diff --git a/requirements.txt b/requirements.txt index d5e0e8c..c8595de 100644 --- a/requirements.txt +++ b/requirements.txt @@ -2,27 +2,27 @@ # uv pip compile requirements.in annotated-types==0.7.0 # via pydantic -anyio==4.9.0 +anyio==4.11.0 # via # httpx # starlette # watchfiles -certifi==2025.4.26 +certifi==2025.8.3 # via # httpcore # httpx -click==8.1.8 +click==8.3.0 # via # rich-toolkit # typer # uvicorn -dnspython==2.7.0 +dnspython==2.8.0 # via email-validator -email-validator==2.2.0 +email-validator==2.3.0 # via fastapi -fastapi==0.115.12 +fastapi==0.117.1 # via -r requirements.in -fastapi-cli==0.0.7 +fastapi-cli==0.0.13 # via fastapi h11==0.16.0 # via @@ -41,23 +41,23 @@ idna==3.10 # httpx jinja2==3.1.6 # via fastapi -markdown-it-py==3.0.0 +markdown-it-py==4.0.0 # via rich markupsafe==3.0.2 # via jinja2 mdurl==0.1.2 # via markdown-it-py -pydantic==2.11.4 +pydantic==2.11.9 # via # fastapi # pydantic-settings pydantic-core==2.33.2 # via pydantic -pydantic-settings==2.9.1 +pydantic-settings==2.10.1 # via -r requirements.in -pygments==2.19.1 +pygments==2.19.2 # via rich -python-dotenv==1.1.0 +python-dotenv==1.1.1 # via # pydantic-settings # uvicorn @@ -65,21 +65,21 @@ python-multipart==0.0.20 # via fastapi pyyaml==6.0.2 # via uvicorn -rich==14.0.0 +rich==14.1.0 # via # rich-toolkit # typer -rich-toolkit==0.14.6 +rich-toolkit==0.15.1 # via fastapi-cli shellingham==1.5.4 # via typer sniffio==1.3.1 # via anyio -starlette==0.46.2 +starlette==0.48.0 # via fastapi -typer==0.15.4 +typer==0.19.2 # via fastapi-cli -typing-extensions==4.13.2 +typing-extensions==4.15.0 # via # fastapi # pydantic @@ -87,17 +87,19 @@ typing-extensions==4.13.2 # rich-toolkit # typer # typing-inspection -typing-inspection==0.4.0 +typing-inspection==0.4.1 # via # pydantic # pydantic-settings -uvicorn==0.34.2 +unidecode==1.4.0 + # via -r requirements.in +uvicorn==0.37.0 # via # fastapi # fastapi-cli uvloop==0.21.0 # via uvicorn -watchfiles==1.0.5 +watchfiles==1.1.0 # via uvicorn websockets==15.0.1 # via uvicorn diff --git a/src/alfagok/main.py b/src/alfagok/main.py index bcf27a5..74f68e3 100644 --- a/src/alfagok/main.py +++ b/src/alfagok/main.py @@ -10,9 +10,9 @@ from fastapi.staticfiles import StaticFiles from fastapi.templating import Jinja2Templates from pydantic import DirectoryPath, FilePath from pydantic_settings import BaseSettings +from unidecode import unidecode - -VERSION = '0.3.2' +VERSION = '0.3.3' AMSTERDAM = ZoneInfo('Europe/Amsterdam') @@ -100,9 +100,9 @@ def handle_guess(word: Union[str, None] = None): return {'error': 'Word not in dictionary'} hint = 'it' - if word_of_the_day < word: + if word_of_the_day < unidecode(word): hint = 'before' - if word_of_the_day > word: + if word_of_the_day > unidecode(word): hint = 'after' logger.info('Guess: %s for game %d (%s), goal is %s', word, current_game_id, word_of_the_day, hint)