#!/usr/bin/python3 import json import agenda.travel import agenda.trip # from rich.pretty import pprint config = __import__("config.default", fromlist=[""]) def get_rail_route_distances() -> agenda.travel.RouteDistances: """Rail journey route distances.""" route_distances = agenda.travel.load_route_distances(config.DATA_DIR) trains = agenda.trip.load_trains( config.PERSONAL_DATA, route_distances=route_distances ) for train in trains: for leg in train["legs"]: train_from, train_to = leg["from_station"], leg["to_station"] assert leg["from"] != leg["to"] s1, s2 = sorted((leg["from"], leg["to"])) if (s1, s2) in route_distances: continue filename = train_from.get("routes", {}).get(train_to["uic"]) if not filename: continue geojson = agenda.trip.read_geojson( config.PERSONAL_DATA, "train_routes/" + filename ) dist = agenda.travel.train_leg_distance(json.loads(geojson)) route_distances[(s1, s2)] = dist return route_distances def get_ferry_route_distances() -> agenda.travel.RouteDistances: """Rail journey route distances.""" route_distances: agenda.travel.RouteDistances = {} items = agenda.trip.load_ferries( config.PERSONAL_DATA, route_distances=route_distances ) for item in items: item_from, item_to = item["from_terminal"], item["to_terminal"] assert item["from"] != item["to"] s1, s2 = sorted((item["from"], item["to"])) if (s1, s2) in route_distances: continue filename = item_from.get("routes", {}).get(item_to["name"]) if not filename: continue geojson = agenda.trip.read_geojson( config.PERSONAL_DATA, "ferry_routes/" + filename ) dist = agenda.travel.train_leg_distance(json.loads(geojson)) route_distances[(s1, s2)] = dist return route_distances def get_flight_distances(): flights = agenda.trip.load_flights( config.PERSONAL_DATA, ) for item in flights: # pprint(item) print(item["from"], item["to"], agenda.travel.flight_distance(item)) # route_distances = get_rail_route_distances() route_distances = get_ferry_route_distances() print(agenda.travel.route_distances_as_json(route_distances)) # get_flight_distances()