Source code for nba_stats_tracking.models.tracking.rebounding

from dataclasses import dataclass
from typing import List, Optional

from pydantic import BaseModel, Field


[docs]class ReboundingItem(BaseModel): # Only for player stats player_id: Optional[int] = Field(alias="PLAYER_ID") player_name: Optional[str] = Field(alias="PLAYER_NAME") # Only for team stats team_name: Optional[str] = Field(alias="TEAM_NAME") # Only for season stats season: Optional[str] = Field(alias="SEASON") # Only for game logs game_id: Optional[str] = Field(alias="GAME_ID") opponent_team_id: Optional[int] = Field(alias="OPPONENT_TEAM_ID") team_id: int = Field(alias="TEAM_ID") team_abbreviation: str = Field(alias="TEAM_ABBREVIATION") games_played: int = Field(default=0, alias="GP") wins: int = Field(default=0, alias="W") losses: int = Field(default=0, alias="L") minutes: float = Field(default=0, alias="MIN") oreb: float = Field(default=0, alias="OREB") oreb_contest: float = Field(default=0, alias="OREB_CONTEST") oreb_uncontest: float = Field(default=0, alias="OREB_UNCONTEST") oreb_chances: float = Field(default=0, alias="OREB_CHANCES") oreb_chance_defer: float = Field(default=0, alias="OREB_CHANCE_DEFER") dreb: float = Field(default=0, alias="DREB") dreb_contest: float = Field(default=0, alias="DREB_CONTEST") dreb_uncontest: float = Field(default=0, alias="DREB_UNCONTEST") dreb_chances: float = Field(default=0, alias="DREB_CHANCES") dreb_chance_defer: float = Field(default=0, alias="DREB_CHANCE_DEFER") @property def contested_oreb_pct(self): if self.oreb == 0: return 0 return self.oreb_contest / self.oreb @property def contested_dreb_pct(self): if self.dreb == 0: return 0 return self.dreb_contest / self.dreb def __add__(self, other): self.games_played += other.games_played self.wins += other.wins self.losses += other.losses self.minutes += other.minutes self.oreb += other.oreb self.oreb_contest += other.oreb_contest self.oreb_uncontest += other.oreb_uncontest self.oreb_chances += other.oreb_chances self.oreb_chance_defer + other.oreb_chance_defer self.dreb + other.dreb self.dreb_contest + other.dreb_contest self.dreb_uncontest + other.dreb_uncontest self.dreb_chances + other.dreb_chances self.dreb_chance_defer + other.dreb_chance_defer return self def __getitem__(self, item): return getattr(self, item)
[docs]@dataclass class ReboundingResults: results: List[ReboundingItem] def __init__(self, **kwargs): headers = kwargs.get("headers", []) rows = kwargs.get("rowSet", []) self.results = [ReboundingItem(**dict(zip(headers, row))) for row in rows]