supcon.store module
mport msgpack mport twisted.internet.defer as defer mport twisted.internet.threads as threads lass Store(object): def load(self, key: str) -> defer.Deferred: pass def store(self, key: str, data: bytes) -> defer.Deferred: pass def delete(self, key: str) -> defer.Deferred: pass ef readFile(name: str) -> defer.Deferred: print('readFile') def inThread(): print('readFile > inThread') with open(name, 'r+b') as fd: return fd.read() return threads.deferToThread(inThread) ef writeFile(name: str, data: bytes) -> defer.Deferred: print('writeFile') def inThread(): print('writeFile > inThread') with open(name, 'w+b') as fd: return fd.write(data) return threads.deferToThread(inThread) lass FileStore(Store): def __init__(self, name): self.__name = name self.__data = {} self.__last = self.__readData() @defer.inlineCallbacks def __readData(self): data = yield readFile(self.__name) data = msgpack.unpackb(data, encoding='utf-8') if isinstance(data, dict): self.__data = data @property def name(self): return self.__name def __queue(self, job) -> defer.Deferred: d = defer.Deferred() def trampolineSucceed(result): if isinstance(result, defer.Deferred): result.addCallbacks(trampolineSucceed, trampolineFail) else: d.callback(result) def trampolineFail(result): if isinstance(result, defer.Deferred): result.addCallbacks(trampolineSucceed, trampolineFail) else: d.errback(result) self.__last.addBoth(lambda _: job()) self.__last.addCallbacks(trampolineSucceed, trampolineFail) return d def load(self, key: str) -> defer.Deferred: def job(): return self.__data[key] if key in self.__data else None return self.__queue(job) def store(self, key: str, data) -> defer.Deferred: def job(): self.__data[key] = data return writeFile(self.__name, msgpack.packb(self.__data, use_bin_type=True)) return self.__queue(job) def delete(self, key: str) -> defer.Deferred: def job(): if key in self.__data: del self.__data[key] return writeFile(self.__name, msgpack.packb(self.__data, use_bin_type=True)) return self.__queue(job)
Functions
def readFile(
name)
def readFile(name: str) -> defer.Deferred: print('readFile') def inThread(): print('readFile > inThread') with open(name, 'r+b') as fd: return fd.read() return threads.deferToThread(inThread)
def writeFile(
name, data)
def writeFile(name: str, data: bytes) -> defer.Deferred: print('writeFile') def inThread(): print('writeFile > inThread') with open(name, 'w+b') as fd: return fd.write(data) return threads.deferToThread(inThread)
Classes
class FileStore
class FileStore(Store): def __init__(self, name): self.__name = name self.__data = {} self.__last = self.__readData() @defer.inlineCallbacks def __readData(self): data = yield readFile(self.__name) data = msgpack.unpackb(data, encoding='utf-8') if isinstance(data, dict): self.__data = data @property def name(self): return self.__name def __queue(self, job) -> defer.Deferred: d = defer.Deferred() def trampolineSucceed(result): if isinstance(result, defer.Deferred): result.addCallbacks(trampolineSucceed, trampolineFail) else: d.callback(result) def trampolineFail(result): if isinstance(result, defer.Deferred): result.addCallbacks(trampolineSucceed, trampolineFail) else: d.errback(result) self.__last.addBoth(lambda _: job()) self.__last.addCallbacks(trampolineSucceed, trampolineFail) return d def load(self, key: str) -> defer.Deferred: def job(): return self.__data[key] if key in self.__data else None return self.__queue(job) def store(self, key: str, data) -> defer.Deferred: def job(): self.__data[key] = data return writeFile(self.__name, msgpack.packb(self.__data, use_bin_type=True)) return self.__queue(job) def delete(self, key: str) -> defer.Deferred: def job(): if key in self.__data: del self.__data[key] return writeFile(self.__name, msgpack.packb(self.__data, use_bin_type=True)) return self.__queue(job)
Ancestors (in MRO)
Instance variables
var name
Methods
def __init__(
self, name)
Initialize self. See help(type(self)) for accurate signature.
def __init__(self, name): self.__name = name self.__data = {} self.__last = self.__readData()
def delete(
self, key)
def delete(self, key: str) -> defer.Deferred: def job(): if key in self.__data: del self.__data[key] return writeFile(self.__name, msgpack.packb(self.__data, use_bin_type=True)) return self.__queue(job)
def load(
self, key)
def load(self, key: str) -> defer.Deferred: def job(): return self.__data[key] if key in self.__data else None return self.__queue(job)
def store(
self, key, data)
def store(self, key: str, data) -> defer.Deferred: def job(): self.__data[key] = data return writeFile(self.__name, msgpack.packb(self.__data, use_bin_type=True)) return self.__queue(job)
class Store
class Store(object): def load(self, key: str) -> defer.Deferred: pass def store(self, key: str, data: bytes) -> defer.Deferred: pass def delete(self, key: str) -> defer.Deferred: pass
Ancestors (in MRO)
- Store
- builtins.object
Methods
def delete(
self, key)
def delete(self, key: str) -> defer.Deferred: pass
def load(
self, key)
def load(self, key: str) -> defer.Deferred: pass
def store(
self, key, data)
def store(self, key: str, data: bytes) -> defer.Deferred: pass