mirror of https://gitlab.com/bashrc2/epicyon
44 lines
1.3 KiB
Python
44 lines
1.3 KiB
Python
import sys
|
|
from .base import BaseStore, GetStore, PutStore, CatalogStore, DeleteStore
|
|
|
|
class MemoryStore(BaseStore, GetStore,
|
|
PutStore, CatalogStore):
|
|
"""BasicStore is a basic datashards store with a memory backend.
|
|
|
|
This is more of an example than anything you'd use
|
|
"""
|
|
def __init__(self):
|
|
"""Create a new MemoryStore instance
|
|
|
|
returns:
|
|
A new `MemoryStore` object
|
|
"""
|
|
self._store = {}
|
|
|
|
def __repr__(self):
|
|
return "memory://"
|
|
|
|
def get(self, xt):
|
|
self.__doc__ = GetStore.get.__doc__
|
|
digest = super().validate_xt(xt)[2]
|
|
return self._store[digest]
|
|
|
|
def put(self, data):
|
|
self.__doc__ = PutStore.put.__doc__
|
|
super().validate_data(data)
|
|
|
|
digest = super().sha256d_data(data)
|
|
str_digest = d = str(digest, 'utf-8')
|
|
self._store[str_digest] = data
|
|
return self.xt_from_digest(digest)
|
|
|
|
def delete(self, *xts):
|
|
self.__doc__ = DeleteStore.delete.__doc__
|
|
digests = [self.validate_xt(xt)[2] for xt in xts]
|
|
for d in digests:
|
|
del(self._store[d])
|
|
|
|
def catalog(self):
|
|
self.__doc__ = CatalogStore.catalog.__doc__
|
|
return [self.xt_from_digest(digest) for digest in self._store.keys()]
|