4 from typing import Any, Mapping
9 class PersistentState(object):
11 An object that behaves like a persistent hash map; it can be
12 accessed to store key-value pairs but also saved to disk and read
13 back from disk easily.
16 def __init__(self, filename: str, *, max_age_sec: int = None):
17 self.filename = filename
18 if file_utils.does_file_exist(self.filename):
19 if max_age_sec is not None:
20 age = file_utils.get_file_mtime_age_seconds(self.filename)
22 self.state = self.load()
26 self.state = self.load()
30 def __getitem__(self, key: str) -> Any:
31 return self.state.get(key, "")
33 def __setitem__(self, key: str, value: Any):
34 self.state[key] = value
36 def __delitem__(self, key: str):
40 return iter(self.state)
43 return len(self.state)
45 def save(self) -> None:
46 with open(self.filename, 'wb') as f:
47 pickle.dump(self.state, f, pickle.HIGHEST_PROTOCOL)
49 def load(self) -> Mapping[str, Any]:
50 with open(self.filename, 'rb') as f:
51 return(pickle.load(f))