import json import os import tempfile class StateStore: def __init__(self, file_path: str): self.file_path = os.path.abspath(file_path) self._data = None def load(self) -> dict: if self._data is not None: return self._data if not os.path.exists(self.file_path): self._data = {} return self._data with open(self.file_path, "r", encoding="utf-8") as f: self._data = json.load(f) if not isinstance(self._data, dict): self._data = {} return self._data def save(self): data = self.load() os.makedirs(os.path.dirname(self.file_path), exist_ok=True) with tempfile.NamedTemporaryFile("w", delete=False, dir=os.path.dirname(self.file_path), encoding="utf-8") as f: json.dump(data, f, ensure_ascii=False, separators=(",", ":")) tmp = f.name os.replace(tmp, self.file_path) def get(self, key: str, default=None): data = self.load() return data.get(key, default) def set(self, key: str, value): data = self.load() data[key] = value self.save() def get_set(self, key: str) -> set: data = self.load() val = data.get(key, []) if isinstance(val, list): return set(val) if isinstance(val, set): return val return set() def add_to_set(self, key: str, item): s = self.get_set(key) s.add(item) self.set(key, sorted(list(s)))