aboutsummaryrefslogtreecommitdiffstats
path: root/fnme/cli.py
diff options
context:
space:
mode:
Diffstat (limited to 'fnme/cli.py')
-rw-r--r--fnme/cli.py60
1 files changed, 60 insertions, 0 deletions
diff --git a/fnme/cli.py b/fnme/cli.py
new file mode 100644
index 0000000..d9ef508
--- /dev/null
+++ b/fnme/cli.py
@@ -0,0 +1,60 @@
+import argparse
+import sys
+from typing import Any, Dict, List
+
+from tabulate import tabulate
+
+from fnme.constants import SORT_KV
+from fnme.data import get_latest_data
+from fnme.geo import get_location
+from fnme.station import filter_df, sort_stations
+
+
+def parse_args() -> argparse.Namespace:
+ parser = argparse.ArgumentParser()
+ parser.add_argument("-a", "--address", type=str, required=True)
+ parser.add_argument("-r", "--radius", type=int, default=5)
+ parser.add_argument("-s", "--sort", type=str, default="e10", choices=SORT_KV.keys())
+ return parser.parse_args()
+
+
+def output_stations(stations: List[Dict[str, Any]]) -> None:
+ if not stations:
+ print("[*] No stations found.")
+ return
+ print(
+ tabulate(
+ stations,
+ headers={
+ "station_name": "Station Name",
+ "distance": "Distance (miles)",
+ "e5_price": "E5 (£/L)",
+ "e10_price": "E10 (£/L)",
+ "diesel_price": "B7S (£/L)",
+ },
+ floatfmt=".2f",
+ )
+ )
+
+
+def main():
+ args = parse_args()
+
+ try:
+ location = get_location(args.address)
+ except ValueError as e:
+ print(f"[*] {e}")
+ sys.exit(1)
+ df, last_modified = get_latest_data()
+
+ print(f"Last updated: {last_modified}")
+
+ df_filtered = filter_df(df, args, location)
+
+ sorted_stations_list = sort_stations(df_filtered, args.sort)
+
+ output_stations(sorted_stations_list)
+
+
+if __name__ == "__main__":
+ main()
git.ajschof.me — hosted by ajschofield — powered by cgit