def run(self): import networking import sys if sys.platform == 'win32': import bsddb self.DB = bsddb.hashopen(self.database_name) self._get = self.DB.__getitem__ self._put = self.DB.__setitem__ self._del = self.DB.__delitem__ self._close = self.DB.close else: import leveldb self.DB = leveldb.LevelDB(self.database_name) self._get = self.DB.Get self._put = self.DB.Put self._del = self.DB.Delete self._close = _noop # leveldb doesn't have a close func try: self.salt = self._get('salt') except KeyError: self.salt = os.urandom(5) self._put('salt', self.salt) def command_handler(command): try: name = command['type'] assert (name not in ['__init__', 'run']) return getattr(self, name)(command['args']) except Exception as exc: self.logf(exc) self.logf('command: ' + str(command)) self.logf('command type: ' + str(type(command))) return {'error':'bad data'} networking.serve_forever(command_handler, self.port, self.heart_queue) self._close()
def main(heart_queue, database_name, logf, database_port): import networking import sys import patricia as patty DB=leveldb.LevelDB(database_name+'_local') def local_get(args): try: a=json.loads(DB.Get(args[0])) return a except Exception as exc: logf(exc) logf('local get: '+str(args)) return 'empty' def local_put(args): return DB.Put(args[0], json.dumps(args[1])) def get(args): try: return json.loads(patty.get(str(args[0]))) except:# KeyError: return default_entry() def put(args): return patty.put(str(args[0]), json.dumps(args[1])) def existence(args): try: patty.get(str(args[0])) except:# KeyError: return False else: return True def delete(args): try: patty.delete(str(args[0])) except:#we should make sure this is the type of error we are expecting. pass def proof(args): return patty.prove(args[0]) def verify(args):#root, key, proof try: return json.loads(json.loads(patty.verify(args[0], args[1], args[2]))) except: return False def root(args): return patty.root() do={'get':get, 'put':put, 'existence':existence, 'delete':delete, 'proof':proof, 'verify':verify, 'root':root, 'local_get':local_get, 'local_put':local_put} def command_handler(command): try: name = command['type'] if name not in do.keys(): logf('name: ' +str(name)) error() return do[name](command['args']) except Exception as exc: logf(exc) logf('command: ' + str(command)) logf('command type: ' + str(type(command))) return {'error':'bad data'} networking.serve_forever(command_handler, database_port, heart_queue)
def main(DB, heart_queue): def responder(dic): command=dic['command'] if command[0] in Do: DB['args']=command[1:] out=Do[command[0]](DB) else: out=str(command[0]) + ' is not a command. use "./basicd.py commands" to get the list of basicshell commands. use "./basicd.py help help" to learn about the help tool.' return out try: return networking.serve_forever(custom.basicd_port, responder, heart_queue, DB) except: print('api error: ' +str(sys.exc_info()))
def run(self): import networking import sys if sys.platform == 'win32': import bsddb self.DB = bsddb.hashopen(self.database_name) self._get = self.DB.__getitem__ self._put = self.DB.__setitem__ self._del = self.DB.__delitem__ self._close = self.DB.close else: import leveldb self.DB = leveldb.LevelDB(self.database_name) self._get = self.DB.Get self._put = self.DB.Put self._del = self.DB.Delete self._close = _noop # leveldb doesn't have a close func try: self.salt = self._get('salt') except KeyError: self.salt = os.urandom(5) self._put('salt', self.salt) def command_handler(command): try: name = command['type'] assert (name not in ['__init__', 'run']) return getattr(self, name)(command['args']) except Exception as exc: self.logf(exc) self.logf('command: ' + str(command)) self.logf('command type: ' + str(type(command))) return {'error': 'bad data'} networking.serve_forever(command_handler, self.port, self.heart_queue) self._close()
def main(DB, heart_queue): def responder(dic): command=dic['command'] if command[0] in Do: DB['args']=command[1:] try: out=Do[command[0]](DB) except: out='truthcoin api main failure : ' +str(sys.exc_info()) else: out=str(command[0]) + ' is not a command. use "./truth_cli.py commands" to get the list of truthshell commands. use "./truth_cli.py help help" to learn about the help tool.' return out try: return networking.serve_forever(custom.api_port, responder, heart_queue, DB, True) except: print('api error: ' +str(sys.exc_info()))
def main(DB, heart_queue): def responder(dic): command=dic['command'] if command[0] in Do: args=command[1:] try: out=Do[command[0]](DB, args) except Exception as exc: tools.log(exc) out='api main failure : ' +str(sys.exc_info()) else: out=str(command[0]) + ' is not a command. use "./cli.py commands" to get the list of commands. use "./cli.py help help" to learn about the help tool.' return out try: return networking.serve_forever(responder, custom.api_port, heart_queue) except Exception as exc: tools.log('api error') tools.log(exc)
def main(DB, heart_queue): def responder(dic): command = dic['command'] if command[0] in Do: args = command[1:] try: out = Do[command[0]](DB, args) except Exception as exc: tools.log(exc) out = 'api main failure : ' + str(sys.exc_info()) else: out = str(command[ 0]) + ' is not a command. use "./cli.py commands" to get the list of commands. use "./cli.py help help" to learn about the help tool.' return out try: return networking.serve_forever(responder, custom.api_port, heart_queue) except Exception as exc: tools.log('api error') tools.log(exc)
def main(): def responder(dic): # command is received with a dictionary which supposed to contain a command key command = dic['command'] if command[0] in Do: args = command[1:] try: out = Do[command[0]](args) except Exception as exc: tools.log(exc) out = 'api main failure : ' + str(sys.exc_info()) else: out = str(command[0]) + ' is not a command. use "./cli.py commands" to get the list of commands. ' \ 'use "./cli.py help help" to learn about the help tool.' return out # api starts a network client at api port with a responder function try: return networking.serve_forever(responder, custom.api_port, custom.queues['heart_queue']) except Exception as exc: tools.log('api error') tools.log(exc)
def server(DB): return networking.serve_forever(main, custom.listen_port, DB)
def main(heart_queue, database_name, logf, database_port): import networking import sys import patricia as patty DB = leveldb.LevelDB(database_name + '_local') def local_get(args): try: a = json.loads(DB.Get(args[0])) return a except Exception as exc: logf(exc) logf('local get: ' + str(args)) return 'empty' def local_put(args): return DB.Put(args[0], json.dumps(args[1])) def get(args): try: return json.loads(patty.get(str(args[0]))) except: # KeyError: return default_entry() def put(args): return patty.put(str(args[0]), json.dumps(args[1])) def existence(args): try: patty.get(str(args[0])) except: # KeyError: return False else: return True def delete(args): try: patty.delete(str(args[0])) except: #we should make sure this is the type of error we are expecting. pass def proof(args): return patty.prove(args[0]) def verify(args): #root, key, proof try: return json.loads( json.loads(patty.verify(args[0], args[1], args[2]))) except: return False def root(args): return patty.root() do = { 'get': get, 'put': put, 'existence': existence, 'delete': delete, 'proof': proof, 'verify': verify, 'root': root, 'local_get': local_get, 'local_put': local_put } def command_handler(command): try: name = command['type'] if name not in do.keys(): logf('name: ' + str(name)) error() return do[name](command['args']) except Exception as exc: logf(exc) logf('command: ' + str(command)) logf('command type: ' + str(type(command))) return {'error': 'bad data'} networking.serve_forever(command_handler, database_port, heart_queue)