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() |