Spaces:
Sleeping
Sleeping
File size: 1,873 Bytes
5850885 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | """Repo-local `.env` loading and typed env readers."""
from __future__ import annotations
import os
from pathlib import Path
from dotenv import load_dotenv
_REPO_ROOT = Path(__file__).resolve().parent.parent
DOTENV_PATH = _REPO_ROOT / ".env"
# Load the repo-local .env once so server and training defaults stay in
# sync when the user edits a single file and restarts the relevant
# process.
load_dotenv(DOTENV_PATH)
def env_str(name: str, default: str) -> str:
value = os.environ.get(name)
return default if value is None or not value.strip() else value.strip()
def env_int(
name: str, default: int, *, min_value: int | None = None, max_value: int | None = None
) -> int:
raw = os.environ.get(name)
if raw is None or not raw.strip():
value = default
else:
try:
value = int(raw)
except ValueError as exc:
raise ValueError(f"{name} must be an integer") from exc
if min_value is not None and value < min_value:
raise ValueError(f"{name} must be >= {min_value}")
if max_value is not None and value > max_value:
raise ValueError(f"{name} must be <= {max_value}")
return value
def env_float(
name: str,
default: float,
*,
min_value: float | None = None,
max_value: float | None = None,
) -> float:
raw = os.environ.get(name)
if raw is None or not raw.strip():
value = default
else:
try:
value = float(raw)
except ValueError as exc:
raise ValueError(f"{name} must be a float") from exc
if min_value is not None and value < min_value:
raise ValueError(f"{name} must be >= {min_value}")
if max_value is not None and value > max_value:
raise ValueError(f"{name} must be <= {max_value}")
return value
__all__ = ["DOTENV_PATH", "env_float", "env_int", "env_str"]
|