from __future__ import annotations from pathlib import Path import os from dotenv import dotenv_values REPO_ROOT = Path(__file__).resolve().parent def load_env(service: str | None = None) -> None: root_env = REPO_ROOT / ".env" root_values: dict[str, str] = {} service_values: dict[str, str] = {} if root_env.exists(): root_values = {k: v for k, v in dotenv_values(root_env).items() if v is not None} if service: service_env = REPO_ROOT / service / ".env" if service_env.exists(): service_values = {k: v for k, v in dotenv_values(service_env).items() if v is not None} # Precedence: explicit env > service env > root env merged = {**root_values, **service_values} for key, value in merged.items(): os.environ.setdefault(key, value)