epicyon/datashards/stores/memorystore.py

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()]