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