2015-12-23 1 views
0

Dans jsonrpclib docs, par exemple est fonction enregistrer un par un comme ceci:Comment enregistrer la fonction dans une classe plutôt que d'utiliser jsonrpclib par python?

def foo(): 
    pass 

def bar(): 
    pass 

server = SimpleJSONRPCServer(("localhost", 8000)) 
server.register_multicall_functions() 
server.register_function(foo, 'foo') 
server.register_function(bar, 'bar') 

Il peut fonctionner, mais pas pythonique. Enregistrer les fonctions une par une est complexe après tout. Y at-il des exemples pour enregistrer des fonctions dans une classe ou une autre manière pythonique à la fois. Tels que:

class Api(object): 
    def foo(): 
     pass 

    def bar(): 
     pass 

def SomeMagic(): 
    # register all function in Api 
    server.register_function(Api) 

Répondre

0

Une idée m'est venue à l'esprit. Le plus important est la fonction intégrée dir().

# api.py 
def foo(): 
    pass 

def bar(): 
    pass 


# main.py 
import api 

def register_api(server, api_obj): 
    methods = dir(api_obj) 
    apis = filter(lambda m: not m.startswith('_'), methods) 
    [server.register_function(getattr(api_obj, api)) for api in apis] 

def main(): 
    endpoint = (LISTEN_ADDR, LISTEN_PORT) 
    server = SimpleJSONRPCServer(endpoint) 
    register_api(server, api) 
    server.serve_forever()