mirror of
https://github.com/rangermix/TwitchDropsMiner.git
synced 2026-05-29 16:39:37 +00:00
52 lines
1.6 KiB
Python
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"
|