Spaces:
Sleeping
Sleeping
| """Utility helpers for data persistence and shared logic.""" | |
| import json | |
| from pathlib import Path | |
| from typing import Any | |
| DATA_DIR = Path(__file__).resolve().parent.parent / "data" | |
| DATA_DIR.mkdir(exist_ok=True) | |
| def _file_path(filename: str) -> Path: | |
| """Return path to a data file inside DATA_DIR.""" | |
| return DATA_DIR / filename | |
| def ensure_data_file(filename: str, default: Any) -> None: | |
| """Create a data file with *default* content if it does not exist.""" | |
| fp = _file_path(filename) | |
| if not fp.exists(): | |
| save_data(default, filename) | |
| def load_data(filename: str, default: Any): | |
| """Load JSON data; create with *default* if missing.""" | |
| ensure_data_file(filename, default) | |
| with open(_file_path(filename), "r", encoding="utf-8") as f: | |
| return json.load(f) | |
| def save_data(data: Any, filename: str) -> None: | |
| """Write JSON data atomically.""" | |
| tmp = _file_path(filename).with_suffix(".tmp") | |
| with open(tmp, "w", encoding="utf-8") as f: | |
| json.dump(data, f, indent=2, ensure_ascii=False) | |
| tmp.replace(_file_path(filename)) | |