diff -r 6be032177e2a -r ecf4d203c4d4 py_ext/modules/svgui/pyjs/jsonrpc/jsonrpc.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/py_ext/modules/svgui/pyjs/jsonrpc/jsonrpc.py Tue May 08 17:08:45 2012 +0200 @@ -0,0 +1,43 @@ +import gluon.contrib.simplejson as simplejson +import types +import sys + +class JSONRPCServiceBase: + + def __init__(self): + self.methods={} + + 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, + 'version': '1.1', + 'error': {'name': 'JSONRPCError', + 'code': code, + 'message': message + } + }) + + def add_method(self, name, method): + self.methods[name] = method + + def process(self, data): + data = simplejson.loads(data) + id, method, params = data["id"], data["method"], data["params"] + if method in self.methods: + try: + result =self.methods[method](*params) + return self.response(id, result) + except BaseException: + etype, eval, etb = sys.exc_info() + return self.error(id, 100, '%s: %s' %(etype.__name__, eval)) + except: + etype, eval, etb = sys.exc_info() + return self.error(id, 100, 'Exception %s: %s' %(etype, eval)) + else: + return self.error(id, 100, 'method "%s" does not exist' % method) + + def listmethods(self): + return self.methods.keys() +