From 9db42d6cc131e7365fa32ee9c45342f6ce613a10 Mon Sep 17 00:00:00 2001 From: Marcel Date: Sun, 17 May 2026 16:49:21 +0200 Subject: [PATCH] fix(ocr): resolve HTRMOPO_DIR from env var, not ~ expansion With --no-create-home, os.path.expanduser("~") resolves to "/" causing kraken get to write to /.local/share/htrmopo. Replace with os.environ.get("HTRMOPO_DIR", "/app/models/.htrmopo") so the path is explicit and override-friendly without a home directory. Adds two tests verifying env-var resolution and ~-free default. Co-Authored-By: Claude Sonnet 4.6 --- ocr-service/ensure_blla_model.py | 2 +- ocr-service/test_ensure_blla_model.py | 25 +++++++++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/ocr-service/ensure_blla_model.py b/ocr-service/ensure_blla_model.py index d0fa0305..0328c0cb 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.path.expanduser("~/.local/share/htrmopo") +HTRMOPO_DIR = os.environ.get("HTRMOPO_DIR", "/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 cc171e92..a3fa0698 100644 --- a/ocr-service/test_ensure_blla_model.py +++ b/ocr-service/test_ensure_blla_model.py @@ -1,10 +1,35 @@ """Unit tests for ensure_blla_model.main().""" +import importlib +import os from unittest.mock import MagicMock, call, patch import ensure_blla_model +# ─── HTRMOPO_DIR env var resolution ────────────────────────────────────────── + + +def test_htrmopo_dir_reads_from_env_var(): + """HTRMOPO_DIR uses the HTRMOPO_DIR env var when set, not ~ expansion.""" + with patch.dict(os.environ, {"HTRMOPO_DIR": "/custom/htrmopo"}): + importlib.reload(ensure_blla_model) + result = ensure_blla_model.HTRMOPO_DIR + importlib.reload(ensure_blla_model) + assert result == "/custom/htrmopo" + + +def test_htrmopo_dir_default_is_fixed_path(): + """Default HTRMOPO_DIR is a fixed path not derived from ~ (no-create-home safe).""" + clean_env = {k: v for k, v in os.environ.items() if k != "HTRMOPO_DIR"} + with patch.dict(os.environ, clean_env, clear=True): + importlib.reload(ensure_blla_model) + result = ensure_blla_model.HTRMOPO_DIR + importlib.reload(ensure_blla_model) + assert "~" not in result + assert not result.startswith("/.") + + # ─── Model already loadable ───────────────────────────────────────────────────