SXXXXXXX_PyUCC/pyucc/config/settings.py

64 lines
1.6 KiB
Python

from pathlib import Path
import json
from typing import Dict, Optional
_DEFAULT_PATH = Path.home() / ".pyucc_settings.json"
def _read_file(path: Path) -> Dict:
if not path.exists():
return {}
try:
with path.open("r", encoding="utf-8") as fh:
data = json.load(fh)
if isinstance(data, dict):
return data
except Exception:
return {}
return {}
def _write_file(path: Path, data: Dict) -> None:
path.parent.mkdir(parents=True, exist_ok=True)
with path.open("w", encoding="utf-8") as fh:
json.dump(data, fh, indent=2, ensure_ascii=False)
def load_settings(path: Optional[Path] = None) -> Dict:
p = path or _DEFAULT_PATH
return _read_file(p)
def save_settings(data: Dict, path: Optional[Path] = None) -> None:
p = path or _DEFAULT_PATH
_write_file(p, data)
def get_baseline_dir() -> Optional[str]:
s = load_settings()
return s.get("baseline_dir")
def get_max_keep() -> int:
s = load_settings()
try:
v = int(s.get("max_keep", 5))
except Exception:
v = 5
return v
def get_zip_baselines() -> bool:
"""Get whether to create zip archives for baselines (default: False)."""
s = load_settings()
return s.get("zip_baselines", False)
def set_baseline_settings(baseline_dir: Optional[str], max_keep: int, zip_baselines: bool = False) -> None:
s = load_settings()
if baseline_dir is not None:
s["baseline_dir"] = baseline_dir
s["max_keep"] = int(max_keep)
s["zip_baselines"] = bool(zip_baselines)
save_settings(s)