first commit
This commit is contained in:
@@ -0,0 +1,52 @@
|
||||
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"]
|
||||
Reference in New Issue
Block a user