Files
TwitchDropsMiner/src/config/paths.py
2025-10-19 17:08:18 +11:00

52 lines
1.6 KiB
Python

"""Path-related configuration and environment detection."""
from __future__ import annotations
from pathlib import Path
from typing import Any
def _merge_vars(base_vars: dict[str, Any], vars: dict[str, Any]) -> None:
"""
Merge variables recursively.
NOTE: This modifies base_vars in place.
"""
for k, v in vars.items():
if k not in base_vars:
base_vars[k] = v
elif isinstance(v, dict):
if isinstance(base_vars[k], dict):
_merge_vars(base_vars[k], v)
elif base_vars[k] is Ellipsis:
# unspecified base, use the passed in var
base_vars[k] = v
else:
raise RuntimeError(f"Var is a dict, base is not: '{k}'")
elif isinstance(base_vars[k], dict):
raise RuntimeError(f"Base is a dict, var is not: '{k}'")
else:
# simple overwrite
base_vars[k] = v
# ensure none of the vars are ellipsis (unset value)
for k, v in base_vars.items():
if v is Ellipsis:
raise RuntimeError(f"Unspecified variable: '{k}'")
# Base Paths - environment-specific resolution
PROJECT_ROOT = Path(__file__).resolve().parent.parent.parent
DATA_DIR = PROJECT_ROOT / "data"
# Ensure data directory exists
if not DATA_DIR.exists():
DATA_DIR.mkdir(parents=True, exist_ok=True)
# Translations path
# NOTE: These don't have to be available to the end-user, so the path points to the internal dir
LANG_PATH = PROJECT_ROOT / "lang"
# Persistent storage paths - use DATA_DIR for Docker compatibility
COOKIES_PATH = DATA_DIR / "cookies.jar"
SETTINGS_PATH = DATA_DIR / "settings.json"