feat(conductor): Implement configurable paths and mark track 'Conductor Path Configuration' as complete
This commit is contained in:
49
src/paths.py
Normal file
49
src/paths.py
Normal file
@@ -0,0 +1,49 @@
|
||||
from pathlib import Path
|
||||
import os
|
||||
import tomllib
|
||||
from typing import Optional
|
||||
|
||||
_RESOLVED: dict[str, Path] = {}
|
||||
|
||||
def get_config_path() -> Path:
|
||||
return Path(os.environ.get("SLOP_CONFIG", "config.toml"))
|
||||
|
||||
def _resolve_path(env_var: str, config_key: str, default: str) -> Path:
|
||||
if env_var in os.environ:
|
||||
return Path(os.environ[env_var])
|
||||
try:
|
||||
with open(get_config_path(), "rb") as f:
|
||||
cfg = tomllib.load(f)
|
||||
if "paths" in cfg and config_key in cfg["paths"]:
|
||||
return Path(cfg["paths"][config_key])
|
||||
except FileNotFoundError:
|
||||
pass
|
||||
return Path(default)
|
||||
|
||||
def get_conductor_dir() -> Path:
|
||||
if "conductor_dir" not in _RESOLVED:
|
||||
_RESOLVED["conductor_dir"] = _resolve_path("SLOP_CONDUCTOR_DIR", "conductor_dir", "conductor")
|
||||
return _RESOLVED["conductor_dir"]
|
||||
|
||||
def get_logs_dir() -> Path:
|
||||
if "logs_dir" not in _RESOLVED:
|
||||
_RESOLVED["logs_dir"] = _resolve_path("SLOP_LOGS_DIR", "logs_dir", "logs/sessions")
|
||||
return _RESOLVED["logs_dir"]
|
||||
|
||||
def get_scripts_dir() -> Path:
|
||||
if "scripts_dir" not in _RESOLVED:
|
||||
_RESOLVED["scripts_dir"] = _resolve_path("SLOP_SCRIPTS_DIR", "scripts_dir", "scripts/generated")
|
||||
return _RESOLVED["scripts_dir"]
|
||||
|
||||
def get_tracks_dir() -> Path:
|
||||
return get_conductor_dir() / "tracks"
|
||||
|
||||
def get_track_state_dir(track_id: str) -> Path:
|
||||
return get_tracks_dir() / track_id
|
||||
|
||||
def get_archive_dir() -> Path:
|
||||
return get_conductor_dir() / "archive"
|
||||
|
||||
def reset_resolved() -> None:
|
||||
"""For testing only - clear cached resolutions."""
|
||||
_RESOLVED.clear()
|
||||
Reference in New Issue
Block a user