import datetime class Event: def __init__(self, event_id:int, name:str, logo_url:str = None) -> None: self.__event_id = event_id self.__name = name self.__logo_url = logo_url @property def event_id(self): return self.__event_id @property def name(self): return self.__name @property def logo_url(self): return self.__logo_url def to_dict(self) -> dict: return { 'event_id': self.event_id, 'name': self.name, 'logo_url': self.logo_url } @classmethod def from_dict(cls, data: dict) -> 'Event': return cls(data['event_id'], data['name'], data.get('logo_url')) def __str__(self) -> str: return f"" class Team: def __init__(self, name:str, logo_url:str) -> None: self.__name = name self.__logo_url = logo_url @property def name(self): return self.__name @property def logo_url(self): return self.__logo_url def to_dict(self) -> dict: return { 'name': self.name, 'logo_url': self.logo_url } @classmethod def from_dict(cls, data: dict) -> 'Team': return cls(data['name'], data['logo_url']) def __str__(self) -> str: return f"" class Match: def __init__(self, url:str, format:str, event:Event, teams:list[Team], date=None): self.__date = date self.__url = url self.__format = format self.__event = event self.__teams = tuple(teams) @property def date(self): return self.__date @property def url(self): return self.__url @property def format(self): return self.__format @property def event(self): return self.__event @property def teams(self): return self.__teams @property def date_iso(self): return self.__date.isoformat() @property def teams_names(self): return (self.__teams[0].name, self.__teams[1].name) @property def teams_logos(self): return (self.__teams[0].logo_url, self.__teams[1].logo_url) def to_dict(self) -> dict: return { 'url': self.url, 'format': self.format, 'event': self.event.to_dict(), 'teams': [team.to_dict() for team in self.teams], 'date': self.date.isoformat() if self.date else None } @classmethod def from_dict(cls, data: dict) -> 'Match': event = Event.from_dict(data['event']) teams = [Team.from_dict(team_data) for team_data in data['teams']] date = datetime.datetime.fromisoformat(data['date']) if data['date'] else None return cls(data['url'], data['format'], event, teams, date) def __str__(self) -> str: return f""