sportsball 0.6.22__tar.gz → 0.7.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {sportsball-0.6.22/sportsball.egg-info → sportsball-0.7.0}/PKG-INFO +14 -2
- {sportsball-0.6.22 → sportsball-0.7.0}/README.md +11 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/requirements.txt +2 -1
- {sportsball-0.6.22 → sportsball-0.7.0}/setup.py +1 -1
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/__init__.py +1 -1
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/address_model.py +6 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/afl/afl/afl_afl_game_model.py +14 -7
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/afl/afl/afl_afl_league_model.py +19 -17
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/afl/afl/afl_afl_player_model.py +2 -1
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/afl/afl/afl_afl_team_model.py +2 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/afl/afl/afl_afl_venue_model.py +2 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/afl/afltables/afl_afltables_coach_model.py +17 -6
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/afl/afltables/afl_afltables_game_model.py +31 -25
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/afl/afltables/afl_afltables_player_model.py +7 -1
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/afl/afltables/afl_afltables_team_model.py +28 -10
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/afl/afltables/afl_afltables_venue_model.py +16 -6
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/aussportsbetting/aussportsbetting_game_model.py +48 -25
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/aussportsbetting/aussportsbetting_team_model.py +2 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/aussportsbetting/aussportsbetting_venue_model.py +6 -1
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/coach_model.py +23 -1
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/combined/combined_coach_model.py +9 -12
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/combined/combined_game_model.py +2 -1
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/combined/combined_player_model.py +4 -12
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/combined/combined_team_model.py +4 -12
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/combined/combined_venue_model.py +5 -2
- sportsball-0.7.0/sportsball/data/combined/ffill.py +23 -0
- sportsball-0.7.0/sportsball/data/delimiter.py +3 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/espn/espn_coach_model.py +9 -4
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/espn/espn_game_model.py +43 -28
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/espn/espn_player_model.py +11 -2
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/espn/espn_team_model.py +31 -18
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/espn/espn_venue_model.py +5 -1
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/game_model.py +5 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/google/google_address_model.py +15 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/hkjc/hkjc/hkjc_hkjc_coach_model.py +9 -4
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/hkjc/hkjc/hkjc_hkjc_game_model.py +15 -4
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/hkjc/hkjc/hkjc_hkjc_league_model.py +3 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/hkjc/hkjc/hkjc_hkjc_player_model.py +7 -1
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/hkjc/hkjc/hkjc_hkjc_team_model.py +7 -1
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/hkjc/hkjc/hkjc_hkjc_venue_model.py +2 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/league_model.py +1 -1
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/nba/nba/nba_nba_game_model.py +25 -4
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/nba/nba/nba_nba_team_model.py +29 -4
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/nba/nbacom/nba_nbacom_game_model.py +15 -4
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/nba/nbacom/nba_nbacom_league_model.py +4 -2
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/nba/nbacom/nba_nbacom_player_model.py +2 -1
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/nba/nbacom/nba_nbacom_team_model.py +2 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/nba/nbacom/nba_nbacom_venue_model.py +2 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/oddsportal/oddsportal_game_model.py +13 -4
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/oddsportal/oddsportal_team_model.py +37 -31
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/oddsportal/oddsportal_venue_model.py +26 -5
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/player_model.py +11 -11
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/sex.py +7 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/sportsdb/sportsdb_game_model.py +32 -5
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/sportsdb/sportsdb_team_model.py +30 -5
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/sportsdb/sportsdb_venue_model.py +19 -6
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/sportsreference/sportsreference_coach_model.py +7 -6
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/sportsreference/sportsreference_game_model.py +21 -4
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/sportsreference/sportsreference_player_model.py +7 -1
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/sportsreference/sportsreference_team_model.py +9 -1
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/sportsreference/sportsreference_venue_model.py +19 -6
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/team_model.py +5 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/venue_model.py +4 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/wikipedia/wikipedia_venue_model.py +3 -1
- {sportsball-0.6.22 → sportsball-0.7.0/sportsball.egg-info}/PKG-INFO +14 -2
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball.egg-info/SOURCES.txt +2 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball.egg-info/requires.txt +2 -1
- {sportsball-0.6.22 → sportsball-0.7.0}/tests/data/afl/afltables/afl_afltables_game_model_test.py +3 -1
- {sportsball-0.6.22 → sportsball-0.7.0}/tests/data/combined/combined_game_model_test.py +2 -1
- {sportsball-0.6.22 → sportsball-0.7.0}/tests/data/combined/combined_player_model_test.py +2 -1
- {sportsball-0.6.22 → sportsball-0.7.0}/tests/data/combined/combined_team_model_test.py +77 -2
- {sportsball-0.6.22 → sportsball-0.7.0}/tests/data/combined/combined_venue_model_test.py +3 -1
- {sportsball-0.6.22 → sportsball-0.7.0}/tests/data/game_model_test.py +2 -1
- {sportsball-0.6.22 → sportsball-0.7.0}/tests/data/player_model_test.py +2 -1
- {sportsball-0.6.22 → sportsball-0.7.0}/tests/data/team_model_test.py +2 -1
- {sportsball-0.6.22 → sportsball-0.7.0}/LICENSE +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/MANIFEST.in +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/setup.cfg +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/__main__.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/args.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/cache.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/__init__.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/afl/__init__.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/afl/afl/__init__.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/afl/afl/afl_afl_bookie_model.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/afl/afl/afl_afl_odds_model.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/afl/afltables/__init__.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/afl/afltables/afl_afltables_league_model.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/afl/aussportsbetting/__init__.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/afl/aussportsbetting/afl_aussportsbetting_league_model.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/afl/combined/__init__.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/afl/combined/afl_combined_league_model.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/afl/espn/__init__.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/afl/espn/afl_espn_league_model.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/afl/oddsportal/__init__.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/afl/oddsportal/afl_oddsportal_league_model.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/afl/position.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/aussportsbetting/__init__.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/aussportsbetting/aussportsbetting_bookie_model.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/aussportsbetting/aussportsbetting_league_model.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/aussportsbetting/aussportsbetting_odds_model.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/bet.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/bookie_model.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/combined/__init__.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/combined/combined_address_model.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/combined/combined_league_model.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/combined/combined_weather_model.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/combined/null_check.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/dividend_model.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/espn/__init__.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/espn/espn_bookie_model.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/espn/espn_league_model.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/espn/espn_odds_model.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/field_type.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/google/__init__.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/google/google_news_model.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/hkjc/__init__.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/hkjc/hkjc/__init__.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/hkjc/hkjc/hkjc_hkjc_bookie_model.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/hkjc/hkjc/hkjc_hkjc_dividend_model.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/hkjc/hkjc/hkjc_hkjc_odds_model.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/hkjc/hkjc/hkjc_hkjc_owner_model.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/hkjc/position.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/league.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/model.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/nba/__init__.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/nba/combined/__init__.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/nba/combined/nba_combined_league_model.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/nba/espn/__init__.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/nba/espn/nba_espn_league_model.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/nba/nba/__init__.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/nba/nba/nba_nba_league_model.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/nba/nbacom/__init__.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/nba/oddsportal/__init__.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/nba/oddsportal/nba_oddsportal_league_model.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/nba/position.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/nba/sportsdb/__init__.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/nba/sportsdb/nba_sportsdb_league_model.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/nba/sportsreference/__init__.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/nba/sportsreference/nba_sportsreference_league_model.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/ncaab/__init__.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/ncaab/combined/__init__.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/ncaab/combined/ncaab_combined_league_model.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/ncaab/espn/__init__.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/ncaab/espn/ncaab_espn_league_model.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/ncaab/oddsportal/__init__.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/ncaab/oddsportal/ncaab_oddsportal_league_model.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/ncaab/sportsreference/__init__.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/ncaab/sportsreference/ncaab_sportsreference_league_model.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/ncaaf/__init__.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/ncaaf/combined/__init__.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/ncaaf/combined/ncaaf_combined_league_model.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/ncaaf/espn/__init__.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/ncaaf/espn/ncaaf_espn_league_model.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/ncaaf/oddsportal/__init__.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/ncaaf/oddsportal/ncaaf_oddsportal_league_model.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/news_model.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/nfl/__init__.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/nfl/aussportsbetting/__init__.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/nfl/aussportsbetting/nfl_aussportsbetting_league_model.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/nfl/combined/__init__.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/nfl/combined/nfl_combined_league_model.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/nfl/espn/__init__.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/nfl/espn/nfl_espn_league_model.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/nfl/oddsportal/__init__.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/nfl/oddsportal/nfl_oddsportal_league_model.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/nfl/position.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/nfl/sportsdb/__init__.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/nfl/sportsdb/nfl_sportsdb_league_model.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/odds_model.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/oddsportal/__init__.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/oddsportal/decrypt.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/oddsportal/oddsportal_bookie_model.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/oddsportal/oddsportal_league_model.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/oddsportal/oddsportal_odds_model.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/owner_model.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/season_type.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/social_model.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/species.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/sportsdb/__init__.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/sportsdb/sportsdb_league_model.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/sportsreference/__init__.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/sportsreference/sportsreference_league_model.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/weather/__init__.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/weather/gribstream/__init__.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/weather/gribstream/gribstream_weather_model.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/weather/multi_weather_model.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/weather/openmeteo/__init__.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/weather/openmeteo/openmeteo_weather_model.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/weather_model.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/wikipedia/__init__.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/x/__init__.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/x/x_social_model.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/logger.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/loglevel.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/playwright.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/sportsball.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/vendor/__init__.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball/vendor/pygooglenews/__init__.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball.egg-info/dependency_links.txt +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball.egg-info/entry_points.txt +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball.egg-info/not-zip-safe +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/sportsball.egg-info/top_level.txt +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/tests/__init__.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/tests/data/__init__.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/tests/data/afl/__init__.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/tests/data/afl/afl/__init__.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/tests/data/afl/afl/afl_afl_game_model_test.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/tests/data/afl/afl/afl_afl_league_model_test.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/tests/data/afl/afltables/__init__.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/tests/data/afl/afltables/afl_afltables_coach_model_test.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/tests/data/afl/afltables/afl_afltables_league_model_test.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/tests/data/afl/afltables/afl_afltables_player_model_test.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/tests/data/aussportsbetting/__init__.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/tests/data/aussportsbetting/aussportsbetting_game_model_test.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/tests/data/combined/__init__.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/tests/data/espn/__init__.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/tests/data/espn/espn_game_model_test.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/tests/data/espn/espn_player_model_test.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/tests/data/google/__init__.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/tests/data/google/google_address_model_test.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/tests/data/google/google_news_model_test.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/tests/data/hkjc/__init__.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/tests/data/hkjc/hkjc/__init__.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/tests/data/hkjc/hkjc/hkjc_hkjc_game_model_test.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/tests/data/hkjc/hkjc/hkjc_hkjc_player_model_test.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/tests/data/nba/__init__.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/tests/data/nba/nba/__init__.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/tests/data/nba/nba/nba_nba_game_model_test.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/tests/data/nba/nba/nba_nba_league_model_test.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/tests/data/nba/nba/nba_nba_team_model_test.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/tests/data/nba/sportsdb/__init__.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/tests/data/nba/sportsdb/nba_sportsdb_league_model_test.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/tests/data/nba/sportsreference/__init__.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/tests/data/nba/sportsreference/nba_sportsreference_league_model_test.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/tests/data/ncaab/__init__.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/tests/data/ncaab/sportsreference/__init__.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/tests/data/ncaab/sportsreference/ncaab_sportsreference_league_model_test.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/tests/data/nfl/__init__.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/tests/data/nfl/sportsdb/__init__.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/tests/data/nfl/sportsdb/nfl_sportsdb_league_model_test.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/tests/data/oddsportal/__init__.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/tests/data/oddsportal/decrypt_test.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/tests/data/oddsportal/oddsportal_game_model_test.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/tests/data/oddsportal/oddsportal_league_model_test.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/tests/data/social_model_test.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/tests/data/sportsdb/__init__.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/tests/data/sportsdb/sportsdb_game_model_test.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/tests/data/sportsdb/sportsdb_league_model_test.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/tests/data/sportsdb/sportsdb_team_model_test.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/tests/data/sportsdb/sportsdb_venue_model_test.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/tests/data/sportsreference/__init__.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/tests/data/sportsreference/sportsreference_coach_model_test.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/tests/data/sportsreference/sportsreference_game_model_test.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/tests/data/sportsreference/sportsreference_league_model_test.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/tests/data/sportsreference/sportsreference_player_model_test.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/tests/data/sportsreference/sportsreference_team_model_test.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/tests/data/sportsreference/sportsreference_venue_model_test.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/tests/data/x/__init__.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/tests/data/x/x_social_model_test.py +0 -0
- {sportsball-0.6.22 → sportsball-0.7.0}/tests/sportsball_test.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.2
|
2
2
|
Name: sportsball
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.7.0
|
4
4
|
Summary: A library for pulling in and normalising sports stats.
|
5
5
|
Home-page: https://github.com/8W9aG/sportsball
|
6
6
|
Author: Will Sackfield
|
@@ -47,7 +47,8 @@ Requires-Dist: playwright>=1.51.0
|
|
47
47
|
Requires-Dist: cchardet>=2.2.0a2
|
48
48
|
Requires-Dist: lxml>=5.3.0
|
49
49
|
Requires-Dist: gender-guesser>=0.4.0
|
50
|
-
Requires-Dist: scrapesession>=0.0.
|
50
|
+
Requires-Dist: scrapesession>=0.0.3
|
51
|
+
Requires-Dist: pyhigh>=0.0.6
|
51
52
|
Dynamic: author
|
52
53
|
Dynamic: author-email
|
53
54
|
Dynamic: classifier
|
@@ -111,6 +112,7 @@ Python 3.11.6:
|
|
111
112
|
- [lxml](https://lxml.de/)
|
112
113
|
- [gender-guesser](https://github.com/lead-ratings/gender-guesser)
|
113
114
|
- [scrapesession](https://github.com/8W9aG/scrapesession)
|
115
|
+
- [pyhigh](https://github.com/sgherbst/pyhigh)
|
114
116
|
|
115
117
|
## Raison D'être :thought_balloon:
|
116
118
|
|
@@ -168,6 +170,7 @@ A representation of the game within a season.
|
|
168
170
|
* **postponed**: Whether the game was postponed.
|
169
171
|
* **playoff**: Whether the game was a playoff game.
|
170
172
|
* **distance**: The distance the game was played over.
|
173
|
+
* **version**: The version of the game model.
|
171
174
|
|
172
175
|
#### Team
|
173
176
|
|
@@ -224,6 +227,7 @@ A representation of a team within a game.
|
|
224
227
|
* **steals**: The number of steals made by the players on the team in the game.
|
225
228
|
* **blocks**: The number of blocks made by the players on the team in the game.
|
226
229
|
* **personal_fouls**: The number of personal fouls made by the players on the team in the game.
|
230
|
+
* **version**: The version of the team model.
|
227
231
|
|
228
232
|
#### Player
|
229
233
|
|
@@ -287,6 +291,7 @@ A representation of a player within a team within a game.
|
|
287
291
|
* **points**: The points made by the player during the game.
|
288
292
|
* **game_score**: The [John Hollinger game score](https://www.nbastuffer.com/analytics101/game-score/) of the player during the game.
|
289
293
|
* **point_differential**: The points scored by the players team while the player was on the court minus the points scored by the opposing team when the player is off the court.
|
294
|
+
* **version**: The version of the player model.
|
290
295
|
|
291
296
|
#### Odds
|
292
297
|
|
@@ -307,6 +312,9 @@ The venue the game is played at.
|
|
307
312
|
* **address**: The address of the venue.
|
308
313
|
* **is_grass**: Whether the venue has a grass field.
|
309
314
|
* **is_indoor**: Whether the venue is indoors.
|
315
|
+
* **is_turf**: Whether the venue is turf.
|
316
|
+
* **is_dirt**: Whether the venue is dirt.
|
317
|
+
* **version**: The version of the game model.
|
310
318
|
|
311
319
|
#### Address
|
312
320
|
|
@@ -321,6 +329,8 @@ The address of the venue.
|
|
321
329
|
* **weather**: The weather at the address at the game start time.
|
322
330
|
* **timezone**: The time zone at the address.
|
323
331
|
* **country**: The country of the address.
|
332
|
+
* **altitude**: The altitude of the address.
|
333
|
+
* **version**: The version of the address model.
|
324
334
|
|
325
335
|
#### Weather
|
326
336
|
|
@@ -421,6 +431,8 @@ The coach on the team at the time of the game.
|
|
421
431
|
* **name**: The name of the coach.
|
422
432
|
* **birth_date**: The birth date of the coach.
|
423
433
|
* **age**: The age of the coach.
|
434
|
+
* **sex**: The sex of the coach.
|
435
|
+
* **version**: The version of the coach model.
|
424
436
|
|
425
437
|
#### Dividend
|
426
438
|
|
@@ -50,6 +50,7 @@ Python 3.11.6:
|
|
50
50
|
- [lxml](https://lxml.de/)
|
51
51
|
- [gender-guesser](https://github.com/lead-ratings/gender-guesser)
|
52
52
|
- [scrapesession](https://github.com/8W9aG/scrapesession)
|
53
|
+
- [pyhigh](https://github.com/sgherbst/pyhigh)
|
53
54
|
|
54
55
|
## Raison D'être :thought_balloon:
|
55
56
|
|
@@ -107,6 +108,7 @@ A representation of the game within a season.
|
|
107
108
|
* **postponed**: Whether the game was postponed.
|
108
109
|
* **playoff**: Whether the game was a playoff game.
|
109
110
|
* **distance**: The distance the game was played over.
|
111
|
+
* **version**: The version of the game model.
|
110
112
|
|
111
113
|
#### Team
|
112
114
|
|
@@ -163,6 +165,7 @@ A representation of a team within a game.
|
|
163
165
|
* **steals**: The number of steals made by the players on the team in the game.
|
164
166
|
* **blocks**: The number of blocks made by the players on the team in the game.
|
165
167
|
* **personal_fouls**: The number of personal fouls made by the players on the team in the game.
|
168
|
+
* **version**: The version of the team model.
|
166
169
|
|
167
170
|
#### Player
|
168
171
|
|
@@ -226,6 +229,7 @@ A representation of a player within a team within a game.
|
|
226
229
|
* **points**: The points made by the player during the game.
|
227
230
|
* **game_score**: The [John Hollinger game score](https://www.nbastuffer.com/analytics101/game-score/) of the player during the game.
|
228
231
|
* **point_differential**: The points scored by the players team while the player was on the court minus the points scored by the opposing team when the player is off the court.
|
232
|
+
* **version**: The version of the player model.
|
229
233
|
|
230
234
|
#### Odds
|
231
235
|
|
@@ -246,6 +250,9 @@ The venue the game is played at.
|
|
246
250
|
* **address**: The address of the venue.
|
247
251
|
* **is_grass**: Whether the venue has a grass field.
|
248
252
|
* **is_indoor**: Whether the venue is indoors.
|
253
|
+
* **is_turf**: Whether the venue is turf.
|
254
|
+
* **is_dirt**: Whether the venue is dirt.
|
255
|
+
* **version**: The version of the game model.
|
249
256
|
|
250
257
|
#### Address
|
251
258
|
|
@@ -260,6 +267,8 @@ The address of the venue.
|
|
260
267
|
* **weather**: The weather at the address at the game start time.
|
261
268
|
* **timezone**: The time zone at the address.
|
262
269
|
* **country**: The country of the address.
|
270
|
+
* **altitude**: The altitude of the address.
|
271
|
+
* **version**: The version of the address model.
|
263
272
|
|
264
273
|
#### Weather
|
265
274
|
|
@@ -360,6 +369,8 @@ The coach on the team at the time of the game.
|
|
360
369
|
* **name**: The name of the coach.
|
361
370
|
* **birth_date**: The birth date of the coach.
|
362
371
|
* **age**: The age of the coach.
|
372
|
+
* **sex**: The sex of the coach.
|
373
|
+
* **version**: The version of the coach model.
|
363
374
|
|
364
375
|
#### Dividend
|
365
376
|
|
@@ -26,7 +26,7 @@ def install_requires() -> typing.List[str]:
|
|
26
26
|
|
27
27
|
setup(
|
28
28
|
name='sportsball',
|
29
|
-
version='0.
|
29
|
+
version='0.7.0',
|
30
30
|
description='A library for pulling in and normalising sports stats.',
|
31
31
|
long_description=long_description,
|
32
32
|
long_description_content_type='text/markdown',
|
@@ -4,12 +4,16 @@ from typing import Literal
|
|
4
4
|
|
5
5
|
from pydantic import BaseModel, Field
|
6
6
|
|
7
|
+
from .delimiter import DELIMITER
|
7
8
|
from .field_type import TYPE_KEY, FieldType
|
9
|
+
from .weather_model import VERSION as WEATHER_VERSION
|
8
10
|
from .weather_model import WeatherModel
|
9
11
|
|
10
12
|
ADDRESS_LATITUDE_COLUMN: Literal["latitude"] = "latitude"
|
11
13
|
ADDRESS_LONGITUDE_COLUMN: Literal["longitude"] = "longitude"
|
12
14
|
ADDRESS_TIMEZONE_COLUMN: Literal["timezone"] = "timezone"
|
15
|
+
ADDRESS_ALTITUDE_COLUMN: Literal["altitude"] = "altitude"
|
16
|
+
VERSION = DELIMITER.join(["0.0.1", WEATHER_VERSION])
|
13
17
|
|
14
18
|
|
15
19
|
class AddressModel(BaseModel):
|
@@ -32,3 +36,5 @@ class AddressModel(BaseModel):
|
|
32
36
|
alias=ADDRESS_TIMEZONE_COLUMN,
|
33
37
|
)
|
34
38
|
country: str = Field(..., json_schema_extra={TYPE_KEY: FieldType.CATEGORICAL})
|
39
|
+
altitude: float | None = Field(..., alias=ADDRESS_ALTITUDE_COLUMN)
|
40
|
+
version: str = VERSION
|
@@ -12,6 +12,8 @@ from playwright.sync_api import Playwright
|
|
12
12
|
from ....playwright import ensure_install
|
13
13
|
from ...game_model import GameModel
|
14
14
|
from ...league import League
|
15
|
+
from ...team_model import VERSION
|
16
|
+
from ...venue_model import VERSION as VENUE_VERSION
|
15
17
|
from ..position import Position, position_from_str
|
16
18
|
from .afl_afl_team_model import create_afl_afl_team_model
|
17
19
|
from .afl_afl_venue_model import create_afl_afl_venue_model
|
@@ -121,6 +123,7 @@ def create_afl_afl_game_model(
|
|
121
123
|
ladder: list[str],
|
122
124
|
url: str | None,
|
123
125
|
playwright: Playwright,
|
126
|
+
version: str,
|
124
127
|
) -> GameModel:
|
125
128
|
"""Create a game model from AFL Tables."""
|
126
129
|
odds: list[float] = []
|
@@ -137,15 +140,18 @@ def create_afl_afl_game_model(
|
|
137
140
|
if dt is None:
|
138
141
|
raise ValueError("dt is null")
|
139
142
|
|
140
|
-
venue_model = create_afl_afl_venue_model(
|
143
|
+
venue_model = create_afl_afl_venue_model(
|
144
|
+
venue_name=venue_name, session=session, dt=dt, version=VENUE_VERSION
|
145
|
+
)
|
141
146
|
teams = [
|
142
147
|
create_afl_afl_team_model(
|
143
|
-
x,
|
144
|
-
players[count],
|
145
|
-
session,
|
146
|
-
dt,
|
147
|
-
ladder,
|
148
|
-
odds[count] if count < len(odds) else None,
|
148
|
+
team_name=x,
|
149
|
+
players=players[count],
|
150
|
+
session=session,
|
151
|
+
dt=dt,
|
152
|
+
ladder=ladder,
|
153
|
+
odds=odds[count] if count < len(odds) else None,
|
154
|
+
version=VERSION,
|
149
155
|
)
|
150
156
|
for count, x in enumerate(team_names)
|
151
157
|
]
|
@@ -165,4 +171,5 @@ def create_afl_afl_game_model(
|
|
165
171
|
distance=None,
|
166
172
|
dividends=[],
|
167
173
|
pot=None,
|
174
|
+
version=version,
|
168
175
|
)
|
@@ -13,7 +13,7 @@ from playwright.sync_api import Playwright, sync_playwright
|
|
13
13
|
from scrapesession.scrapesession import ScrapeSession # type: ignore
|
14
14
|
|
15
15
|
from ....playwright import ensure_install
|
16
|
-
from ...game_model import GameModel
|
16
|
+
from ...game_model import VERSION, GameModel
|
17
17
|
from ...league import League
|
18
18
|
from ...league_model import LeagueModel
|
19
19
|
from ..position import Position, position_from_str
|
@@ -59,14 +59,15 @@ def _parse_v1(
|
|
59
59
|
):
|
60
60
|
url = urllib.parse.urljoin(html_url, a.get("href"))
|
61
61
|
yield create_afl_afl_game_model(
|
62
|
-
team_names,
|
63
|
-
teams_players,
|
64
|
-
dt,
|
65
|
-
venue_name,
|
66
|
-
session,
|
67
|
-
ladder,
|
68
|
-
url,
|
69
|
-
playwright,
|
62
|
+
team_names=team_names,
|
63
|
+
players=teams_players,
|
64
|
+
dt=dt,
|
65
|
+
venue_name=venue_name,
|
66
|
+
session=session,
|
67
|
+
ladder=ladder,
|
68
|
+
url=url,
|
69
|
+
playwright=playwright,
|
70
|
+
version=VERSION,
|
70
71
|
)
|
71
72
|
|
72
73
|
|
@@ -150,14 +151,15 @@ def _parse_v2(
|
|
150
151
|
) -> Iterator[GameModel]:
|
151
152
|
for team_names, team_players, venue_name, url in _parse_v2_soup(soup, html_url):
|
152
153
|
yield create_afl_afl_game_model(
|
153
|
-
team_names,
|
154
|
-
team_players,
|
155
|
-
None,
|
156
|
-
venue_name,
|
157
|
-
session,
|
158
|
-
ladder,
|
159
|
-
url,
|
160
|
-
playwright,
|
154
|
+
team_names=team_names,
|
155
|
+
players=team_players,
|
156
|
+
dt=None,
|
157
|
+
venue_name=venue_name,
|
158
|
+
session=session,
|
159
|
+
ladder=ladder,
|
160
|
+
url=url,
|
161
|
+
playwright=playwright,
|
162
|
+
version=VERSION,
|
161
163
|
)
|
162
164
|
|
163
165
|
|
@@ -1,7 +1,7 @@
|
|
1
1
|
"""AFL AFL player model."""
|
2
2
|
|
3
3
|
# pylint: disable=duplicate-code
|
4
|
-
from ...player_model import PlayerModel
|
4
|
+
from ...player_model import VERSION, PlayerModel
|
5
5
|
from ...sex import Sex
|
6
6
|
from ...species import Species
|
7
7
|
from ..position import Position
|
@@ -70,4 +70,5 @@ def create_afl_afl_player_model(
|
|
70
70
|
points=None,
|
71
71
|
game_score=None,
|
72
72
|
point_differential=None,
|
73
|
+
version=VERSION,
|
73
74
|
)
|
@@ -20,6 +20,7 @@ def create_afl_afl_team_model(
|
|
20
20
|
dt: datetime.datetime,
|
21
21
|
ladder: list[str],
|
22
22
|
odds: float | None,
|
23
|
+
version: str,
|
23
24
|
) -> TeamModel:
|
24
25
|
"""Create a team model from AFL AFL."""
|
25
26
|
player_models = [
|
@@ -52,4 +53,5 @@ def create_afl_afl_team_model(
|
|
52
53
|
coaches=[],
|
53
54
|
lbw=None,
|
54
55
|
end_dt=None,
|
56
|
+
version=version,
|
55
57
|
)
|
@@ -13,6 +13,7 @@ def create_afl_afl_venue_model(
|
|
13
13
|
venue_name: str,
|
14
14
|
session: requests_cache.CachedSession,
|
15
15
|
dt: datetime.datetime,
|
16
|
+
version: str,
|
16
17
|
) -> VenueModel:
|
17
18
|
"""Create a game model from AFL Tables."""
|
18
19
|
address_model = create_google_address_model(venue_name, session, dt)
|
@@ -24,4 +25,5 @@ def create_afl_afl_venue_model(
|
|
24
25
|
is_indoor=None,
|
25
26
|
is_turf=None,
|
26
27
|
is_dirt=None,
|
28
|
+
version=version,
|
27
29
|
)
|
{sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/afl/afltables/afl_afltables_coach_model.py
RENAMED
@@ -16,13 +16,17 @@ from dateutil.parser import parse
|
|
16
16
|
from dateutil.relativedelta import relativedelta
|
17
17
|
|
18
18
|
from ....cache import MEMORY
|
19
|
-
from ...coach_model import CoachModel
|
19
|
+
from ...coach_model import VERSION, CoachModel
|
20
20
|
|
21
21
|
_COACH_URL_CACHE: dict[str, str] = {}
|
22
22
|
|
23
23
|
|
24
24
|
def _create_afl_afltables_coach_model(
|
25
|
-
url: str,
|
25
|
+
url: str,
|
26
|
+
session: requests_cache.CachedSession,
|
27
|
+
year: int,
|
28
|
+
dt: datetime.datetime,
|
29
|
+
version: str,
|
26
30
|
) -> CoachModel | None:
|
27
31
|
html = _COACH_URL_CACHE.get(url)
|
28
32
|
if html is None:
|
@@ -84,14 +88,21 @@ def _create_afl_afltables_coach_model(
|
|
84
88
|
name=name,
|
85
89
|
birth_date=birth_date,
|
86
90
|
age=relativedelta(birth_date, dt).years if birth_date is not None else None,
|
91
|
+
version=version,
|
87
92
|
)
|
88
93
|
|
89
94
|
|
90
95
|
@MEMORY.cache(ignore=["session"])
|
91
96
|
def _cached_create_afl_afltables_coach_model(
|
92
|
-
url: str,
|
97
|
+
url: str,
|
98
|
+
session: requests_cache.CachedSession,
|
99
|
+
year: int,
|
100
|
+
dt: datetime.datetime,
|
101
|
+
version: str,
|
93
102
|
) -> CoachModel | None:
|
94
|
-
return _create_afl_afltables_coach_model(
|
103
|
+
return _create_afl_afltables_coach_model(
|
104
|
+
url=url, session=session, year=year, dt=dt, version=version
|
105
|
+
)
|
95
106
|
|
96
107
|
|
97
108
|
def create_afl_afltables_coach_model(
|
@@ -100,9 +111,9 @@ def create_afl_afltables_coach_model(
|
|
100
111
|
"""Create a coach model from AFL tables."""
|
101
112
|
if not pytest_is_running.is_running():
|
102
113
|
return _cached_create_afl_afltables_coach_model(
|
103
|
-
url=url, session=session, year=year, dt=dt
|
114
|
+
url=url, session=session, year=year, dt=dt, version=VERSION
|
104
115
|
)
|
105
116
|
with session.cache_disabled():
|
106
117
|
return _create_afl_afltables_coach_model(
|
107
|
-
url=url, session=session, year=year, dt=dt
|
118
|
+
url=url, session=session, year=year, dt=dt, version=VERSION
|
108
119
|
)
|
{sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/afl/afltables/afl_afltables_game_model.py
RENAMED
@@ -11,7 +11,7 @@ from bs4 import BeautifulSoup, Tag
|
|
11
11
|
from dateutil.parser import parse
|
12
12
|
|
13
13
|
from ....cache import MEMORY
|
14
|
-
from ...game_model import GameModel
|
14
|
+
from ...game_model import VERSION, GameModel
|
15
15
|
from ...league import League
|
16
16
|
from ...season_type import SeasonType
|
17
17
|
from .afl_afltables_team_model import create_afl_afltables_team_model
|
@@ -144,6 +144,7 @@ def _create_afl_afltables_game_model(
|
|
144
144
|
league: League,
|
145
145
|
season_year: int | None,
|
146
146
|
season_type: SeasonType | None,
|
147
|
+
version: str,
|
147
148
|
) -> GameModel:
|
148
149
|
# pylint: disable=too-many-locals
|
149
150
|
response = session.get(url)
|
@@ -472,6 +473,7 @@ def _create_afl_afltables_game_model(
|
|
472
473
|
distance=None,
|
473
474
|
dividends=[],
|
474
475
|
pot=None,
|
476
|
+
version=version,
|
475
477
|
)
|
476
478
|
|
477
479
|
|
@@ -485,16 +487,18 @@ def _cached_create_afl_afltables_game_model(
|
|
485
487
|
league: League,
|
486
488
|
season_year: int | None,
|
487
489
|
season_type: SeasonType | None,
|
490
|
+
version: str,
|
488
491
|
) -> GameModel:
|
489
492
|
return _create_afl_afltables_game_model(
|
490
|
-
game_number,
|
491
|
-
session,
|
492
|
-
url,
|
493
|
-
last_round_number,
|
494
|
-
last_ladder_ranks,
|
495
|
-
league,
|
496
|
-
season_year,
|
497
|
-
season_type,
|
493
|
+
game_number=game_number,
|
494
|
+
session=session,
|
495
|
+
url=url,
|
496
|
+
last_round_number=last_round_number,
|
497
|
+
last_ladder_ranks=last_ladder_ranks,
|
498
|
+
league=league,
|
499
|
+
season_year=season_year,
|
500
|
+
season_type=season_type,
|
501
|
+
version=version,
|
498
502
|
)
|
499
503
|
|
500
504
|
|
@@ -511,23 +515,25 @@ def create_afl_afltables_game_model(
|
|
511
515
|
"""Create a game model from AFL Tables."""
|
512
516
|
if not pytest_is_running.is_running():
|
513
517
|
return _cached_create_afl_afltables_game_model(
|
514
|
-
game_number,
|
515
|
-
session,
|
516
|
-
url,
|
517
|
-
last_round_number,
|
518
|
-
last_ladder_ranks,
|
519
|
-
league,
|
520
|
-
season_year,
|
521
|
-
season_type,
|
518
|
+
game_number=game_number,
|
519
|
+
session=session,
|
520
|
+
url=url,
|
521
|
+
last_round_number=last_round_number,
|
522
|
+
last_ladder_ranks=last_ladder_ranks,
|
523
|
+
league=league,
|
524
|
+
season_year=season_year,
|
525
|
+
season_type=season_type,
|
526
|
+
version=VERSION,
|
522
527
|
)
|
523
528
|
with session.cache_disabled():
|
524
529
|
return _create_afl_afltables_game_model(
|
525
|
-
game_number,
|
526
|
-
session,
|
527
|
-
url,
|
528
|
-
last_round_number,
|
529
|
-
last_ladder_ranks,
|
530
|
-
league,
|
531
|
-
season_year,
|
532
|
-
season_type,
|
530
|
+
game_number=game_number,
|
531
|
+
session=session,
|
532
|
+
url=url,
|
533
|
+
last_round_number=last_round_number,
|
534
|
+
last_ladder_ranks=last_ladder_ranks,
|
535
|
+
league=league,
|
536
|
+
season_year=season_year,
|
537
|
+
season_type=season_type,
|
538
|
+
version=VERSION,
|
533
539
|
)
|
{sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/afl/afltables/afl_afltables_player_model.py
RENAMED
@@ -13,7 +13,7 @@ from dateutil.parser import parse
|
|
13
13
|
from dateutil.relativedelta import relativedelta
|
14
14
|
|
15
15
|
from ....cache import MEMORY
|
16
|
-
from ...player_model import PlayerModel
|
16
|
+
from ...player_model import VERSION, PlayerModel
|
17
17
|
from ...sex import Sex
|
18
18
|
from ...species import Species
|
19
19
|
|
@@ -47,6 +47,7 @@ def _create_afl_afltables_player_model(
|
|
47
47
|
percentage_played: float | None,
|
48
48
|
session: requests_cache.CachedSession,
|
49
49
|
dt: datetime.datetime,
|
50
|
+
version: str,
|
50
51
|
) -> PlayerModel:
|
51
52
|
o = urlparse(player_url)
|
52
53
|
last_component = o.path.split("/")[-1]
|
@@ -128,6 +129,7 @@ def _create_afl_afltables_player_model(
|
|
128
129
|
points=None,
|
129
130
|
game_score=None,
|
130
131
|
point_differential=None,
|
132
|
+
version=version,
|
131
133
|
)
|
132
134
|
|
133
135
|
|
@@ -161,6 +163,7 @@ def _cached_create_afl_afltables_player_model(
|
|
161
163
|
percentage_played: float | None,
|
162
164
|
session: requests_cache.CachedSession,
|
163
165
|
dt: datetime.datetime,
|
166
|
+
version: str,
|
164
167
|
) -> PlayerModel:
|
165
168
|
return _create_afl_afltables_player_model(
|
166
169
|
player_url=player_url,
|
@@ -191,6 +194,7 @@ def _cached_create_afl_afltables_player_model(
|
|
191
194
|
percentage_played=percentage_played,
|
192
195
|
session=session,
|
193
196
|
dt=dt,
|
197
|
+
version=version,
|
194
198
|
)
|
195
199
|
|
196
200
|
|
@@ -255,6 +259,7 @@ def create_afl_afltables_player_model(
|
|
255
259
|
percentage_played=percentage_played,
|
256
260
|
session=session,
|
257
261
|
dt=dt,
|
262
|
+
version=VERSION,
|
258
263
|
)
|
259
264
|
with session.cache_disabled():
|
260
265
|
return _create_afl_afltables_player_model(
|
@@ -286,4 +291,5 @@ def create_afl_afltables_player_model(
|
|
286
291
|
percentage_played=percentage_played,
|
287
292
|
session=session,
|
288
293
|
dt=dt,
|
294
|
+
version=VERSION,
|
289
295
|
)
|
{sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/afl/afltables/afl_afltables_team_model.py
RENAMED
@@ -13,7 +13,7 @@ from bs4 import BeautifulSoup
|
|
13
13
|
from ....cache import MEMORY
|
14
14
|
from ...google.google_news_model import create_google_news_models
|
15
15
|
from ...league import League
|
16
|
-
from ...team_model import TeamModel
|
16
|
+
from ...team_model import VERSION, TeamModel
|
17
17
|
from ...x.x_social_model import create_x_social_model
|
18
18
|
from .afl_afltables_coach_model import create_afl_afltables_coach_model
|
19
19
|
from .afl_afltables_player_model import create_afl_afltables_player_model
|
@@ -81,6 +81,7 @@ def _create_afl_afltables_team_model(
|
|
81
81
|
last_ladder_ranks: dict[str, int] | None,
|
82
82
|
dt: datetime.datetime,
|
83
83
|
league: League,
|
84
|
+
version: str,
|
84
85
|
) -> TeamModel:
|
85
86
|
response = session.get(team_url)
|
86
87
|
soup = BeautifulSoup(response.text, "lxml")
|
@@ -157,6 +158,7 @@ def _create_afl_afltables_team_model(
|
|
157
158
|
coaches=[coach_model] if coach_model is not None else [],
|
158
159
|
lbw=None,
|
159
160
|
end_dt=None,
|
161
|
+
version=version,
|
160
162
|
)
|
161
163
|
|
162
164
|
|
@@ -198,15 +200,17 @@ def _cached_create_afl_afltables_team_model(
|
|
198
200
|
last_ladder_ranks: dict[str, int] | None,
|
199
201
|
dt: datetime.datetime,
|
200
202
|
league: League,
|
203
|
+
version: str,
|
201
204
|
) -> TeamModel:
|
202
205
|
return _create_afl_afltables_team_model(
|
203
|
-
team_url,
|
204
|
-
players,
|
205
|
-
points,
|
206
|
-
session,
|
207
|
-
last_ladder_ranks,
|
208
|
-
dt,
|
209
|
-
league,
|
206
|
+
team_url=team_url,
|
207
|
+
players=players,
|
208
|
+
points=points,
|
209
|
+
session=session,
|
210
|
+
last_ladder_ranks=last_ladder_ranks,
|
211
|
+
dt=dt,
|
212
|
+
league=league,
|
213
|
+
version=version,
|
210
214
|
)
|
211
215
|
|
212
216
|
|
@@ -251,9 +255,23 @@ def create_afl_afltables_team_model(
|
|
251
255
|
"""Create a team model from AFL Tables."""
|
252
256
|
if not pytest_is_running.is_running():
|
253
257
|
return _cached_create_afl_afltables_team_model(
|
254
|
-
team_url,
|
258
|
+
team_url=team_url,
|
259
|
+
players=players,
|
260
|
+
points=points,
|
261
|
+
session=session,
|
262
|
+
last_ladder_ranks=last_ladder_ranks,
|
263
|
+
dt=dt,
|
264
|
+
league=league,
|
265
|
+
version=VERSION,
|
255
266
|
)
|
256
267
|
with session.cache_disabled():
|
257
268
|
return _create_afl_afltables_team_model(
|
258
|
-
team_url,
|
269
|
+
team_url=team_url,
|
270
|
+
players=players,
|
271
|
+
points=points,
|
272
|
+
session=session,
|
273
|
+
last_ladder_ranks=last_ladder_ranks,
|
274
|
+
dt=dt,
|
275
|
+
league=league,
|
276
|
+
version=VERSION,
|
259
277
|
)
|
{sportsball-0.6.22 → sportsball-0.7.0}/sportsball/data/afl/afltables/afl_afltables_venue_model.py
RENAMED
@@ -10,11 +10,14 @@ from bs4 import BeautifulSoup
|
|
10
10
|
|
11
11
|
from ....cache import MEMORY
|
12
12
|
from ...google.google_address_model import create_google_address_model
|
13
|
-
from ...venue_model import VenueModel
|
13
|
+
from ...venue_model import VERSION, VenueModel
|
14
14
|
|
15
15
|
|
16
16
|
def _create_afl_afltables_venue_model(
|
17
|
-
url: str,
|
17
|
+
url: str,
|
18
|
+
session: requests_cache.CachedSession,
|
19
|
+
dt: datetime.datetime,
|
20
|
+
version: str,
|
18
21
|
) -> VenueModel:
|
19
22
|
o = urlparse(url)
|
20
23
|
last_component = o.path.split("/")[-1]
|
@@ -35,14 +38,17 @@ def _create_afl_afltables_venue_model(
|
|
35
38
|
is_indoor=None,
|
36
39
|
is_turf=None,
|
37
40
|
is_dirt=None,
|
41
|
+
version=version,
|
38
42
|
)
|
39
43
|
|
40
44
|
|
41
45
|
@MEMORY.cache(ignore=["session"])
|
42
46
|
def _cached_create_afl_afltables_venue_model(
|
43
|
-
url: str, session: requests_cache.CachedSession, dt: datetime.datetime
|
47
|
+
url: str, session: requests_cache.CachedSession, dt: datetime.datetime, version: str
|
44
48
|
) -> VenueModel:
|
45
|
-
return _create_afl_afltables_venue_model(
|
49
|
+
return _create_afl_afltables_venue_model(
|
50
|
+
url=url, session=session, dt=dt, version=version
|
51
|
+
)
|
46
52
|
|
47
53
|
|
48
54
|
def create_afl_afltables_venue_model(
|
@@ -50,6 +56,10 @@ def create_afl_afltables_venue_model(
|
|
50
56
|
) -> VenueModel:
|
51
57
|
"""Create a venue model from AFL tables."""
|
52
58
|
if not pytest_is_running.is_running():
|
53
|
-
return _cached_create_afl_afltables_venue_model(
|
59
|
+
return _cached_create_afl_afltables_venue_model(
|
60
|
+
url=url, session=session, dt=dt, version=VERSION
|
61
|
+
)
|
54
62
|
with session.cache_disabled():
|
55
|
-
return _create_afl_afltables_venue_model(
|
63
|
+
return _create_afl_afltables_venue_model(
|
64
|
+
url=url, session=session, dt=dt, version=VERSION
|
65
|
+
)
|