iinet_usage.py
· 2.0 KiB · Python
Raw
#!/usr/bin/env python3
from requests import get
from os import environ
from sys import exit, stderr, stdout
STDOUT = stdout
# http://stackoverflow.com/a/1094933
def sizeof_fmt(num, suffix='B'):
for unit in ['','Ki','Mi','Gi','Ti','Pi','Ei','Zi']:
if abs(num) < 1024.0:
return "%3.1f%s%s" % (num, unit, suffix)
num /= 1024.0
return "%.1f%s%s" % (num, 'Yi', suffix)
def get_service_data(token=environ["IINET_TOKEN"], service=environ["IINET_SERVICE"]):
url = "https://toolbox.iinet.net.au/cgi-bin/api.cgi?Usage&_TOKEN={}&_SERVICE={}"
try:
data = get(url.format(environ["IINET_TOKEN"], environ["IINET_SERVICE"])).json()
return data
except KeyError:
print("set environ vars pls", file=stderr)
return False
def format_usage(data):
try:
data = data["response"]["usage"]["traffic_types"][0]
return "{} remaining ({} used)".format(sizeof_fmt(data["allocation"] - data["used"]), sizeof_fmt(data["used"]))
except KeyError:
return False
def refresh_token():
print("token needs refreshing", file=stderr)
from getpass import getpass
try:
stdout = stderr
yn = input("Want to do that now? [y] ") or "y"
if yn and yn[0].lower() == "y":
user = input("Username: ")
westnet = input("Westnet account? [n] ") or "n"
if westnet and westnet[0].lower() == "y":
user += "@westnet.com.au"
stdout = STDOUT
password = getpass()
print("Token:", file=stderr)
return get("https://toolbox.iinet.net.au/cgi-bin/api.cgi", params={"_USERNAME": user, "_PASSWORD": password}).json()["token"], 0
else:
raise KeyboardInterrupt
except KeyboardInterrupt:
return "", 130
def main():
data = format_usage(get_service_data())
if data:
print(data, file=stderr)
exit(0)
else:
pl, retcode = refresh_token()
print(pl)
exit(retcode)
if __name__ == "__main__":
main()
| 1 | #!/usr/bin/env python3 |
| 2 | from requests import get |
| 3 | from os import environ |
| 4 | from sys import exit, stderr, stdout |
| 5 | |
| 6 | STDOUT = stdout |
| 7 | |
| 8 | # http://stackoverflow.com/a/1094933 |
| 9 | def 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 | |
| 16 | def 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 | |
| 25 | def 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 | |
| 32 | def 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 | |
| 52 | def 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 | |
| 62 | if __name__ == "__main__": |
| 63 | main() |