From 581f6cd53f57599326439dccb355e882e7858faa Mon Sep 17 00:00:00 2001 From: Lars Wirzenius Date: Sun, 14 Jul 2019 12:50:04 +0300 Subject: Add: MemoryPersitentState --- ick2/persistent.py | 61 ++++++++++++++---------------------------------------- 1 file changed, 15 insertions(+), 46 deletions(-) (limited to 'ick2/persistent.py') diff --git a/ick2/persistent.py b/ick2/persistent.py index 1d79e3d..bb0aeb6 100644 --- a/ick2/persistent.py +++ b/ick2/persistent.py @@ -49,64 +49,33 @@ class PersistentStateInterface: # pragma: no cover raise NotImplementedError() -class FilePersistentState(PersistentStateInterface): +class MemoryPersistentState(PersistentStateInterface): def __init__(self): - self._dir = None + self._res = {} - def get_directory(self): - return self._dir - - def set_directory(self, dirname): - self._dir = dirname - - def _safe(self, name): - return urllib.parse.quote(name, safe='') - - def _unsafe(self, safe): - return urllib.parse.unquote(safe) - - def _unsafe_list(self, safe_names): - return [self._unsafe(safe) for safe in safe_names] - - def _dirname(self, kind): - return os.path.join(self._dir, self._safe(kind)) - - def _filename(self, kind, rid): - dirname = self._dirname(kind) - return os.path.join(dirname, self._safe(rid)) + def get_resource_ids(self, kind): + if kind not in self._res: + return [] + return list(self._res[kind].keys()) def has_resource(self, kind, rid): - filename = self._filename(kind, rid) - return os.path.exists(filename) - - def get_resource_ids(self, kind): - dirname = self._dirname(kind) - if os.path.exists(dirname): - return self._unsafe_list(os.listdir(dirname)) - return [] + return kind in self._res and rid in self._res[kind] def get_resource(self, kind, rid): - filename = self._filename(kind, rid) - if not os.path.exists(filename): + if kind not in self._res or rid not in self._res[kind]: raise ick2.NotFound(kind=kind, rid=rid) - with open(filename, 'r') as f: - as_dict = yaml.load(f, Loader=yaml.CSafeLoader) - return resource_from_dict(as_dict) + return self._res[kind][rid] def write_resource(self, kind, rid, resource): - dirname = self._dirname(kind) - if not os.path.exists(dirname): - os.makedirs(dirname) - - filename = self._filename(kind, rid) - with open(filename, 'w') as f: - yaml.dump( - resource.as_dict(), stream=f, Dumper=yaml.CSafeDumper) + if kind not in self._res: + self._res[kind] = {} + self._res[kind][rid] = resource def remove_resource(self, kind, rid): - filename = self._filename(kind, rid) - os.remove(filename) + if kind not in self._res or rid not in self._res[kind]: + raise ick2.NotFound(kind=kind, rid=rid) + del self._res[kind][rid] class NotFound(Exception): -- cgit v1.2.1