Example #1
0
 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()
Example #2
0
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)
Example #3
0
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()))
Example #4
0
    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()
Example #5
0
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()))
Example #6
0
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)
Example #7
0
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)
Example #8
0
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)
Example #9
0
def server(DB):
    return networking.serve_forever(main, custom.listen_port, DB)
Example #10
0
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)
Example #11
0
def server(DB):
    return networking.serve_forever(main, custom.listen_port, DB)