import os import json import atexit from ._base import get_data_root_directory class SimpleState: def __init__(self, name: str, default: dict = None): if default is None: default = {} elif type(default) is not dict: raise TypeError('default must be dictionary') path = os.path.join(get_data_root_directory(), name) if not os.path.exists(path): self._data = default else: with open(path, 'r') as f: self._data = json.loads(f.read()) self._file = path atexit.register(self.__cleanup) def __cleanup(self): if hasattr(self, '_file'): with open(self._file, 'w') as f: f.write(json.dumps(self._data)) atexit.unregister(self.__cleanup) def __del__(self): if 'open' in __builtins__: self.__cleanup() def __getitem__(self, key): return self._data[key] def __setitem__(self, key, value): self._data[key] = value def __contains__(self, key): return key in self._data def __delitem__(self, key): if key in self._data: del self._data[key]