"""Responsible for handing full gameweeks"""
from typing import Optional, List
from cached_property import cached_property
from .fixture import FixtureResult
from .shared import MatchTime
[docs]class GameWeeks:
"""Gameweeks represent a week of matches"""
def __init__(self, data: dict):
self._data = data
def __str__(self) -> str:
return f"Gameweek {self.gameweek_num} id: {self.id}"
def __repr__(self) -> str:
return f"Gameweek {self.gameweek_num} id: {self.id}"
@cached_property
def gameweek_num(self) -> int:
"""
:return: Number of the gameweek
:rtype: int
"""
return self._data["gameweek"]
@cached_property
def start(self) -> MatchTime:
"""
:return: Start of gameweek
:rtype: MatchTime
"""
return MatchTime(self._data["from"])
@cached_property
def end(self) -> MatchTime:
"""
:return: End of gameweek
:rtype: MatchTime
"""
return MatchTime(self._data["until"])
@cached_property
def matches(self) -> int:
"""
:return: Amount of matches in gameweek
:rtype: int
"""
return self._data["matches"]
@cached_property
def status(self) -> str:
"""
:return: Status of the gameweek
:rtype: str
"""
return self._data["status"]
@cached_property
def id(self) -> int:
"""
:return: ID of gameweek
:rtype: int
"""
return self._data["id"]
[docs]class GameWeekFixture(FixtureResult):
"""Gameweek fixture. Does not have fixture events"""
def __init__(self, data: dict):
super().__init__({"fixture": data})
self.id = int(data["id"])
@cached_property
def goals(self) -> List["GameWeekGoal"]:
"""
Goals scored in the fixture
:return: List of goals
:rtype: List[GameWeekGoal]
"""
return [GameWeekGoal(x) for x in self._fixture_data["goals"]]
[docs]class GameWeekGoal:
"""Goal from a gameweek fixture"""
def __init__(self, data: dict):
self._data = data
@cached_property
def scorer(self) -> int:
"""
:return: Id of player who scored the goal
:rtype: int
"""
return int(self._data["personId"])
@cached_property
def assist(self) -> Optional[int]:
"""
:return: Id of player who assisted the score if any
:rtype: int
"""
try:
return int(self._data.get("assistId"))
except TypeError:
return None
@cached_property
def seconds(self) -> int:
"""
:return: Second when goal was scored
:rtype: int
"""
return self._data["clock"]["secs"]
@cached_property
def time(self) -> str:
"""
:return: Time when goal was scored
:rtype: str
"""
return self._data["clock"]["label"]
@cached_property
def phase(self) -> int:
"""
:return: Phase of the game when the goal was scored
:rtype: str
"""
return int(self._data["phase"])
@cached_property
def type(self) -> str:
"""
:return: Type of goal. Either G for goal or P for penalty
:rtype: str
"""
return self._data["type"]
@cached_property
def description(self) -> str:
"""
:return: Usually same as type
:rtype: str
"""
return self._data["description"]