Files
cadSet/CADDesigner-Code/bootstrap_env.py
T
2026-07-22 19:38:36 +08:00

53 lines
1.4 KiB
Python

from __future__ import annotations
import os
from pathlib import Path
from dotenv import load_dotenv
PROJECT_ROOT = Path(__file__).resolve().parent
PROJECT_ENV_FILE = PROJECT_ROOT / ".env"
_RUNTIME_PATH_DEFAULTS = {
"CONTEXT_DIR": Path("data/contexts"),
"SKETCH_DIR": Path("data/sketches"),
"LOG_DIR": Path("agent_logs"),
}
def _workspace_runtime_path(path_value: str | Path) -> str:
"""Resolve runtime output paths into the project workspace."""
path = Path(path_value).expanduser()
if path.is_absolute():
return str(path)
parts = path.parts
if parts and parts[0] == "workspace":
return str((PROJECT_ROOT / path).resolve())
return str((PROJECT_ROOT / "workspace" / path).resolve())
def _normalize_runtime_path_env() -> None:
"""Keep runtime data, sketch, and log directories out of the repository root."""
for env_name, default_relative_path in _RUNTIME_PATH_DEFAULTS.items():
raw_value = os.getenv(env_name)
os.environ[env_name] = _workspace_runtime_path(
raw_value if raw_value else default_relative_path
)
def load_project_env() -> None:
"""Load the project .env before importing libraries that snapshot env at import time."""
load_dotenv(PROJECT_ENV_FILE, override=False)
_normalize_runtime_path_env()
load_project_env()
__all__ = ["load_project_env", "PROJECT_ROOT", "PROJECT_ENV_FILE"]