diff --git a/agenda/trip.py b/agenda/trip.py index 2a4f7ee..d0767e6 100644 --- a/agenda/trip.py +++ b/agenda/trip.py @@ -23,7 +23,9 @@ def load_travel(travel_type: str, data_dir: str) -> list[StrDict]: return items -def load_trains(data_dir: str) -> list[StrDict]: +def load_trains( + data_dir: str, route_distances: travel.RouteDistances | None = None +) -> list[StrDict]: """Load trains.""" trains = load_travel("train", data_dir) stations = travel.parse_yaml("stations", data_dir) @@ -43,6 +45,12 @@ def load_trains(data_dir: str) -> list[StrDict]: leg["from_station"] = by_name[leg["from"]] leg["to_station"] = by_name[leg["to"]] + if route_distances: + travel.add_leg_route_distance(leg, route_distances) + + if all("distance" in leg for leg in train["legs"]): + train["distance"] = sum(leg["distance"] for leg in train["legs"]) + return trains @@ -68,7 +76,10 @@ def load_flights(data_dir: str) -> list[StrDict]: return flights -def build_trip_list(data_dir: str | None = None) -> list[Trip]: +def build_trip_list( + data_dir: str | None = None, + route_distances: travel.RouteDistances | None = None, +) -> list[Trip]: """Generate list of trips.""" trips: dict[date, Trip] = {} @@ -80,7 +91,8 @@ def build_trip_list(data_dir: str | None = None) -> list[Trip]: yaml_trip_lookup = {item["trip"]: item for item in yaml_trip_list} travel_items = sorted( - load_flights(data_dir) + load_trains(data_dir), key=depart_datetime + load_flights(data_dir) + load_trains(data_dir, route_distances=route_distances), + key=depart_datetime, ) data = { diff --git a/web_view.py b/web_view.py index 651518a..bb6ec2d 100755 --- a/web_view.py +++ b/web_view.py @@ -218,9 +218,11 @@ def accommodation_list() -> str: @app.route("/trip") def trip_list() -> str: """Page showing a list of trips.""" + route_distances = agenda.travel.load_route_distances(app.config["DATA_DIR"]) + trip_list = [ trip - for trip in agenda.trip.build_trip_list() + for trip in agenda.trip.build_trip_list(route_distances=route_distances) if flask.g.user.is_authenticated or not trip.private ] @@ -309,9 +311,10 @@ def human_readable_delta(future_date: date) -> str | None: @app.route("/trip/") def trip_page(start: str) -> str: """Individual trip page.""" + route_distances = agenda.travel.load_route_distances(app.config["DATA_DIR"]) trip_list = [ trip - for trip in agenda.trip.build_trip_list() + for trip in agenda.trip.build_trip_list(route_distances=route_distances) if flask.g.user.is_authenticated or not trip.private ]