Source code for fpl.models.player
from ..constants import API_URLS
from ..utils import fetch, position_converter, team_converter
[docs]class Player():
"""A class representing a player in Fantasy Premier League."""
def __init__(self, player_information, session):
self._session = session
for k, v in player_information.items():
setattr(self, k, v)
@property
async def games_played(self):
"""The number of games where the player has played at least 1 minute.
:rtype: int
"""
if hasattr(self, "history"):
fixtures = self.history
else:
player_summary = await fetch(
self._session, API_URLS["player"].format(self.id))
fixtures = player_summary["history"]
return sum([1 for fixture in fixtures if fixture["minutes"] > 0])
@property
def pp90(self):
"""Points per 90 minutes.
:rtype: float
"""
minutes = float(getattr(self, "minutes", 0))
if minutes == 0:
return 0.0
return getattr(self, "total_points", 0.0) / minutes * 90.0
@property
async def vapm(self):
"""Value added per million.
:rtype: float
"""
games_played = await self.games_played
cost = getattr(self, "now_cost", 0)
if games_played == 0 or cost == 0:
return 0.0
return (getattr(self, "total_points", 0.0) / games_played - 2) / (cost / 10)
def __str__(self):
return (f"{self.web_name} - "
f"{position_converter(self.element_type)} - "
f"{team_converter(self.team)}")
class PlayerSummary:
"""A class representing a player in the Fantasy Premier League's summary.
"""
def __init__(self, player_summary):
for k, v in player_summary.items():
setattr(self, k, v)