Include airport pins on the map

This commit is contained in:
Edward Betts 2024-01-12 16:20:36 +00:00
parent 60070d07fd
commit 0c02d9c899

View file

@ -3,6 +3,7 @@
"""Web page to show upcoming events.""" """Web page to show upcoming events."""
import inspect import inspect
import itertools
import operator import operator
import os.path import os.path
import sys import sys
@ -164,16 +165,14 @@ def load_travel(travel_type: str) -> list[StrDict]:
return items return items
def build_trip_list() -> list[Trip]: def load_trains() -> list[StrDict]:
"""Generate list of trips.""" """Load trains."""
trips: dict[date, Trip] = {}
data_dir = app.config["PERSONAL_DATA"] data_dir = app.config["PERSONAL_DATA"]
trains = load_travel("train")
stations = travel.parse_yaml("stations", data_dir) stations = travel.parse_yaml("stations", data_dir)
by_name = {station["name"]: station for station in stations} by_name = {station["name"]: station for station in stations}
trains = load_travel("train")
for train in trains: for train in trains:
assert train["from"] in by_name assert train["from"] in by_name
assert train["to"] in by_name assert train["to"] in by_name
@ -186,8 +185,30 @@ def build_trip_list() -> list[Trip]:
leg["from_station"] = by_name[train["from"]] leg["from_station"] = by_name[train["from"]]
leg["to_station"] = by_name[train["to"]] leg["to_station"] = by_name[train["to"]]
return trains
def load_flights() -> list[StrDict]:
"""Load flights."""
data_dir = app.config["PERSONAL_DATA"]
flights = load_travel("flight")
airports = travel.parse_yaml("airports", data_dir)
for flight in flights:
if flight["from"] in airports:
flight["from_airport"] = airports[flight["from"]]
if flight["to"] in airports:
flight["to_airport"] = airports[flight["to"]]
return flights
def build_trip_list() -> list[Trip]:
"""Generate list of trips."""
trips: dict[date, Trip] = {}
data_dir = app.config["PERSONAL_DATA"]
travel_items = sorted( travel_items = sorted(
load_travel("flight") + trains, key=operator.itemgetter("depart") load_flights() + load_trains(), key=operator.itemgetter("depart")
) )
data = { data = {
@ -239,20 +260,28 @@ def collect_station_coordinates(trip: Trip) -> list[tuple[float, float]]:
"""Extract and deduplicate station coordinates from trip.""" """Extract and deduplicate station coordinates from trip."""
stations = {} stations = {}
station_list = [] station_list = []
airports = {}
for t in trip.travel: for t in trip.travel:
if t["type"] != "train": if t["type"] == "train":
continue station_list += [t["from_station"], t["to_station"]]
station_list += [t["from_station"], t["to_station"]] for leg in t["legs"]:
for leg in t["legs"]: station_list.append(leg["from_station"])
station_list.append(leg["from_station"]) station_list.append(leg["to_station"])
station_list.append(leg["to_station"]) else:
assert t["type"] == "flight"
for field in "from_airport", "to_airport":
if field in t:
airports[t[field]["iata"]] = t[field]
for s in station_list: for s in station_list:
if s["uic"] in stations: if s["uic"] in stations:
continue continue
stations[s["uic"]] = s stations[s["uic"]] = s
return [(s["latitude"], s["longitude"]) for s in stations.values()] return [
(s["latitude"], s["longitude"])
for s in itertools.chain(stations.values(), airports.values())
]
@app.route("/trip/<start>") @app.route("/trip/<start>")