diff options
Diffstat (limited to 'ick2/persistent.py')
-rw-r--r-- | ick2/persistent.py | 82 |
1 files changed, 57 insertions, 25 deletions
diff --git a/ick2/persistent.py b/ick2/persistent.py index e225b88..d323db7 100644 --- a/ick2/persistent.py +++ b/ick2/persistent.py @@ -27,28 +27,28 @@ import ick2 class PersistentStateInterface: # pragma: no cover - def get_resource_names(self, token, kind): + def get_resource_ids(self, token, kind): raise NotImplementedError() - def has_resource(self, token, kind, name): + def has_resource(self, token, kind, rid): raise NotImplementedError() - def get_resource(self, token, kind, name): + def get_resource(self, token, kind, rid): raise NotImplementedError() def get_resources(self, token, kind): return [ - self.get_resource(token, kind, name) - for name in self.get_resource_names(token, kind) + self.get_resource(token, kind, rid) + for rid in self.get_resource_ids(token, kind) ] - def write_resource(self, token, kind, name, resource): + def write_resource(self, token, kind, rid, resource): raise NotImplementedError() - def update_resource(self, token, kind, name, resource): + def update_resource(self, token, kind, rid, resource): raise NotImplementedError() - def remove_resource(self, token, kind, name): + def remove_resource(self, token, kind, rid): raise NotImplementedError() @@ -57,39 +57,71 @@ class MemoryPersistentState(PersistentStateInterface): def __init__(self): self._res = {} - def get_resource_names(self, token, kind): + def get_resource_ids(self, token, kind): if kind not in self._res: return [] return list(self._res[kind].keys()) - def has_resource(self, token, kind, name): - return kind in self._res and name in self._res[kind] + def has_resource(self, token, kind, rid): + return kind in self._res and rid in self._res[kind] - def get_resource(self, token, kind, name): - if kind not in self._res or name not in self._res[kind]: - raise ick2.NotFound(kind=kind, name=name) - return self._res[kind][name] + def get_resource(self, token, kind, rid): + if kind not in self._res or rid not in self._res[kind]: + raise ick2.NotFound(kind=kind, rid=rid) + return self._res[kind][rid] - def write_resource(self, token, kind, name, resource): + def write_resource(self, token, kind, rid, resource): if kind not in self._res: self._res[kind] = {} - self._res[kind][name] = resource + self._res[kind][rid] = resource - def update_resource(self, token, kind, name, resource): - self.write_resource(token, kind, name, resource) + def update_resource(self, token, kind, rid, resource): + self.write_resource(token, kind, rid, resource) - def remove_resource(self, token, kind, name): - if kind not in self._res or name not in self._res[kind]: - raise ick2.NotFound(kind=kind, name=name) - del self._res[kind][name] + def remove_resource(self, token, kind, rid): + 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 MuckPersistentState(PersistentStateInterface): + + def __init__(self): + self._res = {} + + def get_resource_ids(self, token, kind): + if kind not in self._res: + return [] + return list(self._res[kind].keys()) + + def has_resource(self, token, kind, rid): + return kind in self._res and rid in self._res[kind] + + def get_resource(self, token, kind, rid): + if kind not in self._res or rid not in self._res[kind]: + raise ick2.NotFound(kind=kind, rid=rid) + return self._res[kind][rid] + + def write_resource(self, token, kind, rid, resource): + if kind not in self._res: + self._res[kind] = {} + self._res[kind][rid] = resource + + def update_resource(self, token, kind, rid, resource): + self.write_resource(token, kind, rid, resource) + + def remove_resource(self, token, kind, rid): + 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): - def __init__(self, kind, name): + def __init__(self, kind, rid): super().__init__( 'Resource {}:{} not found'.format( - kind or "unknown", name or "unknown")) + kind or "unknown", rid or "unknown")) class Resource: # pragma: no cover |