-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathuser.py
83 lines (76 loc) · 2.29 KB
/
user.py
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
import time
import requests
TE_API_URL = 'https://api-my.te.eg/api/'
API_GEN_TOKEN = f'{TE_API_URL}user/generatetoken?channelId=WEB_APP'
API_LOGIN = f'{TE_API_URL}user/login?channelId=WEB_APP'
API_LINE_USAGE = f'{TE_API_URL}line/freeunitusage'
class User:
def __init__(self, pw, msisdn):
self.pw = pw
self.msisdn = msisdn
self.s = requests.session()
self.header = {
'customerId': None,
'msisdn': msisdn,
'locale': 'en',
'timestamp': None,
}
self.body = {}
self.jwt = None
def generate_jwt(self):
'''
Generate default JWT token for login
'''
r = self.s.get(API_GEN_TOKEN)
body = r.json()['body']
if 'jwt' in body:
return body['jwt']
def login(self):
timestamp = int(time.time())
jwt = self.generate_jwt()
# preflight
self.s.options(API_LOGIN)
# send request
req = {
'header': self.header,
'body': {
'password': self.pw
}
}
req['header']['timestamp'] = timestamp
res = self.s.post(API_LOGIN, json=req, headers={'Jwt': jwt})
res_json = res.json()
# we are OK and no session error
if res_json['header']['responseCode'] == '0':
res_json = res.json()
self.jwt = res_json['body']['jwt']
self.header['customerId'] = res_json['header']['customerId']
return 'OK'
else:
print('ERR')
return res
def get_usage(self):
res = self.s.post(API_LINE_USAGE, json={'header': self.header}, headers={'Jwt': self.jwt})
res_json = res.json()
detailed_usage = res_json['body']['detailedLineUsageList']
return detailed_usage
def print_report(self):
if not self.jwt:
self.login()
usage = self.get_usage()
for i in range(len(usage)):
print(f'''{usage[i]['usedAmount']}/{usage[i]['initialTotalAmount']}{usage[i]['measureUnitEnName']}\t{usage[i]['itemCode']}''')
def get_full_usage(self):
'''
get full usage (calcaulate all available packages)
return total_amount, total_used
'''
if not self.jwt:
self.login()
usage = self.get_usage()
total_amount = 0
total_used = 0
for i in range(len(usage)):
total_amount = total_amount + usage[i]['initialTotalAmount']
total_used = total_used + usage[i]['usedAmount']
return round(total_amount, 2), round(total_used, 2)