jsonrpc.py 2.1 KB
from pyramid_rpc.jsonrpc import jsonrpc_method
from opensipkd.jsonrpc.exc import (
    JsonRpcInvalidParams,
    JsonRpcBankNotFound,
    JsonRpcBillerNetwork,
    )
from ..tools import iso_to_dict
from ..logger import log_web_info
from . import (
    WebJob as BaseWebJob,
    View as BaseView,
    )


conf = dict()


class Webjob(BaseWebJob):
    def timeout_error(self):  # override
        raise JsonRpcBillerNetwork(message='Timeout')


class View(BaseView):
    def get_web_job_cls(self):  # Override
        return WebJob

    def get_response(self, rpc_method, p=dict(), iso_method=None):
        self.log_receive(rpc_method, p)
        conn = self.get_connection()
        iso_func = getattr(conn.job, iso_method or rpc_method)
        iso_req = p and iso_func(p) or iso_func()
        iso_resp = self.web_job(conn, iso_req)
        data = iso_to_dict(iso_resp)
        r = dict(code=0, message='OK', data=data)
        self.log_send(r)
        return r 

    def not_found_error(self, hostname):  # Override
        msg = 'Host {} tidak ditemukan di konfigurasi'.format(hostname)
        return JsonRpcBankNotFound(message=msg)

    def not_running_error(self, hostname):  # Override
        msg = 'Host {} belum terhubung'.format(hostname)
        return JsonRpcBankNotFound(message=msg)

    def log_receive(self, method, p):
        msg = '{} {}'.format(method, p)
        BaseView.log_receive(self, msg)

    def log_send(self, p):
        BaseView.log_send(self, p)

    @jsonrpc_method(endpoint='rpc')
    def echo(self, p):
        return self.get_response('echo', 'echo_request')

    @jsonrpc_method(endpoint='rpc')
    def inquiry(self, p):
        return self.get_response('inquiry', p)

    @jsonrpc_method(endpoint='rpc')
    def payment(self, p):
        return self.get_response('payment', p)

    @jsonrpc_method(endpoint='rpc')
    def reversal(self, p):
        return self.get_response('reversal', p)


# Dipanggil read_conf.py
def init(cfg):
    conf.update(cfg)


# Dipanggil forwarder.py
def pyramid_init(config):
    config.include('pyramid_rpc.jsonrpc')
    config.add_jsonrpc_endpoint('rpc', conf['route_path'])