default_server.py 1.19 KB
from async_web.exceptions import BaseError
from async_web.read_conf import str2dict


keys = dict()

ERR_KEY = 91
ERR_ACTION = 76
ERR_OTHER = 76


class ErrKey(BaseError):
    def __init__(self, message):
        super().__init__(ERR_KEY, message)


class ErrAction(BaseError):
    def __init__(self, message):
        super().__init__(ERR_ACTION, message)


def ack(code=0, msg='OK', result=dict()):
    r = dict(result)
    r['code'] = code
    r['message'] = msg
    return r


def ack_from_exception(e: BaseError):
    return ack(e.code, e.message)


def ack_other(msg: str):
    return ack(ERR_OTHER, message=msg)


def login(d: dict):
    if 'key' not in d:
        raise ErrKey('Field key tidak ditemukan')
    if d['key'] not in keys:
        raise ErrKey('key tidak terdaftar')
    client_id = keys[d['key']]
    return dict(action='login', client_id=client_id, code=0, message='OK')


def parse(d: dict):
    action = d.get('action')
    if not action:
        raise ErrAction('Field action tidak ditemukan')
    if action == 'echo':
        return ack()
    msg = f'ERROR action {action} tidak dipahami'
    raise ErrAction(msg)


def init(conf: dict):
    d = str2dict(conf['keys'])
    keys.update(d)