svgui/pyjs/jsonrpc/jsonrpc.py
author Sergey Surkov <surkovsv93@gmail.com>
Mon, 12 Sep 2016 16:41:21 +0300
changeset 1530 24d8e8c233bd
parent 728 e0424e96e3fd
child 1730 64d8f52bc8c8
permissions -rw-r--r--
Add hotkey (F12) for switching perspective.

Switching perspective feature hides/restores all panels except of the main editor window for current FB.
So all available screen space is used for editor.
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()