Skip to content

Commit

Permalink
progress
Browse files Browse the repository at this point in the history
  • Loading branch information
mspah-dp committed Mar 25, 2024
1 parent 3268b03 commit 9ff44c7
Show file tree
Hide file tree
Showing 60 changed files with 103 additions and 22,488 deletions.
32 changes: 15 additions & 17 deletions mlbstatsapi/models/attendances/attributes.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,10 @@ class AttendanceHighLowGame(BaseModel):
daynight : str
Type of time of day for game
"""
gamepk: int
gamePk: int
link: str
content: Union[AttendanceHighLowGameContent, dict]
daynight: str
dayNight: str

class AttendenceGameType(BaseModel):
"""
Expand Down Expand Up @@ -123,9 +123,6 @@ class AttendanceRecords(BaseModel):
attendanceTotalHome: Optional[int] = None
attendanceOpeningAverage: Optional[int] = None




class AttendanceTotals(BaseModel):
"""
A class to represent attendance aggregate toatls.
Expand Down Expand Up @@ -156,15 +153,16 @@ class AttendanceTotals(BaseModel):
attendancetotalhome : int
Attendance total home
"""
openingstotalaway: int
openingstotalhome: int
openingstotallost: int
openingstotalytd: int
attendanceaverageytd: int
attendancehigh: int
attendancehighdate: str
attendancetotal: int
attendancetotalaway: int
attendancetotalhome: int
attendanceaverageaway: Optional[int] = None
attendanceaveragehome: Optional[int] = None
openingsTotalAway: int
openingsTotalHome: int
openingsTotalLost: int
openingsTotalYtd: int
attendanceAverageYtd: int
attendanceHigh: int
attendanceHighDate: str
attendanceTotal: int
attendanceTotalAway: int
attendanceTotalHome: int
attendanceAverageAway: Optional[int] = None
attendanceAverageHome: Optional[int] = None

171 changes: 66 additions & 105 deletions mlbstatsapi/models/data/data.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
from dataclasses import dataclass, field, InitVar
from pydantic import BaseModel
from typing import List, Union, Dict, Any, Optional




@dataclass(repr=False)
class PitchBreak:
class PitchBreak(BaseModel):
"""
A class to hold pitch pitch break data
Expand All @@ -24,21 +23,17 @@ class PitchBreak:
spindirection : int
Pitch spinDirection
"""
breakangle: float
breaklength: float
breaky: float
breakvertical: Optional[float]
breakverticalinduced: Optional[float]
breakhorizontal: Optional[float]
spinrate: Optional[float] = None
spindirection: Optional[float] = None
breakAngle: float
breakLength: float
breakY: float
breakVertical: Optional[float]
breakVerticalInduced: Optional[float]
breakHorizontal: Optional[float]
spinRate: Optional[float] = None
spinDirection: Optional[float] = None

def __repr__(self) -> str:
kws = [f'{key}={value}' for key, value in self.__dict__.items() if value is not None]
return "{}({})".format(type(self).__name__, ", ".join(kws))

@dataclass(repr=False)
class PitchCoordinates:
class PitchCoordinates(BaseModel):
"""
A class to hold pitch coordinates for playLog
Expand Down Expand Up @@ -82,28 +77,24 @@ class PitchCoordinates:
y : float, default=None
Y coordinate where pitch crossed front of home plate
"""
ay: Optional[float] = None
az: Optional[float] = None
pfxx: Optional[float] = None
pfxz: Optional[float] = None
px: Optional[float] = None
pz: Optional[float] = None
vx0: Optional[float] = None
vy0: Optional[float] = None
vz0: Optional[float] = None
aY: Optional[float] = None
aZ: Optional[float] = None
pfxX: Optional[float] = None
pfxZ: Optional[float] = None
pX: Optional[float] = None
pZ: Optional[float] = None
vX0: Optional[float] = None
vY0: Optional[float] = None
vZ0: Optional[float] = None
x0: Optional[float] = None
y0: Optional[float] = None
z0: Optional[float] = None
ax: Optional[float] = None
aX: Optional[float] = None
x: Optional[float] = None
y: Optional[float] = None

def __repr__(self) -> str:
kws = [f'{key}={value}' for key, value in self.__dict__.items() if value is not None]
return "{}({})".format(type(self).__name__, ", ".join(kws))

@dataclass(repr=False)
class PitchData:
class PitchData(BaseModel):
"""
A class to hold data on a pitch
Expand Down Expand Up @@ -134,30 +125,21 @@ class PitchData:
strikezonedepth : float
The depth of the strikezone
"""
strikezonetop: float
strikezonebottom: float
breaks: Union[PitchBreak, dict]
coordinates: Optional[Union[PitchCoordinates, dict]] = field(default_factory=dict)
strikeZoneTop: float
strikeZoneBottom: float
breaks: PitchBreak
coordinates: Optional[PitchCoordinates] = None
extension: Optional[float] = None
startspeed: Optional[float] = None
endspeed: Optional[float] = None
startSpeed: Optional[float] = None
endSpeed: Optional[float] = None
zone: Optional[float] = None
typeconfidence: Optional[float] = None
platetime: Optional[float] = None
strikezonewidth: Optional[float] = None
strikezonedepth: Optional[float] = None
typeConfidence: Optional[float] = None
plateTime: Optional[float] = None
strikeZoneWidth: Optional[float] = None
strikeZoneDepth: Optional[float] = None


def __post_init__(self):
self.coordinates = PitchCoordinates(**self.coordinates) if self.coordinates else self.coordinates
self.breaks = PitchBreak(**self.breaks) if self.breaks else self.breaks

def __repr__(self) -> str:
kws = [f'{key}={value}' for key, value in self.__dict__.items() if value is not None]
return "{}({})".format(type(self).__name__, ", ".join(kws))

@dataclass
class HitCoordinates:
class HitCoordinates(BaseModel):
"""
A class to represent a play events hit location coordinates.
Expand All @@ -179,8 +161,7 @@ def x(self):
def y(self):
return self.coordy

@dataclass(repr=False)
class HitData:
class HitData(BaseModel):
"""
A class to represent a play events hit data.
Expand All @@ -205,21 +186,14 @@ class HitData:

trajectory: str
hardness: str
coordinates: Union[HitCoordinates, dict]
coordinates: HitCoordinates
location: Optional[int] = None
launchspeed: Optional[float] = None
launchangle: Optional[str] = None # this is a negative number and I'm brain farting on those
totaldistance: Optional[float] = None

def __post_init__(self):
self.coordinates = HitCoordinates(**self.coordinates) if self.coordinates else self.coordinates
launchSpeed: Optional[float] = None
launchAngle: Optional[float] = None
totalDistance: Optional[float] = None

def __repr__(self) -> str:
kws = [f'{key}={value}' for key, value in self.__dict__.items() if value is not None]
return "{}({})".format(type(self).__name__, ", ".join(kws))

@dataclass
class CodeDesc:
class CodeDesc(BaseModel):
"""
a class to hold a code and a description
Expand All @@ -234,8 +208,7 @@ class CodeDesc:
description: Optional[str] = None


@dataclass(repr=False)
class Count:
class Count(BaseModel):
"""
a class to hold a pitch count and base runners
Expand Down Expand Up @@ -264,17 +237,14 @@ class Count:
outs: int
strikes: int
inning: Optional[int] = None
runneron1b: Optional[bool] = None
runneron2b: Optional[bool] = None
runneron3b: Optional[bool] = None
istopinning: Optional[bool] = None
runnerOn1b: Optional[bool] = None
runnerOn2b: Optional[bool] = None
runnerOn3b: Optional[bool] = None
isTopInning: Optional[bool] = None

def __repr__(self) -> str:
kws = [f'{key}={value}' for key, value in self.__dict__.items() if value is not None and value]
return "{}({})".format(type(self).__name__, ", ".join(kws))

@dataclass(repr=False)
class PlayDetails:

class PlayDetails(BaseModel):
"""
A class to represent a gamelog stat for a hitter
Expand Down Expand Up @@ -309,36 +279,27 @@ class PlayDetails:
fromcatcher : bool
"""
call: Optional[Union[CodeDesc, dict]] = None
isinplay: Optional[bool] = None
isstrike: Optional[bool] = None
isscoringplay: Optional[bool] = None
isout: Optional[bool] = None
runnergoing: Optional[bool] = None
isball: Optional[bool] = None
isbasehit: Optional[bool] = None
isatbat: Optional[bool] = None
isplateappearance: Optional[bool] = None
batside: Optional[Union[CodeDesc, dict]] = field(default_factory=dict)
pitchhand: Optional[Union[CodeDesc, dict]] = field(default_factory=dict)
eventtype: Optional[str] = None
isInPlay: Optional[bool] = None
isStrike: Optional[bool] = None
isScoringPlay: Optional[bool] = None
isOut: Optional[bool] = None
runnerGoing: Optional[bool] = None
isBall: Optional[bool] = None
isBasehit: Optional[bool] = None
isAtBat: Optional[bool] = None
isPlateAppearance: Optional[bool] = None
batSide: Optional[CodeDesc] = None
pitchHand: Optional[CodeDesc] = None
eventType: Optional[str] = None
event: Optional[str] = None
description: Optional[str] = None
type: Optional[Union[CodeDesc, dict]] = field(default_factory=dict)
awayscore: Optional[int] = None
homescore: Optional[int] = None
hasreview: Optional[bool] = None
type: Optional[CodeDesc] = None
awayScore: Optional[int] = None
homeScore: Optional[int] = None
hasReview: Optional[bool] = None
code: Optional[str] = None
ballcolor: Optional[str] = None
trailcolor: Optional[str] = None
fromcatcher: Optional[bool] = None
ballColor: Optional[str] = None
trailColor: Optional[str] = None
fromCatcher: Optional[bool] = None
disengagementnum: Optional[int] = None

def __post_init__(self):
self.call = CodeDesc(**self.call) if self.call else self.call
self.batside = CodeDesc(**self.batside) if self.batside else self.batside
self.pitchhand = CodeDesc(**self.pitchhand) if self.pitchhand else self.pitchhand
self.type = CodeDesc(**self.type) if self.type else self.type

def __repr__(self) -> str:
kws = [f'{key}={value}' for key, value in self.__dict__.items() if value is not None and value]
return "{}({})".format(type(self).__name__, ", ".join(kws))

2 changes: 1 addition & 1 deletion mlbstatsapi/models/game/game.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,6 @@ class Game(BaseModel):

@property
def id(self):
return self.gamepk
return self.gamePk


10 changes: 5 additions & 5 deletions mlbstatsapi/models/game/gamedata/attributes.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ class GameDataGame(BaseModel):
gamedayType: str
tiebreaker: str
gameNumber: int
calendarEventId: str
calendarEventId: Optional[str] = None
season: str
seasonDisplay: str

Expand All @@ -52,7 +52,7 @@ class GameDatetime(BaseModel):
officialDate: str
dayNight: str
time: str
amPm: str
ampm: str
resumeDate: Optional[str] = None
resumeDateTime: Optional[str] = None
resumedFromDate: Optional[str] = None
Expand All @@ -78,7 +78,7 @@ class GameStatus(BaseModel):
statusCode: str
startTimeTBD: bool
abstractGameCode: str
reason: Optional[str]
reason: Optional[str] = None


class GameTeams(BaseModel):
Expand Down Expand Up @@ -117,7 +117,7 @@ class GameInfo(BaseModel):
"""
attendance: int
firstPitch: str
gamedurationMinutes: int
gameDurationMinutes: int
delayDurationMinutes: Optional[int] = None


Expand Down Expand Up @@ -159,7 +159,7 @@ class GameFlags(BaseModel):
"""
noHitter: bool
perfectGame: bool
awayTeamnoHitter: bool
awayTeamnoHitter: Optional[bool] = None
awayTeamPerfectGame: bool
homeTeamNoHitter: bool
homeTeamPerfectGame: bool
Expand Down
20 changes: 10 additions & 10 deletions mlbstatsapi/models/game/gamedata/gamedata.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from typing import Optional, Union, List
from typing import Optional, Union, List, Dict
from pydantic import BaseModel
from mlbstatsapi.models.venues import Venue
from mlbstatsapi.models.people import Person
Expand Down Expand Up @@ -41,18 +41,18 @@ class GameData(BaseModel):
datetime: GameDatetime
status: GameStatus
teams: GameTeams
players: List[Person]
venue: Union[Venue]
officialVenue: Union[Venue]
review: Union[GameReview]
flags: Union[GameFlags]
players: Dict[str, Person]
venue: Venue
officialVenue: Venue
review: GameReview
flags: GameFlags
alerts: List
probablePitchers: GameProbablePitchers
moundVisits: Optional[MoundVisits]
moundVisits: Optional[MoundVisits] = None
gameInfo: GameInfo
weather: GameWeather
officialScorer: Optional[Person]
primaryDatacaster: Optional[Person]
secondaryDatacaster: Optional[Person]
officialScorer: Optional[Person] = None
primaryDatacaster: Optional[Person] = None
secondaryDatacaster: Optional[Person] = None


Loading

0 comments on commit 9ff44c7

Please sign in to comment.