119 lines
3.1 KiB
Python
119 lines
3.1 KiB
Python
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"<Event event_id={self.event_id} name='{self.name}'>"
|
|
|
|
|
|
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"<Team logo_url='{self.logo_url}' name='{self.name}'>"
|
|
|
|
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"<Match date='{self.date}' url='{self.url}' format='{self.url}' event={self.event} teams='{','.join(self.teams_names)}'>" |