Source code for chicken_dinner.models.leaderboard

"""Leaderboard model."""
from chicken_dinner.models.player import Player
from chicken_dinner.util import camel_to_snake


[docs]class Leaderboard(object): """Leaderboard model. An object for a leaderboard and its top players. :param pubg: an instance of the class :class:`chicken_dinner.pubgapi.PUBG` :param str game_mode: the game mode for the leaderboard :param str shard: the shard for the seasons response """ def __init__(self, pubg, game_mode, shard=None): self._shard = shard self._game_mode = game_mode self._pubg = pubg self.response = self._pubg._core.leaderboard(game_mode) self._rank_to_index = { p["attributes"]["rank"]: idx for idx, p in enumerate(self.response["included"]) } @property def shard(self): """The shard for this leaderboard.""" return self._shard or self._pubg.shard @property def game_mode(self): """The game mode for this leaderboard""" return self._game_mode @property def ids(self): """The player ids from this leaderboard in rank order.""" return [p["id"] for p in self.response["data"]["relationships"]["players"]["data"]] @property def url(self): """A URL for this leaderboard resource.""" return self.response["links"]["self"] @property def names(self): """The player names from this leaderboard in rank order.""" return [ self.response["included"][self._rank_to_index[rank]]["attributes"]["name"] for rank in range(1, len(self.response["included"]) + 1) ]
[docs] def ids_to_names(self): """A map of player ids to names.""" return {p["id"]: p["attributes"]["name"] for p in self.response["included"]}
[docs] def names_to_ids(self): """A map of player names to ids""" return {p["attributes"]["name"]: p["id"] for p in self.response["included"]}
[docs] def name(self, rank): """The name of the player at the given rank.""" return self.response["included"][self._rank_to_index[rank]]["attributes"]["name"]
[docs] def id(self, rank): """The player_id of the player at the given rank.""" return self.response["data"]["relationships"]["players"]["data"][rank - 1]["id"]
[docs] def stats(self, rank): """The player stats for the player at the given rank.""" return { camel_to_snake(k): v for k, v in self.response["included"][self._rank_to_index[rank]]["attributes"]["stats"].items() }
[docs] def data(self, rank): """The player raw data blob from the response for the player at the given rank.""" return self.response["included"][rank - 1]
[docs] def get_player(self, rank): """Get a player object for the player at the given rank.""" return Player(self._pubg, self.id(rank), shard=self._shard)