From bead6f1811de9f9d4b1327a1d4b084d23c51a2f5 Mon Sep 17 00:00:00 2001 From: Marcel Date: Sun, 17 May 2026 18:53:26 +0200 Subject: [PATCH] fix(ocr): handle empty-string HTRMOPO_DIR env var with or-fallback MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit os.environ.get(key, default) returns "" when the key exists but is blank — the default is only used when the key is absent. The or-fallback treats both absence and blank values as "use the default". Co-Authored-By: Claude Sonnet 4.6 --- ocr-service/ensure_blla_model.py | 2 +- ocr-service/test_ensure_blla_model.py | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/ocr-service/ensure_blla_model.py b/ocr-service/ensure_blla_model.py index 0328c0cb..399e8a80 100644 --- a/ocr-service/ensure_blla_model.py +++ b/ocr-service/ensure_blla_model.py @@ -24,7 +24,7 @@ log = logging.getLogger(__name__) BLLA_MODEL_PATH = os.environ.get("BLLA_MODEL_PATH", "/app/models/blla.mlmodel") # DOI for "General segmentation model for print and handwriting" — ketos 7 compatible. BLLA_MODEL_DOI = "10.5281/zenodo.14602569" -HTRMOPO_DIR = os.environ.get("HTRMOPO_DIR", "/app/models/.htrmopo") +HTRMOPO_DIR = os.environ.get("HTRMOPO_DIR") or "/app/models/.htrmopo" def _model_is_loadable(path: str) -> bool: diff --git a/ocr-service/test_ensure_blla_model.py b/ocr-service/test_ensure_blla_model.py index cb5c6f7d..c3c65bd0 100644 --- a/ocr-service/test_ensure_blla_model.py +++ b/ocr-service/test_ensure_blla_model.py @@ -29,6 +29,15 @@ def test_htrmopo_dir_default_is_fixed_path(): assert result == "/app/models/.htrmopo" +def test_htrmopo_dir_falls_back_to_default_when_set_to_empty_string(): + """HTRMOPO_DIR='' must not produce an empty path — get() returns '' for blank env vars.""" + with patch.dict(os.environ, {"HTRMOPO_DIR": ""}): + importlib.reload(ensure_blla_model) + result = ensure_blla_model.HTRMOPO_DIR + importlib.reload(ensure_blla_model) + assert result != "" + + # ─── Model already loadable ───────────────────────────────────────────────────