Source code for corvix.env

"""Environment variable helpers, including Docker secret file support."""

from __future__ import annotations

from os import environ
from pathlib import Path


[docs] def get_env_value(name: str) -> str | None: """Return env var value, supporting `${NAME}_FILE` secret file fallbacks. Resolution order: 1) `${NAME}` if set and non-empty 2) file contents from `${NAME}_FILE` if set and non-empty 3) `None` when neither is provided Raises: ValueError: if both `${NAME}` and `${NAME}_FILE` are set, or if the file path is unreadable. """ direct = environ.get(name) file_path = environ.get(f"{name}_FILE") if direct and file_path: msg = f"Both '{name}' and '{name}_FILE' are set; use only one." raise ValueError(msg) if direct: return direct if not file_path: return None try: return Path(file_path).read_text(encoding="utf-8").strip() except OSError as error: msg = f"Failed to read secret file from '{name}_FILE': {error}" raise ValueError(msg) from error