from pathlib import Path import json from pydantic import BaseModel class IndexService: INDEX_FOLDER = "index" def _get_index_path(self, repo_path: Path) -> Path: index_path = repo_path / self.INDEX_FOLDER index_path.mkdir(exist_ok=True) return index_path def save(self, repo_path: Path, filename: str, data): index_path = self._get_index_path(repo_path) output = index_path / filename if isinstance(data, BaseModel): payload = data.model_dump() elif isinstance(data, list): payload = [ item.model_dump() if isinstance(item, BaseModel) else item for item in data ] else: payload = data with open(output, "w", encoding="utf-8") as f: json.dump( payload, f, indent=4, ensure_ascii=False, ) def load(self, repo_path: Path, filename: str): index_path = self._get_index_path(repo_path) with open(index_path / filename, encoding="utf-8") as f: return json.load(f)