Skip to content

Commit d05731c

Browse files
committed
refactor: migrate stats module to Pydantic
Models converted (8 files, 80+ classes): stats.py (base classes): - Stat, Split, PitchArsenalSplit, ExpectedStatistics, Sabermetrics - ZoneCodes, Zones, HotColdZones, Chart, SprayCharts - PitchArsenal, OutsAboveAverage, PlayerGameLogStat hitting.py: - SimpleHittingSplit, AdvancedHittingSplit, HittingPlay - HittingWinLoss, HittingHomeAndAway, HittingCareer, HittingSeason - HittingGameLog, HittingPlayLog, HittingPitchLog, HittingByMonth - HittingVsTeam, HittingVsPlayer, HittingExpectedStatistics, etc. pitching.py: - SimplePitchingSplit, AdvancedPitchingSplit, PitchingPlay - PitchingSeason, PitchingCareer, PitchingGameLog, PitchingLog - PitchingByMonth, PitchingHomeAndAway, PitchingWinLoss - PitchingVsTeam, PitchingVsPlayer, PitchingRankings, etc. fielding.py: - SimpleFieldingSplit, FieldingSeason, FieldingCareer - FieldingHomeAndAway, FieldingGameLog, FieldingByMonth, etc. catching.py: - SimpleCatchingSplit, CatchingSeason, CatchingCareer - CatchingGameLog, CatchingHomeAndAway, CatchingWinLoss, etc. running.py: - RunningOpponentsFaced game.py: - SimpleGameStats, SeasonGame, CareerGame - CareerRegularSeasonGame, CareerPlayoffsGame Key changes: - All fields use snake_case with aliases for API compatibility - Fixed type mismatches: stolenbasepercentage, groundoutstoairouts, atbatsperhomerun, whiffpercentage are strings not ints - Game model fields made optional for stats endpoint compatibility - Field validators handle empty dicts from API as None - Updated all stats tests to use new Pythonic field names (totalsplits -> total_splits)
1 parent f12ee76 commit d05731c

16 files changed

Lines changed: 1946 additions & 1978 deletions

mlbstatsapi/models/game/game.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
from typing import Optional
12
from pydantic import Field
23
from mlbstatsapi.models.base import MLBBaseModel
34
from mlbstatsapi.models.game.gamedata import GameData
@@ -24,9 +25,9 @@ class Game(MLBBaseModel):
2425
"""
2526
game_pk: int = Field(alias="gamepk")
2627
link: str
27-
metadata: MetaData
28-
game_data: GameData = Field(alias="gamedata")
29-
live_data: LiveData = Field(alias="livedata")
28+
metadata: Optional[MetaData] = None
29+
game_data: Optional[GameData] = Field(default=None, alias="gamedata")
30+
live_data: Optional[LiveData] = Field(default=None, alias="livedata")
3031

3132
@property
3233
def id(self) -> int:

0 commit comments

Comments
 (0)