| from __future__ import annotations |
|
|
| import json |
| from pathlib import Path |
|
|
| from backend.models import SpaceItem |
|
|
|
|
| ROOT_DIR = Path(__file__).resolve().parents[1] |
| DATA_DIR = ROOT_DIR / "data" |
|
|
|
|
| def _ensure_parent(path: Path) -> None: |
| path.parent.mkdir(parents=True, exist_ok=True) |
|
|
|
|
| def load_spaces_cache(path: str = "data/spaces_cache.json") -> list[SpaceItem]: |
| cache_path = Path(path) |
| if not cache_path.exists(): |
| return [] |
| try: |
| payload = json.loads(cache_path.read_text(encoding="utf-8")) |
| except Exception: |
| return [] |
| if not isinstance(payload, list): |
| return [] |
| return [SpaceItem.from_dict(item) for item in payload if isinstance(item, dict)] |
|
|
|
|
| def save_spaces_cache(spaces: list[SpaceItem], path: str = "data/spaces_cache.json") -> None: |
| cache_path = Path(path) |
| _ensure_parent(cache_path) |
| cache_path.write_text( |
| json.dumps([space.to_dict() for space in spaces], indent=2, ensure_ascii=False), |
| encoding="utf-8", |
| ) |
|
|
|
|
| def load_sample_spaces(path: str = "data/sample_spaces.json") -> list[SpaceItem]: |
| sample_path = Path(path) |
| if not sample_path.exists(): |
| return [] |
| try: |
| payload = json.loads(sample_path.read_text(encoding="utf-8")) |
| except Exception: |
| return [] |
| if not isinstance(payload, list): |
| return [] |
| return [SpaceItem.from_dict(item) for item in payload if isinstance(item, dict)] |
|
|
|
|