4 |
4 |
5 |
5 |
6 class JSONRPCServiceBase: |
6 class JSONRPCServiceBase: |
7 |
7 |
8 def __init__(self): |
8 def __init__(self): |
9 self.methods={} |
9 self.methods = {} |
10 |
10 |
11 def response(self, id, result): |
11 def response(self, id, result): |
12 return simplejson.dumps({'version': '1.1', 'id': id, |
12 return simplejson.dumps({'version': '1.1', 'id': id, |
13 'result': result, 'error': None}) |
13 'result': result, 'error': None}) |
14 def error(self, id, code, message): |
14 def error(self, id, code, message): |
26 def process(self, data): |
26 def process(self, data): |
27 data = simplejson.loads(data) |
27 data = simplejson.loads(data) |
28 id, method, params = data["id"], data["method"], data["params"] |
28 id, method, params = data["id"], data["method"], data["params"] |
29 if method in self.methods: |
29 if method in self.methods: |
30 try: |
30 try: |
31 result =self.methods[method](*params) |
31 result = self.methods[method](*params) |
32 return self.response(id, result) |
32 return self.response(id, result) |
33 except BaseException: |
33 except BaseException: |
34 etype, eval, etb = sys.exc_info() |
34 etype, eval, etb = sys.exc_info() |
35 return self.error(id, 100, '%s: %s' %(etype.__name__, eval)) |
35 return self.error(id, 100, '%s: %s' % (etype.__name__, eval)) |
36 except: |
36 except: |
37 etype, eval, etb = sys.exc_info() |
37 etype, eval, etb = sys.exc_info() |
38 return self.error(id, 100, 'Exception %s: %s' %(etype, eval)) |
38 return self.error(id, 100, 'Exception %s: %s' % (etype, eval)) |
39 else: |
39 else: |
40 return self.error(id, 100, 'method "%s" does not exist' % method) |
40 return self.error(id, 100, 'method "%s" does not exist' % method) |
41 |
41 |
42 def listmethods(self): |
42 def listmethods(self): |
43 return self.methods.keys() |
43 return self.methods.keys() |