Use a dataclass to represent conferences

Don't add conference location if location is in conference name

Closes: #77
This commit is contained in:
Edward Betts 2023-11-26 10:41:25 +00:00
parent 01a7c770f0
commit 9ca1a7358f

View file

@ -1,28 +1,57 @@
"""Conferences.""" """Conferences."""
import dataclasses
import decimal
from datetime import date, datetime
import yaml import yaml
from .types import Event 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]: def get_list(filepath: str) -> list[Event]:
"""Read conferences from a YAML file and return a list of Event objects.""" """Read conferences from a YAML file and return a list of Event objects."""
with open(filepath, "r") as f: return [
data = yaml.safe_load(f) Event(
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(
name="conference", name="conference",
date=start_date, date=conf.start,
end_date=end_date, end_date=conf.end,
title=f'🎤 {conf["name"]} ({conf["location"]})', title=f"🎤 {conf.display_name}",
url=conf.get("url"), url=conf.url,
) )
events.append(event) for conf in (
Conference(**conf)
return events for conf in yaml.safe_load(open(filepath, "r"))["conferences"]
)
]