view.py 1.29 KB
from datetime import datetime
import pytz
from pyramid.response import Response


def time_to_str(t: datetime) -> str:
    s = t.strftime('%Y-%m-%dT%H:%M:%S%z')
    return s[:-2] + ':' + s[-2:]


def str_to_time(s: str) -> datetime:
    t = s.split(':')
    s = ':'.join(t[:-1]) + t[-1]
    return datetime.strptime(s, '%Y-%m-%dT%H:%M:%S%z')


def create_now(timezone='Asia/Jakarta') -> datetime:
    tz = pytz.timezone(timezone)
    return datetime.now(tz)


def create_rc(rc: tuple, service_code: str):
    http_status, case_code = rc
    return f'{http_status}{service_code}{case_code}'


def create_response(
        service_code: str, rc: tuple, msg='', data={}, headers={},
        request=None) -> dict:
    settings = request and request.registry.settings
    timezone = settings and settings.get('timezone') or 'Asia/Jakarta'
    now = create_now(timezone)
    headers = {
        'Content-Type': 'application/json',
        'X-Timestamp': time_to_str(now)}
    r = data.copy()
    r.update(dict(
        responseCode=create_rc(rc, service_code),
        responseMessage=msg))
    # https://docs.pylonsproject.org/projects/pyramid_cookbook/en/latest/pylons/exceptions.html
    return Response(headers=headers, json=r, status=rc[0])


class Base:
    def __init__(self, request):
        self.request = request