import gluon.contrib.simplejson as simplejson
class JSONRPCServiceBase:
def response(self, id, result):
return simplejson.dumps({'version': '1.1', 'id':id,
'result':result, 'error':None})
def error(self, id, code, message):
return simplejson.dumps({'id': id,
'error': {'name': 'JSONRPCError',
def add_method(self, name, method):
self.methods[name] = method
data = simplejson.loads(data)
id, method, params = data["id"], data["method"], data["params"]
if method in self.methods:
result =self.methods[method](*params)
return self.response(id, result)
etype, eval, etb = sys.exc_info()
return self.error(id, 100, '%s: %s' %(etype.__name__, eval))
etype, eval, etb = sys.exc_info()
return self.error(id, 100, 'Exception %s: %s' %(etype, eval))
return self.error(id, 100, 'method "%s" does not exist' % method)
return self.methods.keys()