responses.py 1.88 KB
import logging
from opensipkd.string import (
    FixLength,
    FullDateTimeVar,
    )
from opensipkd.string.row import Row
from .structure import (
    INQUIRY_RESP_FIELDS,
    PAYMENT_RESP_FIELDS,
    METHOD,
    METHOD_CODE,
    )
from .exceptions import InternalError


log = logging.getLogger(__name__)


class InquiryResponse(Row):
    def __init__(self):
        super().__init__(INQUIRY_RESP_FIELDS)

    def __setitem__(self, name, value):
        if value.find(':') > -1:
            msg = f'Ada titik dua pada {name} yaitu {value}'
            log.error(msg)
            raise InternalError(msg)
        Row.__setitem__(self, name, value)

    def __str__(self):
        return self.to_str()

    def to_str(self):
        return ':'.join(list(self)).replace(' ', '_')

    def from_err(self, err):
        self.values['Response Code'] = err.code
        self.values['Notification Message'] = \
            self.values['Biller Name'] = err.message

    def from_raw(self, raw):
        t = raw.split(':')
        i = -1
        for fieldname in self.fieldnames:
            i += 1
            if not t[i:i+1]:
                return
            self.values[fieldname] = t[i]


class PaymentResponse(InquiryResponse):
    def __init__(self):
        Row.__init__(self, PAYMENT_RESP_FIELDS)


def get_method(data):
    return METHOD[data['trx_type']]


def is_inquiry(data):
    return data['trx_type'] == METHOD_CODE['inquiry']


def is_payment(data):
    return data['trx_type'] == METHOD_CODE['payment']


def is_reversal(data):
    return data['trx_type'] == METHOD_CODE['reversal']


def get_template_response(data):
    if is_inquiry(data):
        return InquiryResponse()
    d = PaymentResponse()
    d['Bill Ref'] = data['bill_ref']
    return d


def date_from_str(s):
    t = FullDateTimeVar()
    t.set_raw(s)
    return t.get_value()


def get_trx_date(data):
    return date_from_str(data['trx_date'])