view.py
1.29 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
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