From 9ca1a7358f10dc64e015b53f059454f7a9df5509 Mon Sep 17 00:00:00 2001 From: Edward Betts Date: Sun, 26 Nov 2023 10:41:25 +0000 Subject: [PATCH] Use a dataclass to represent conferences Don't add conference location if location is in conference name Closes: #77 --- agenda/conference.py | 63 ++++++++++++++++++++++++++++++++------------ 1 file changed, 46 insertions(+), 17 deletions(-) diff --git a/agenda/conference.py b/agenda/conference.py index 2e60d6f..5f8972f 100644 --- a/agenda/conference.py +++ b/agenda/conference.py @@ -1,28 +1,57 @@ """Conferences.""" +import dataclasses +import decimal +from datetime import date, datetime + import yaml from .types import Event +@dataclasses.dataclass +class Conference: + """Conference.""" + + name: str + topic: str + location: str + start: date | datetime + end: date | datetime + venue: str | None = None + address: str | None = None + url: str | None = None + accommodation_booked: bool = False + transport_booked: bool = False + going: bool = False + registered: bool = False + speaking: bool = False + online: bool = False + price: decimal.Decimal | None = None + currency: str | None = None + + @property + def display_name(self) -> str: + """Add location if not already in conference name.""" + return ( + self.name + if self.location in self.name + else f"{self.name} ({self.location})" + ) + + def get_list(filepath: str) -> list[Event]: """Read conferences from a YAML file and return a list of Event objects.""" - with open(filepath, "r") as f: - data = yaml.safe_load(f) - - events = [] - for conf in data.get("conferences", []): - start_date = conf["start"] - end_date = conf["end"] - - # Skip the conference if it is before the input date. - event = Event( + return [ + Event( name="conference", - date=start_date, - end_date=end_date, - title=f'🎤 {conf["name"]} ({conf["location"]})', - url=conf.get("url"), + date=conf.start, + end_date=conf.end, + title=f"🎤 {conf.display_name}", + url=conf.url, ) - events.append(event) - - return events + for conf in ( + Conference(**conf) + for conf in yaml.safe_load(open(filepath, "r"))["conferences"] + ) + ]