Source code for understatapi.endpoints.player

"""Player endpoint"""

from typing import Dict, Any, List
import requests
from requests.exceptions import HTTPError
from .base import BaseEndpoint
from ..parsers import PlayerParser
from ..exceptions import InvalidPlayer, PrimaryAttribute


[docs]class PlayerEndpoint(BaseEndpoint): """ Use this class to get data from a url of the form ``https://understat.com/player/<player_id>`` :Example: .. testsetup:: import requests from understatapi.endpoints import PlayerEndpoint .. testcleanup:: session.close() .. doctest:: >>> session = requests.Session() >>> player_ids = ["000", "111"] >>> for player in PlayerEndpoint(player_ids, session=session): ... print(player.player) 000 111 """ parser = PlayerParser()
[docs] def __init__(self, player: PrimaryAttribute, session: requests.Session) -> None: """ :param player: Id of the player(s) to get data for :param session: The current session """ self._primary_attr = player super().__init__(primary_attr=self._primary_attr, session=session)
@property def player(self) -> PrimaryAttribute: """player id""" return self._primary_attr
[docs] def _get_data(self, **kwargs: Any) -> Dict[str, Any]: """ Get data on a per-player basis via AJAX endpoint. :param kwargs: Keyword argument to pass to :meth:`understatapi.endpoints.base.BaseEndpoint._request_ajax` :return: Dictionary with keys: player, matches, shots, groups, etc. """ if not isinstance(self.player, str): raise TypeError("``player`` must be a string") self._check_args() endpoint = f"getPlayerData/{self.player}" try: return self._request_ajax(endpoint, **kwargs) except HTTPError as err: raise InvalidPlayer( f"{self.player} is not a valid player or player id", player=self.player, ) from err
[docs] def get_match_data(self, **kwargs: Any) -> List[Dict[str, Any]]: """ Get match level data for a player :param kwargs: Keyword argument to pass to :meth:`understatapi.endpoints.base.BaseEndpoint._request_ajax` """ data = self._get_data(**kwargs) return data.get("matches", [])
[docs] def get_shot_data(self, **kwargs: Any) -> List[Dict[str, Any]]: """ Get shot level data for a player :param kwargs: Keyword argument to pass to :meth:`understatapi.endpoints.base.BaseEndpoint._request_ajax` """ data = self._get_data(**kwargs) return data.get("shots", [])
[docs] def get_season_data(self, **kwargs: Any) -> List[Dict[str, Any]]: """ Get season level data for a player :param kwargs: Keyword argument to pass to :meth:`understatapi.endpoints.base.BaseEndpoint._request_ajax` """ data = self._get_data(**kwargs) return data.get("groups", [])