runtime_paths.py 1.2 KB
from __future__ import annotations

import os
from pathlib import Path


PROJECT_ROOT = Path(__file__).resolve().parent.parent


def _resolve_var_dir() -> Path:
    raw_value = os.getenv("BETTAFISH_VAR_DIR", "var")
    candidate = Path(raw_value).expanduser()
    if not candidate.is_absolute():
        candidate = PROJECT_ROOT / candidate
    return candidate


VAR_DIR = _resolve_var_dir()

LOGS_DIR = VAR_DIR / "logs"
REPORTS_DIR = VAR_DIR / "reports"
FINAL_REPORTS_DIR = REPORTS_DIR / "final"
ENGINE_REPORTS_DIR = REPORTS_DIR / "engines"
INSIGHT_REPORTS_DIR = ENGINE_REPORTS_DIR / "insight"
MEDIA_REPORTS_DIR = ENGINE_REPORTS_DIR / "media"
QUERY_REPORTS_DIR = ENGINE_REPORTS_DIR / "query"
CRAWLER_DIR = VAR_DIR / "crawler"
CRAWLER_BROWSER_DATA_DIR = CRAWLER_DIR / "browser_data"
DB_DIR = VAR_DIR / "db"
POSTGRES_DATA_DIR = DB_DIR / "postgres"
OUTPUT_DIR = VAR_DIR / "output"

RUNTIME_DIRECTORIES = (
    VAR_DIR,
    LOGS_DIR,
    FINAL_REPORTS_DIR,
    INSIGHT_REPORTS_DIR,
    MEDIA_REPORTS_DIR,
    QUERY_REPORTS_DIR,
    CRAWLER_BROWSER_DATA_DIR,
    POSTGRES_DATA_DIR,
    OUTPUT_DIR,
)


def ensure_runtime_dirs() -> None:
    for directory in RUNTIME_DIRECTORIES:
        directory.mkdir(parents=True, exist_ok=True)