Include airport pins on the map
This commit is contained in:
parent
60070d07fd
commit
0c02d9c899
47
web_view.py
47
web_view.py
|
@ -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>")
|
||||||
|
|
Loading…
Reference in a new issue