Source code for fpl.models.fixture

from ..utils import team_converter, date_formatter
from .player import Player


def add_player(location, information):
    """Appends player to the location list."""
    player = Player(information["element"])
    goals = information["value"]
    location.append({"player": player, "goals": goals})


[docs]class Fixture: """A class representing a fixture in Fantasy Premier League.""" def __init__(self, fixture_information): for k, v in fixture_information.items(): if k == "stats": v = {w["identifier"]: {"a": w["a"], "h": w["h"]} for w in v} setattr(self, k, v)
[docs] def get_goalscorers(self): """Returns all players who scored in the fixture. :rtype: dict """ try: return self.stats["goals_scored"] except KeyError: return {"a": [], "h": []}
[docs] def get_assisters(self): """Returns all players who made an assist in the fixture. :rtype: dict """ try: return self.stats["assists"] except KeyError: return {"a": [], "h": []}
[docs] def get_own_goalscorers(self): """Returns all players who scored an own goal in the fixture. :rtype: dict """ try: return self.stats["own_goals"] except KeyError: return {"a": [], "h": []}
[docs] def get_yellow_cards(self): """Returns all players who received a yellow card in the fixture. :rtype: dict """ try: return self.stats["yellow_cards"] except KeyError: return {"a": [], "h": []}
[docs] def get_red_cards(self): """Returns all players who received a red card in the fixture. :rtype: dict """ try: return self.stats["red_cards"] except KeyError: return {"a": [], "h": []}
[docs] def get_penalty_saves(self): """Returns all players who saved a penalty in the fixture. :rtype: dict """ try: return self.stats["penalties_saved"] except KeyError: return {"a": [], "h": []}
[docs] def get_penalty_misses(self): """Returns all players who missed a penalty in the fixture. :rtype: dict """ try: return self.stats["penalties_missed"] except KeyError: return {"a": [], "h": []}
[docs] def get_saves(self): """Returns all players who made a save in the fixture. :rtype: dict """ try: return self.stats["saves"] except KeyError: return {"a": [], "h": []}
[docs] def get_bonus(self, provisional=False): """Returns all players who received bonus points in the fixture. :rtype: dict """ if self.finished: return self.stats["bonus"] elif self.started and provisional: bps = self.get_bps() home = [b["element"] for b in bps["h"]] away = [b["element"] for b in bps["a"]] bps = bps["a"] + bps["h"] bps = {b["element"]: b["value"] for b in bps} bps_values = set(bps.values()) try: bps_1st = max(bps_values) bps_values.remove(bps_1st) bps_2nd = max(bps_values) bps_values.remove(bps_2nd) bps_3rd = max(bps_values) except ValueError: return {"a": [], "h": []} else: bonus_3rd = list( filter(lambda x: bps[x] == bps_1st, bps.keys())) bonus_2nd = bonus_1st = [] if len(bonus_3rd) == 1: bonus_2nd = list( filter(lambda x: bps[x] == bps_2nd, bps.keys())) if len(bonus_3rd) + len(bonus_2nd) == 2: # 2 way tie for 3 bonus if len(bonus_3rd) == 2: bonus_1st = list( filter(lambda x: bps[x] == bps_2nd, bps.keys())) else: bonus_1st = list( filter(lambda x: bps[x] == bps_3rd, bps.keys())) bonus_3rd = [{"value": 3, "element": b} for b in bonus_3rd] bonus_2nd = [{"value": 2, "element": b} for b in bonus_2nd] bonus_1st = [{"value": 1, "element": b} for b in bonus_1st] bonus = bonus_3rd + bonus_2nd + bonus_1st h = [] a = [] for b in bonus: if b["element"] in home: h.append(b) elif b["element"] in away: a.append(b) return {"a": a, "h": h} else: return {"a": [], "h": []}
[docs] def get_bps(self): """Returns the bonus points of each player. :rtype: dict """ try: return self.stats["bps"] except KeyError: return {"a": [], "h": []}
def __str__(self): return (f"{team_converter(self.team_h)} vs. " f"{team_converter(self.team_a)} - " f"{date_formatter(self.kickoff_time)}")