Last active 1454995119

Revision d5f23fdec352fc22cf3e135f3dd77dbccd2be5e7

iinet_usage.py Raw
1#!/usr/bin/env python3
2from requests import get
3from os import environ
4from sys import exit, stderr, stdout
5
6STDOUT = stdout
7
8# http://stackoverflow.com/a/1094933
9def sizeof_fmt(num, suffix='B'):
10 for unit in ['','Ki','Mi','Gi','Ti','Pi','Ei','Zi']:
11 if abs(num) < 1024.0:
12 return "%3.1f%s%s" % (num, unit, suffix)
13 num /= 1024.0
14 return "%.1f%s%s" % (num, 'Yi', suffix)
15
16def get_service_data(token=environ["IINET_TOKEN"], service=environ["IINET_SERVICE"]):
17 url = "https://toolbox.iinet.net.au/cgi-bin/api.cgi?Usage&_TOKEN={}&_SERVICE={}"
18 try:
19 data = get(url.format(environ["IINET_TOKEN"], environ["IINET_SERVICE"])).json()
20 return data
21 except KeyError:
22 print("set environ vars pls", file=stderr)
23 return False
24
25def format_usage(data):
26 try:
27 data = data["response"]["usage"]["traffic_types"][0]
28 return "{} remaining ({} used)".format(sizeof_fmt(data["allocation"] - data["used"]), sizeof_fmt(data["used"]))
29 except KeyError:
30 return False
31
32def refresh_token():
33 print("token needs refreshing", file=stderr)
34 from getpass import getpass
35 try:
36 stdout = stderr
37 yn = input("Want to do that now? [y] ") or "y"
38 if yn and yn[0].lower() == "y":
39 user = input("Username: ")
40 westnet = input("Westnet account? [n] ") or "n"
41 if westnet and westnet[0].lower() == "y":
42 user += "@westnet.com.au"
43 stdout = STDOUT
44 password = getpass()
45 print("Token:", file=stderr)
46 return get("https://toolbox.iinet.net.au/cgi-bin/api.cgi", params={"_USERNAME": user, "_PASSWORD": password}).json()["token"], 0
47 else:
48 raise KeyboardInterrupt
49 except KeyboardInterrupt:
50 return "", 130
51
52def main():
53 data = format_usage(get_service_data())
54 if data:
55 print(data, file=stderr)
56 exit(0)
57 else:
58 pl, retcode = refresh_token()
59 print(pl)
60 exit(retcode)
61
62if __name__ == "__main__":
63 main()