Graph-IT

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)

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