Source code for chicken_dinner.models.match.match

"""Match model."""
from chicken_dinner.constants import map_to_map_name
from chicken_dinner.models.match.asset import Asset
from chicken_dinner.models.match.roster import Roster
from chicken_dinner.models.telemetry import Telemetry


[docs]class Match(object): """Match object. :param pubg: a PUBG instance :param str match_id: the ``match_id`` for this match :param str shard: the shard for this match """ def __init__(self, pubg, match_id, shard=None): self._pubg = pubg self._shard = shard #: The match id for this match self.match_id = match_id #: The API response for this object self.response = self._pubg._core.match(match_id, shard) self.roster_to_participant = {} self.participant_to_roster = {} self._participant_data = {} rosters_idx = [] for idx, item in enumerate(self.response["included"]): if item["type"] == "roster": rosters_idx.append(idx) self.roster_to_participant[item["id"]] = [] for participant in item["relationships"]["participants"]["data"]: self.roster_to_participant[item["id"]].append(participant["id"]) self.participant_to_roster[participant["id"]] = item["id"] elif item["type"] == "participant": self._participant_data[item["id"]] = item elif item["type"] == "asset": self.asset = Asset(pubg, self, item, shard) #: A list of Roster instances for this match self.rosters = [Roster(pubg, self, self.response["included"][idx], shard) for idx in rosters_idx] @property def shard(self): """The shard for this match.""" return self._shard or self._pubg.shard @property def asset_id(self): """The asset id for this match.""" return self.asset.id @property def data(self): """The data payload from the response for this match.""" return self.response["data"] @property def created_at(self): """When the match was created.""" return self.data["attributes"]["createdAt"] @property def duration(self): """The duration of the match.""" return self.data["attributes"]["duration"] @property def game_mode(self): """The game mode for the match.""" return self.data["attributes"]["gameMode"] @property def id(self): """The match id.""" return self.data["id"] @property def map_name(self): """The name of the map on which this match was played.""" return map_to_map_name[self.data["attributes"]["mapName"]] @property def map_id(self): """The map id on which this match was played.""" return self.data["attributes"]["mapName"] @property def participants(self): """A list of Participant instances for match participants.""" return [participant for roster in self.rosters for participant in roster.participants] @property def stats(self): """Stats for this match.""" return self.data["attributes"]["stats"] @property def tags(self): """Tags associated with this match.""" return self.data["attributes"]["tags"] @property def title_id(self): """The title id associated with this match.""" return self.data["attributes"]["titleId"] @property def url(self): """The URL for this match resource.""" return self.data["links"]["self"] @property def telemetry_url(self): """The URL for the telemetry data for this match.""" return self.asset.url
[docs] def get_telemetry(self, map_assets=False): """Download match telemetry and create a Telemetry object instance. :param bool map_assets: whether to map asset ids to named values, e.g. map ``Item_Weapon_AK47_C`` to ``AKM``. :return: a :class:`chicken_dinner.models.telemetry.Telemetry` instance for this match. """ return Telemetry(self._pubg, self.telemetry_url, shard=self.shard)
@property def rosters_player_names(self): """A mapping of roster_ids to player names for this match.""" return {roster.id: roster.player_names for roster in self.rosters} @property def winner(self): """The Roster instance for the winner of this match.""" for roster in self.rosters: if roster.won: return roster @property def is_custom(self): """Whether or not the match is a custom match.""" return self.data["attributes"]["isCustomMatch"]