Source code for kibitzr.stash

import contextlib
import logging


logger = logging.getLogger(__name__)


[docs]class Stash: FILENAME = 'stash.db'
[docs] @contextlib.contextmanager def open(self): # pylint: disable=import-outside-toplevel import shelve with contextlib.closing(shelve.open(self.FILENAME)) as db: yield db
[docs] def read(self): with self.open() as db: return dict(db)
[docs] def write(self, data): with self.open() as db: for key, value in data.items(): db[key] = value
[docs] @classmethod def print_content(cls): for key, value in cls().read().items(): print(f"{key}: {value}")
[docs]class LazyStash(Stash): def __init__(self): self._stashobj = None @property def _stash(self): if self._stashobj is None: self._stashobj = self.read() return self._stashobj def __getitem__(self, key): return self._stash[key]
[docs] def get(self, key, default=None): try: return self._stash[key] except KeyError: return default