Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/build-and-test-mlbstatsapi-prd.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@ jobs:
virtualenvs-in-project: true
- name: Install dependencies
run: poetry install --no-interaction
- name: Test external tests with pytest
run: poetry run pytest tests/external_tests/
- name: Test with pytest
run: poetry run pytest tests/
- name: Build package
run: poetry build
- name: Publish a Python distribution to PyPI
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/build-and-test-mlbstatsapi-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@ jobs:
virtualenvs-in-project: true
- name: Install dependencies
run: poetry install --no-interaction
- name: Test external tests with pytest
run: poetry run pytest tests/external_tests/
- name: Test with pytest
run: poetry run pytest tests/
- name: Build package
run: poetry build
- name: Publish package to TestPyPI
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/build-and-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ jobs:
virtualenvs-in-project: true
- name: Install dependencies
run: poetry install --no-interaction
- name: Test external tests with pytest
run: poetry run pytest tests/external_tests/
- name: Test with pytest
run: poetry run pytest tests/
- name: Build package
run: poetry build
7 changes: 7 additions & 0 deletions conftest.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import sys
from pathlib import Path

# tests/external_tests/... is collected from nested directories that are not packages,
# so the repository root is not always on sys.path by the time a test imports
# tests.alias_audit.
sys.path.insert(0, str(Path(__file__).parent))
8 changes: 6 additions & 2 deletions mlbstatsapi/mlb_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -1195,7 +1195,9 @@ def get_venue(self, venue_id: int, **params) -> Union[Venue, None]:
>>> mlb.get_venue(31)
Venue
"""
params['hydrate'] = ['location', 'fieldInfo', 'timezone']
# MLB expects one comma delimited hydrate value; a list is encoded as
# repeated query params and the hydrations are dropped.
params['hydrate'] = 'location,fieldInfo,timezone'

mlb_data = self._mlb_adapter_v1.get(endpoint=f'venues/{venue_id}', ep_params=params)
if 400 <= mlb_data.status_code <= 499:
Expand Down Expand Up @@ -1241,7 +1243,9 @@ def get_venues(self, **params) -> List[Venue]:
>>> mlb.get_venues()
[Venue, Venue, Venue]
"""
params['hydrate'] = ['location', 'fieldInfo', 'timezone']
# MLB expects one comma delimited hydrate value; a list is encoded as
# repeated query params and the hydrations are dropped.
params['hydrate'] = 'location,fieldInfo,timezone'

mlb_data = self._mlb_adapter_v1.get(endpoint='venues', ep_params=params)
if 400 <= mlb_data.status_code <= 499:
Expand Down
6 changes: 3 additions & 3 deletions mlbstatsapi/models/data/data.py
Original file line number Diff line number Diff line change
Expand Up @@ -77,8 +77,8 @@ class PitchCoordinates(MLBBaseModel):
y : float
Y coordinate where pitch crossed front of home plate.
"""
ay: Optional[float] = None
az: Optional[float] = None
ay: Optional[float] = Field(default=None, alias="aY")
az: Optional[float] = Field(default=None, alias="aZ")
pfx_x: Optional[float] = Field(default=None, alias="pfxX")
pfx_z: Optional[float] = Field(default=None, alias="pfxZ")
p_x: Optional[float] = Field(default=None, alias="pX")
Expand All @@ -89,7 +89,7 @@ class PitchCoordinates(MLBBaseModel):
x0: Optional[float] = None
y0: Optional[float] = None
z0: Optional[float] = None
ax: Optional[float] = None
ax: Optional[float] = Field(default=None, alias="aX")
x: Optional[float] = None
y: Optional[float] = None

Expand Down
4 changes: 2 additions & 2 deletions mlbstatsapi/models/game/gamedata/attributes.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ class GameDataGame(MLBBaseModel):
gameday_type: str = Field(alias="gamedayType")
tiebreaker: str
game_number: int = Field(alias="gameNumber")
calendar_event_id: Optional[str] = Field(default=None, alias="calendarEventId")
calendar_event_id: Optional[str] = Field(default=None, alias="calendarEventID")
season: str
season_display: str = Field(alias="seasonDisplay")

Expand Down Expand Up @@ -108,7 +108,7 @@ class GameStatus(MLBBaseModel):
coded_game_state: str = Field(alias="codedGameState")
detailed_state: str = Field(alias="detailedState")
status_code: str = Field(alias="statusCode")
start_time_tbd: Optional[bool] = Field(default=None, alias="startTimeTbd")
start_time_tbd: Optional[bool] = Field(default=None, alias="startTimeTBD")
abstract_game_code: str = Field(alias="abstractGameCode")
reason: Optional[str] = None

Expand Down
2 changes: 1 addition & 1 deletion mlbstatsapi/models/game/gamedata/gamedata.py
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ class GameData(MLBBaseModel):
game_info: Optional[GameInfo] = Field(default=None, alias="gameInfo")
weather: Optional[GameWeather] = None
official_scorer: Optional[Person] = Field(default=None, alias="officialScorer")
primary_data_caster: Optional[Person] = Field(default=None, alias="primaryDataCaster")
primary_data_caster: Optional[Person] = Field(default=None, alias="primaryDatacaster")
secondary_data_caster: Optional[Person] = Field(default=None, alias="secondaryDataCaster")
abs_challenges: Optional[AbsChallenges] = Field(default=None, alias="absChallenges")

Expand Down
6 changes: 3 additions & 3 deletions mlbstatsapi/models/people/people.py
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,7 @@ class Person(MLBBaseModel):
use_name: Optional[str] = Field(default=None, alias="useName")
middle_name: Optional[str] = Field(default=None, alias="middleName")
boxscore_name: Optional[str] = Field(default=None, alias="boxscoreName")
nickname: Optional[str] = None
nickname: Optional[str] = Field(default=None, alias="nickName")
draft_year: Optional[int] = Field(default=None, alias="draftYear")
mlb_debut_date: Optional[str] = Field(default=None, alias="mlbDebutDate")
name_first_last: Optional[str] = Field(default=None, alias="nameFirstLast")
Expand All @@ -137,8 +137,8 @@ class Person(MLBBaseModel):
last_first_name: Optional[str] = Field(default=None, alias="lastFirstName")
last_init_name: Optional[str] = Field(default=None, alias="lastInitName")
init_last_name: Optional[str] = Field(default=None, alias="initLastName")
full_fml_name: Optional[str] = Field(default=None, alias="fullFmlName")
full_lfm_name: Optional[str] = Field(default=None, alias="fullLfmName")
full_fml_name: Optional[str] = Field(default=None, alias="fullFMLName")
full_lfm_name: Optional[str] = Field(default=None, alias="fullLFMName")
birth_country: Optional[str] = Field(default=None, alias="birthCountry")
pronunciation: Optional[str] = None
strike_zone_top: Optional[float] = Field(default=None, alias="strikeZoneTop")
Expand Down
2 changes: 1 addition & 1 deletion mlbstatsapi/models/schedules/attributes.py
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,7 @@ class ScheduleGames(MLBBaseModel):
double_header: str = Field(alias="doubleHeader")
gameday_type: str = Field(alias="gamedayType")
tiebreaker: str
calendar_event_id: Optional[str] = Field(default=None, alias="calendarEventId")
calendar_event_id: Optional[str] = Field(default=None, alias="calendarEventID")
season_display: str = Field(alias="seasonDisplay")
day_night: str = Field(alias="dayNight")
scheduled_innings: int = Field(alias="scheduledInnings")
Expand Down
12 changes: 7 additions & 5 deletions mlbstatsapi/models/seasons/season.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,8 +54,8 @@ class Season(MLBBaseModel):
"""
season_id: str = Field(alias="seasonId")
has_wildcard: Optional[bool] = Field(default=None, alias="hasWildcard")
preseason_start_date: Optional[str] = Field(default=None, alias="preseasonStartDate")
preseason_end_date: Optional[str] = Field(default=None, alias="preseasonEndDate")
preseason_start_date: Optional[str] = Field(default=None, alias="preSeasonStartDate")
preseason_end_date: Optional[str] = Field(default=None, alias="preSeasonEndDate")
season_start_date: Optional[str] = Field(default=None, alias="seasonStartDate")
spring_start_date: Optional[str] = Field(default=None, alias="springStartDate")
spring_end_date: Optional[str] = Field(default=None, alias="springEndDate")
Expand All @@ -64,11 +64,13 @@ class Season(MLBBaseModel):
all_star_date: Optional[str] = Field(default=None, alias="allStarDate")
first_date_2nd_half: Optional[str] = Field(default=None, alias="firstDate2ndHalf")
regular_season_end_date: Optional[str] = Field(default=None, alias="regularSeasonEndDate")
postseason_start_date: Optional[str] = Field(default=None, alias="postseasonStartDate")
postseason_end_date: Optional[str] = Field(default=None, alias="postseasonEndDate")
postseason_start_date: Optional[str] = Field(default=None, alias="postSeasonStartDate")
postseason_end_date: Optional[str] = Field(default=None, alias="postSeasonEndDate")
season_end_date: Optional[str] = Field(default=None, alias="seasonEndDate")
# MLB is inconsistent here: the start key is "offseasonStartDate" but the end key
# is "offSeasonEndDate".
offseason_start_date: Optional[str] = Field(default=None, alias="offseasonStartDate")
offseason_end_date: Optional[str] = Field(default=None, alias="offseasonEndDate")
offseason_end_date: Optional[str] = Field(default=None, alias="offSeasonEndDate")
season_level_gameday_type: Optional[str] = Field(default=None, alias="seasonLevelGamedayType")
game_level_gameday_type: Optional[str] = Field(default=None, alias="gameLevelGamedayType")
qualifier_plate_appearances: Optional[float] = Field(default=None, alias="qualifierPlateAppearances")
Expand Down
6 changes: 3 additions & 3 deletions mlbstatsapi/models/standings/attributes.py
Original file line number Diff line number Diff line change
Expand Up @@ -96,9 +96,9 @@ class TeamRecords(TeamRecord):
elimination_number_league: str = Field(alias="eliminationNumberLeague")
elimination_number_division: str = Field(alias="eliminationNumberDivision")
elimination_number_conference: str = Field(alias="eliminationNumberConference")
wildcard_elimination_number: Optional[str] = Field(default=None, alias="wildcardEliminationNumber")
wildcard_elimination_number: Optional[str] = Field(default=None, alias="wildCardEliminationNumber")
run_differential: int = Field(alias="runDifferential")
wildcard_rank: Optional[str] = Field(default=None, alias="wildcardRank")
wildcard_leader: Optional[bool] = Field(default=None, alias="wildcardLeader")
wildcard_rank: Optional[str] = Field(default=None, alias="wildCardRank")
wildcard_leader: Optional[bool] = Field(default=None, alias="wildCardLeader")
magic_number: Optional[str] = Field(default=None, alias="magicNumber")
clinch_indicator: Optional[str] = Field(default=None, alias="clinchIndicator")
2 changes: 1 addition & 1 deletion mlbstatsapi/models/standings/standings.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,4 +34,4 @@ class Standings(MLBBaseModel):
last_updated: str = Field(alias="lastUpdated")
team_records: List[TeamRecords] = Field(alias="teamRecords")
sport: Optional[Sport] = None
roundrobin: Optional[dict] = None
roundrobin: Optional[dict] = Field(default=None, alias="roundRobin")
4 changes: 2 additions & 2 deletions mlbstatsapi/models/stats/fielding.py
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ class SimpleFieldingSplit(MLBBaseModel):
stolen_bases: Optional[int] = Field(default=None, alias="stolenBases")
stolen_base_percentage: Optional[str] = Field(default=None, alias="stolenBasePercentage")
assists: Optional[int] = None
putouts: Optional[int] = None
putouts: Optional[int] = Field(default=None, alias="putOuts")
errors: Optional[int] = None
chances: Optional[int] = None
fielding: Optional[str] = None
Expand All @@ -82,7 +82,7 @@ class SimpleFieldingSplit(MLBBaseModel):
passed_ball: Optional[int] = Field(default=None, alias="passedBall")
double_plays: Optional[int] = Field(default=None, alias="doublePlays")
triple_plays: Optional[int] = Field(default=None, alias="triplePlays")
catcher_era: Optional[str] = Field(default=None, alias="catcherEra")
catcher_era: Optional[str] = Field(default=None, alias="catcherERA")
catchers_interference: Optional[int] = Field(default=None, alias="catchersInterference")
wild_pitches: Optional[int] = Field(default=None, alias="wildPitches")
throwing_errors: Optional[int] = Field(default=None, alias="throwingErrors")
Expand Down
28 changes: 17 additions & 11 deletions mlbstatsapi/models/stats/pitching.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from typing import Optional, List, Any, ClassVar
from pydantic import Field, field_validator
from pydantic import AliasChoices, Field, field_validator
from mlbstatsapi.models.base import MLBBaseModel
from mlbstatsapi.models.people import Person, Pitcher, Batter
from mlbstatsapi.models.teams import Team
Expand Down Expand Up @@ -148,9 +148,9 @@ class SimplePitchingSplit(MLBBaseModel):
age: Optional[int] = None
games_played: Optional[int] = Field(default=None, alias="gamesPlayed")
games_started: Optional[int] = Field(default=None, alias="gamesStarted")
flyouts: Optional[int] = None
groundouts: Optional[int] = None
airouts: Optional[int] = None
flyouts: Optional[int] = Field(default=None, alias="flyOuts")
groundouts: Optional[int] = Field(default=None, alias="groundOuts")
airouts: Optional[int] = Field(default=None, alias="airOuts")
runs: Optional[int] = None
doubles: Optional[int] = None
triples: Optional[int] = None
Expand Down Expand Up @@ -192,7 +192,7 @@ class SimplePitchingSplit(MLBBaseModel):
wild_pitches: Optional[int] = Field(default=None, alias="wildPitches")
pickoffs: Optional[int] = None
total_bases: Optional[int] = Field(default=None, alias="totalBases")
groundouts_to_airouts: Optional[str] = Field(default=None, alias="groundoutsToAirouts")
groundouts_to_airouts: Optional[str] = Field(default=None, alias="groundOutsToAirouts")
win_percentage: Optional[str] = Field(default=None, alias="winPercentage")
pitches_per_inning: Optional[str] = Field(default=None, alias="pitchesPerInning")
games_finished: Optional[int] = Field(default=None, alias="gamesFinished")
Expand Down Expand Up @@ -328,7 +328,13 @@ class AdvancedPitchingSplit(MLBBaseModel):
base_on_balls_per_9: Optional[str] = Field(default=None, alias="baseOnBallsPer9")
home_runs_per_9: Optional[str] = Field(default=None, alias="homeRunsPer9")
hits_per_9: Optional[str] = Field(default=None, alias="hitsPer9")
strikeouts_to_walks: Optional[str] = Field(default=None, alias="strikeoutsToWalks")
# MLB spells this key "strikesoutsToWalks". Both spellings are accepted so the
# field keeps working if they ever correct it.
strikeouts_to_walks: Optional[str] = Field(
default=None,
alias="strikesoutsToWalks",
validation_alias=AliasChoices("strikesoutsToWalks", "strikeoutsToWalks"),
)
stolen_bases: Optional[int] = Field(default=None, alias="stolenBases")
caught_stealing: Optional[int] = Field(default=None, alias="caughtStealing")
quality_starts: Optional[int] = Field(default=None, alias="qualityStarts")
Expand Down Expand Up @@ -358,10 +364,10 @@ class AdvancedPitchingSplit(MLBBaseModel):
home_runs_per_plate_appearance: Optional[str] = Field(default=None, alias="homeRunsPerPlateAppearance")
walks_per_strikeout: Optional[str] = Field(default=None, alias="walksPerStrikeout")
iso: Optional[str] = None
flyouts: Optional[int] = None
popouts: Optional[int] = None
lineouts: Optional[int] = None
groundouts: Optional[int] = None
flyouts: Optional[int] = Field(default=None, alias="flyOuts")
popouts: Optional[int] = Field(default=None, alias="popOuts")
lineouts: Optional[int] = Field(default=None, alias="lineOuts")
groundouts: Optional[int] = Field(default=None, alias="groundOuts")
fly_hits: Optional[int] = Field(default=None, alias="flyHits")
pop_hits: Optional[int] = Field(default=None, alias="popHits")
line_hits: Optional[int] = Field(default=None, alias="lineHits")
Expand All @@ -371,7 +377,7 @@ class AdvancedPitchingSplit(MLBBaseModel):
bequeathed_runners: Optional[int] = Field(default=None, alias="bequeathedRunners")
bequeathed_runners_scored: Optional[int] = Field(default=None, alias="bequeathedRunnersScored")
innings_pitched_per_game: Optional[str] = Field(default=None, alias="inningsPitchedPerGame")
flyball_percentage: Optional[str] = Field(default=None, alias="flyballPercentage")
flyball_percentage: Optional[str] = Field(default=None, alias="flyBallPercentage")


class PitchingSabermetrics(Split):
Expand Down
Loading
Loading