Support nested conference dates in trips

This commit is contained in:
Edward Betts 2026-06-22 10:33:56 +01:00
parent 57b2db205d
commit 56eea3f7a3

View file

@ -11,7 +11,7 @@ import flask
import pycountry
import yaml
from agenda import ical, travel, trip_schengen
from agenda import conference, ical, travel, trip_schengen
from agenda.types import StrDict, Trip, TripElement
from agenda.utils import as_date, as_datetime, depart_datetime
@ -333,12 +333,18 @@ def build_trip_list(
yaml_trip_list = travel.parse_yaml("trips", data_dir)
flight_bookings = load_flight_bookings(data_dir)
conferences = travel.parse_yaml("conferences", data_dir)
for conf in conferences:
date_fields = conference.conference_date_fields(conf)
if "start" in date_fields:
conf["start"] = date_fields["start"]
conf["end"] = date_fields["end"]
data = {
"flight_bookings": flight_bookings,
"travel": collect_travel_items(flight_bookings, data_dir, route_distances),
"accommodation": travel.parse_yaml("accommodation", data_dir),
"conferences": travel.parse_yaml("conferences", data_dir),
"conferences": conferences,
"events": travel.parse_yaml("events", data_dir),
}
@ -467,10 +473,10 @@ def conference_free_days(trip: Trip) -> dict[str, tuple[int, int]]:
return {}
def conf_attend_start(c: StrDict) -> date:
return as_date(c.get("attend_start") or c["start"])
return typing.cast(date, as_date(c.get("attend_start") or c["start"]))
def conf_attend_end(c: StrDict) -> date:
return as_date(c.get("attend_end") or c["end"])
return typing.cast(date, as_date(c.get("attend_end") or c["end"]))
sorted_confs = sorted(trip.conferences, key=conf_attend_start)
result: dict[str, tuple[int, int]] = {}
@ -864,7 +870,7 @@ def _trip_element_label(element: TripElement) -> str:
return start_loc
if isinstance(end_loc, str):
return end_loc
return element.title
return typing.cast(str, element.title)
def _trip_element_summary(trip: Trip, element: TripElement) -> str: