diff options
Diffstat (limited to 'src/tube_stat/cli.py')
-rw-r--r-- | src/tube_stat/cli.py | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/src/tube_stat/cli.py b/src/tube_stat/cli.py new file mode 100644 index 0000000..c408804 --- /dev/null +++ b/src/tube_stat/cli.py @@ -0,0 +1,77 @@ +import click +import json +import requests + +with open("./config.json", "r") as e: + config = json.load(e) + +TUBE_LINES = ( + "bakerloo", "victoria", "central", "circle", "district", "hammersmith-city", + "jubilee", "metropolitan", "northern", "piccadilly", "waterloo-city", "dlr", + "overground", "tram" +) +APP = config["APP"] +KEY = config["KEY"] + +def get_line_color(line: str) -> tuple[int, int, int]: + match line: + case "bakerloo": + return (179, 99, 5) + case "victoria": + return (0, 152, 212) + case "central": + return (227, 32, 23) + case "circle": + return (255, 211, 0) + case "district": + return (0, 120, 42) + case "hammersmith-city": + return (243, 169, 187) + case "jubilee": + return (160, 165, 169) + case "metropolitan": + return (155, 0, 86) + case "northern": + return (0, 0, 0) + case "piccadilly": + return (0, 54, 136) + case "waterloo-city": + return (149, 205, 186) + case "dlr": + return (0, 164, 167) + case "overground": + return (238, 124, 14) + case "tram": + return (132, 184, 23) + case _: + return (128, 128, 128) + +@click.command() +@click.option("--line", default=None, help="comma separated tube lines, e.g bakerloo,central") +def cli(line): + if line: + requested_lines = line.split(",") + invalid_lines = [l for l in requested_lines if l not in TUBE_LINES] + if invalid_lines: + raise click.ClickException(f'Invalid tube lines: {', '.join(invalid_lines)}') + else: + requested_lines = ','.join(TUBE_LINES) + req_url = f'https://api.tfl.gov.uk/Line/{requested_lines}/Status?app_id={APP}&app_key={KEY}' + res = requests.get(req_url) + res_json = json.loads(res.text) + print_str = "" + for i, r in enumerate(res_json): + if len(res_json) - 1 != i: + line_break = "\n" + else: + line_break = "" + line_colour = get_line_color(r["id"]) + print_str += f'{click.style(r["name"], bg=line_colour)}: {r["lineStatuses"][0]["statusSeverityDescription"]}{line_break}' + click.echo(print_str) + +if __name__ == "__main__": + try: + cli() + except click.ClickException as e: + click.echo(str(e), err=True) + raise click.exceptions.Exit(1) |