Changelog¶
[Unreleased]¶
[1.1.0] - 2026-10-23¶
Fixed¶
Match pages and
Summary()load inside Jupyter and other code that already runs an asyncio event loop; they raisedasyncio.run() cannot be called from a running event loop(#55).
Added¶
Ground(city, country, capacity, indoor) from ESPN’s venue records, andMatch.groundto load a match’s ground (#8).Match.get_match_ids(year, match_format): every international match id of one format in a year, from Statsguru, back to 1877. WithMatch(match_id)this loads every scorecard of a format (#34).Match.get_matches_on(date): the matches being played on one day, Tests included on each of their days (#28).Match(match_id)works without a series ID: the match page is found from the match ID andseries_idis read from it (#50).Each
Match.inningsentry hasfoursandsixes: ESPN’s innings total, else the sum over batters who batted, else None (#54).Match.over_by_over: runs and wickets per over for each innings, typed asOverEntryrows; empty where ESPN has no over data (#42).Series.season(key)finds a season by year or by ESPNcricinfo’s two-year label ("2024/25"), andSeason.labelgives that label. Multi-year seasons live under their own series ID, now reachable asseason.series_id(#76).
[1.0.1] - 2026-10-23¶
Changed¶
Gaurav Sood is listed as an author in the package metadata and citation.
[1.0.0] - 2026-10-23¶
First release since 0.6.1 (2021). The 0.5.x/0.6.x releases call ESPN endpoints that no longer respond, and 0.6/0.6.1 were uploaded only as eggs, which pip cannot install.
Changed¶
Match.series_id,Player.player_idandSeries.series_idare ints.Match.cancelled_matchis nowMatch.canceled(a bool).Player.playing_role,batting_styleandbowling_styleare strings such as'Top-order batter'and'Right-hand bat', not raw ESPN dicts;date_of_birthis adatetime.date;current_ageis nowage.Match.match_winner,home_team,batting_first,toss_winnerandtoss_decision_nameareNonewhen ESPN has no value.match_winnerused to name team 2 for any match without a winner, including draws and unplayed matches. These attributes now exist for unplayed matches too.Series(...)no longer fetches every event record up front;Series.eventsloads them on first access.Match pages are loaded with Playwright (WebKit), because ESPN’s CDN refuses plain HTTP clients. Run
playwright install webkitafter installing.Matchtakes bothmatch_idandseries_id.Summary().matchesandMatch.get_recent_matches()returnMatchRefobjects, which still unpack as(series_id, match_id).get_recent_matches()sends dates as DD-MM-YYYY (ESPN rejects YYYY-MM-DD) and acceptsdatetime.dateor either string form. ESPN returns about two weeks of matches ending on that date.Requires Python 3.12 or newer.
Added¶
Type hints on the whole public API and a
py.typedmarker (pyright --verifytypes: 100% of 209 exported symbols).Match.batting_scorecardandMatch.bowling_scorecard, with rows typed asBattingEntry/BowlingEntry.Navigation from a
Seriesto its seasons, teams, squads and matches.
Fixed¶
Player.get_data()raisedTypeErroron every call.Playerstatistics methods no longer overwritePlayer.url.Seriesno longer raisesAttributeErrorwhen the series record is empty.Every HTTP request has a 30-second timeout, and 5xx responses from ESPN’s core API are retried up to three times with backoff.
Removed¶
Matchattributes that never held data in this version:officials,rain_rule,weather_location_code,followon,continent,latest_batting,latest_bowling,latest_innings,latest_innings_fow,html,comms_json. Duplicates of other fields:current_summary(=result),present_datetime_*andstart_datetime_local/gmt(=start_datetime),town_area,toss_winner_team_idandtoss_choice_team_id(=toss_winner),toss_decision(usetoss_decision_name). Alsotown_id(it held the ground id),legacy_scorecard_url,series,team_*_batting_result,match_json(),innings_comms_url()(the commentary API no longer resolves) andget_html()/get_comms_json().Player.get_html()(ESPN returns 403 for profile pages),Player.url,Player.headersandPlayer.cricinfo_id(useplayer_id).Series.get_json(),Series.events_json.Player.in_team_for_match,batting_for_matchandbowling_for_match, which only raisedNotImplementedError. UseMatch.team_1_players,Match.batsmen()andMatch.bowlers().
Before 1.0.0¶
2018-08-09¶
Added methods for retrieving matches in a series. (Issue 19)
2018-08-05¶
Converted batting and bowling averages into a single dictionary. (Issue 25)