Add conference series pages

This commit is contained in:
Edward Betts 2026-06-22 10:25:55 +01:00
parent 098c7e4447
commit 57b2db205d
9 changed files with 367 additions and 3 deletions

View file

@ -2,6 +2,7 @@
import dataclasses
import decimal
import os
import typing
from datetime import date, datetime
@ -16,6 +17,18 @@ DATE_STATUSES = {"exact", "approximate", "tentative"}
DATED_STATUSES = {"exact", "tentative"}
class ConferenceSeries(typing.TypedDict, total=False):
"""Conference series metadata."""
name: str
topic: str
url: str
notes: str
cadence: str
usual_location: str
country: str
@dataclasses.dataclass
class Conference:
"""Conference."""
@ -23,6 +36,7 @@ class Conference:
name: str
topic: str
location: str
series: str | None = None
start: date | datetime | None = None
end: date | datetime | None = None
trip: date | None = None
@ -166,6 +180,20 @@ def validate_conference_date_fields(item: StrDict) -> StrDict:
return fields
def load_series(data_dir: str) -> dict[str, ConferenceSeries]:
"""Load conference series metadata."""
filepath = os.path.join(data_dir, "conference_series.yaml")
if not os.path.exists(filepath):
return {}
loaded = yaml.safe_load(open(filepath, "r"))
if loaded is None:
return {}
if not isinstance(loaded, dict):
raise ValueError("conference_series.yaml must be a mapping")
return typing.cast(dict[str, ConferenceSeries], loaded)
def get_list(filepath: str) -> list[Event]:
"""Read conferences from a YAML file and return a list of Event objects."""
events: list[Event] = []