Spaces:
Sleeping
Sleeping
| """Load local env files without overriding externally injected runtime env vars.""" | |
| import logging | |
| import os | |
| from pathlib import Path | |
| from dotenv import dotenv_values, load_dotenv | |
| logger = logging.getLogger(__name__) | |
| _PROJECT_ROOT = Path(__file__).resolve().parent | |
| _RUNTIME_ENV_KEYS = ( | |
| "ENV_FILE", | |
| "HOST", | |
| "PORT", | |
| "DEBUG", | |
| "ENV_BASE_URL", | |
| "ADMIN_API_KEY", | |
| "PUBLIC_GRADER_DETAILS", | |
| "COOKIE_SECURE", | |
| "HTTP_SESSION_TIMEOUT_S", | |
| "CORS_ALLOW_ORIGINS", | |
| "MAX_HTTP_SESSIONS", | |
| "MAX_WS_SESSIONS", | |
| "API_KEY", | |
| "HF_TOKEN", | |
| "MODEL_NAME", | |
| "API_BASE_URL", | |
| ) | |
| def _has_external_runtime_config() -> bool: | |
| return any(bool(os.getenv(key, "").strip()) for key in _RUNTIME_ENV_KEYS) | |
| def _resolve_env_file(env_file_name: str) -> Path: | |
| env_path = (_PROJECT_ROOT / env_file_name).resolve() | |
| try: | |
| env_path.relative_to(_PROJECT_ROOT) | |
| except ValueError as exc: | |
| raise ValueError( | |
| f"ENV_FILE '{env_file_name}' must resolve inside the project root." | |
| ) from exc | |
| return env_path | |
| def load_env() -> None: | |
| """Read repo-root .env to locate the active secondary env file.""" | |
| dot_env = _PROJECT_ROOT / ".env" | |
| if not dot_env.exists(): | |
| if _has_external_runtime_config(): | |
| logger.debug( | |
| ".env not found at %s — assuming runtime env vars were injected externally", | |
| dot_env, | |
| ) | |
| return | |
| logger.warning( | |
| ".env not found at %s — local runs expect it to define ENV_FILE for the active env file", | |
| dot_env, | |
| ) | |
| return | |
| load_dotenv(dot_env, override=False) | |
| env_file_name = str( | |
| (dotenv_values(dot_env).get("ENV_FILE") or os.getenv("ENV_FILE") or "") | |
| ).strip() | |
| if not env_file_name: | |
| logger.debug(".env did not specify ENV_FILE — no secondary file loaded") | |
| return | |
| try: | |
| env_file = _resolve_env_file(env_file_name) | |
| except ValueError as exc: | |
| logger.warning("%s", exc) | |
| return | |
| if not env_file.exists(): | |
| logger.warning("ENV_FILE '%s' not found at %s", env_file_name, env_file) | |
| return | |
| load_dotenv(env_file, override=False) | |
| logger.debug("Loaded environment variables from %s", env_file) | |