diff --git a/agenda/data.py b/agenda/data.py index 1cb891f..23dd6e1 100644 --- a/agenda/data.py +++ b/agenda/data.py @@ -37,7 +37,7 @@ from . import ( uk_tz, waste_schedule, ) -from .types import Event, StrDict +from .types import Event, StrDict, Trip here = dateutil.tz.tzlocal() @@ -144,10 +144,14 @@ def get_yaml_event_end_date_field(item: dict[str, str]) -> str: ) -def read_events_yaml(data_dir: str, start: date, end: date) -> list[Event]: +def read_events_yaml( + data_dir: str, start: date, end: date, skip_trips: bool = False +) -> list[Event]: """Read eventes from YAML file.""" events: list[Event] = [] for item in yaml.safe_load(open(os.path.join(data_dir, "events.yaml"))): + if "trip" in item and skip_trips: + continue duration = ( isodate.parse_duration(item["duration"]) if "duration" in item else None ) @@ -247,10 +251,10 @@ def busy_event(e: Event) -> bool: "event", "accommodation", "conference", - "dodainville", "transport", "meetup", "party", + "trip", }: return False @@ -281,6 +285,40 @@ async def time_function( return name, result, end_time - start_time +def gap_list( + today: date, config: flask.config.Config, trips: list[Trip] +) -> list[StrDict]: + last_year = today - timedelta(days=365) + next_year = today + timedelta(days=2 * 365) + + my_data = config["PERSONAL_DATA"] + events = read_events_yaml(my_data, last_year, next_year, skip_trips=True) + + for trip in trips: + event_type = "trip" + if trip.events and not trip.conferences: + event_type = trip.events[0]["name"] + elif len(trip.conferences) == 1 and trip.conferences[0].get("hackathon"): + event_type = "hackathon" + events.append( + Event( + name=event_type, + title=trip.title + " " + trip.country_flags, + date=trip.start, + end_date=trip.end, + url=flask.url_for("trip_page", start=trip.start.isoformat()), + ) + ) + + busy_events = [ + e + for e in sorted(events, key=lambda e: e.as_date) + if e.as_date > today and e.as_date < next_year and busy_event(e) + ] + + return find_gaps(busy_events) + + async def get_data( now: datetime, config: flask.config.Config ) -> typing.Mapping[str, str | object]: diff --git a/templates/gaps.html b/templates/gaps.html index ae24883..7cb7fbf 100644 --- a/templates/gaps.html +++ b/templates/gaps.html @@ -17,11 +17,31 @@
{% for gap in gaps %}