mirror of
https://github.com/usestrix/strix.git
synced 2026-08-16 17:27:26 +02:00
41 lines
1.1 KiB
Python
41 lines
1.1 KiB
Python
"""Run directory path helpers."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from pathlib import Path
|
|
|
|
|
|
RUNS_DIR_NAME = "strix_runs"
|
|
RUNTIME_STATE_DIR_NAME = ".state"
|
|
RUN_RECORD_FILENAME = "run.json"
|
|
|
|
|
|
def run_dir_for(run_name: str, *, cwd: Path | None = None) -> Path:
|
|
base = cwd or Path.cwd()
|
|
return base / RUNS_DIR_NAME / run_name
|
|
|
|
|
|
def runtime_state_dir(run_dir: Path) -> Path:
|
|
return run_dir / RUNTIME_STATE_DIR_NAME
|
|
|
|
|
|
def run_record_path(run_dir: Path) -> Path:
|
|
return run_dir / RUN_RECORD_FILENAME
|
|
|
|
|
|
def runs_base_dir(*, cwd: Path | None = None) -> Path:
|
|
base = cwd or Path.cwd()
|
|
return base / RUNS_DIR_NAME
|
|
|
|
|
|
def latest_run_dir(*, cwd: Path | None = None) -> Path | None:
|
|
base = runs_base_dir(cwd=cwd)
|
|
if not base.is_dir():
|
|
return None
|
|
candidates = [child for child in base.iterdir() if run_record_path(child).is_file()]
|
|
if not candidates:
|
|
return None
|
|
# run.json is rewritten on status/end changes, so its mtime tracks activity
|
|
# more reliably than the directory mtime (a live run sorts to the top).
|
|
return max(candidates, key=lambda child: run_record_path(child).stat().st_mtime)
|