sportsball 0.4.12__tar.gz → 0.4.14__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.4.12/sportsball.egg-info → sportsball-0.4.14}/PKG-INFO +1 -1
- {sportsball-0.4.12 → sportsball-0.4.14}/setup.py +1 -1
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/__init__.py +1 -1
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/afl/afl/afl_afl_league_model.py +5 -7
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/afl/afltables/afl_afltables_league_model.py +2 -4
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/afl/aussportsbetting/afl_aussportsbetting_league_model.py +2 -5
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/afl/combined/afl_combined_league_model.py +2 -5
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/afl/espn/afl_espn_league_model.py +2 -5
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/afl/oddsportal/afl_oddsportal_league_model.py +2 -5
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/aussportsbetting/aussportsbetting_league_model.py +2 -2
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/combined/combined_league_model.py +2 -3
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/espn/espn_league_model.py +2 -2
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/espn/espn_player_model.py +1 -2
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/google/google_address_model.py +19 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/hkjc/hkjc/hkjc_hkjc_coach_model.py +6 -7
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/hkjc/hkjc/hkjc_hkjc_game_model.py +4 -4
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/hkjc/hkjc/hkjc_hkjc_league_model.py +8 -10
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/hkjc/hkjc/hkjc_hkjc_player_model.py +10 -11
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/hkjc/hkjc/hkjc_hkjc_team_model.py +4 -4
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/league_model.py +2 -2
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/model.py +4 -5
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/nba/combined/nba_combined_league_model.py +2 -5
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/nba/espn/nba_espn_league_model.py +2 -5
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/nba/nba/nba_nba_league_model.py +2 -4
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/nba/nbacom/nba_nbacom_league_model.py +2 -5
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/nba/oddsportal/nba_oddsportal_league_model.py +2 -5
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/nba/sportsdb/nba_sportsdb_league_model.py +2 -5
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/nba/sportsreference/nba_sportsreference_league_model.py +2 -5
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/ncaab/combined/ncaab_combined_league_model.py +2 -5
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/ncaab/espn/ncaab_espn_league_model.py +2 -4
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/ncaab/oddsportal/ncaab_oddsportal_league_model.py +2 -5
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/ncaab/sportsreference/ncaab_sportsreference_league_model.py +2 -5
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/ncaaf/combined/ncaaf_combined_league_model.py +2 -5
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/ncaaf/espn/ncaaf_espn_league_model.py +2 -5
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/ncaaf/oddsportal/ncaaf_oddsportal_league_model.py +2 -5
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/nfl/aussportsbetting/nfl_aussportsbetting_league_model.py +2 -5
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/nfl/combined/nfl_combined_league_model.py +2 -5
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/nfl/espn/nfl_espn_league_model.py +2 -5
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/nfl/oddsportal/nfl_oddsportal_league_model.py +2 -5
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/nfl/sportsdb/nfl_sportsdb_league_model.py +2 -5
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/oddsportal/decrypt.py +6 -6
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/oddsportal/oddsportal_game_model.py +8 -11
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/oddsportal/oddsportal_league_model.py +6 -5
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/sportsdb/sportsdb_league_model.py +2 -2
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/sportsreference/sportsreference_coach_model.py +9 -8
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/sportsreference/sportsreference_game_model.py +8 -8
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/sportsreference/sportsreference_league_model.py +2 -2
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/sportsreference/sportsreference_team_model.py +11 -9
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/proxy_session.py +13 -5
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/sportsball.py +2 -3
- {sportsball-0.4.12 → sportsball-0.4.14/sportsball.egg-info}/PKG-INFO +1 -1
- {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/espn/espn_player_model_test.py +41 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/hkjc/hkjc/hkjc_hkjc_game_model_test.py +3 -1
- {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/hkjc/hkjc/hkjc_hkjc_player_model_test.py +18 -2
- sportsball-0.4.14/tests/data/oddsportal/decrypt_test.py +29 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/oddsportal/oddsportal_game_model_test.py +2 -1
- {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/sportsreference/sportsreference_team_model_test.py +3 -2
- sportsball-0.4.12/tests/data/oddsportal/decrypt_test.py +0 -28
- {sportsball-0.4.12 → sportsball-0.4.14}/LICENSE +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/MANIFEST.in +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/README.md +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/requirements.txt +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/setup.cfg +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/__main__.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/args.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/cache.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/__init__.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/address_model.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/afl/__init__.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/afl/afl/__init__.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/afl/afl/afl_afl_bookie_model.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/afl/afl/afl_afl_game_model.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/afl/afl/afl_afl_odds_model.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/afl/afl/afl_afl_player_model.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/afl/afl/afl_afl_team_model.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/afl/afl/afl_afl_venue_model.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/afl/afltables/__init__.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/afl/afltables/afl_afltables_coach_model.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/afl/afltables/afl_afltables_game_model.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/afl/afltables/afl_afltables_player_model.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/afl/afltables/afl_afltables_team_model.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/afl/afltables/afl_afltables_venue_model.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/afl/aussportsbetting/__init__.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/afl/combined/__init__.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/afl/espn/__init__.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/afl/oddsportal/__init__.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/afl/position.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/aussportsbetting/__init__.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/aussportsbetting/aussportsbetting_bookie_model.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/aussportsbetting/aussportsbetting_game_model.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/aussportsbetting/aussportsbetting_odds_model.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/aussportsbetting/aussportsbetting_team_model.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/aussportsbetting/aussportsbetting_venue_model.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/bet.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/bookie_model.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/coach_model.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/combined/__init__.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/combined/combined_address_model.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/combined/combined_coach_model.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/combined/combined_game_model.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/combined/combined_player_model.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/combined/combined_team_model.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/combined/combined_venue_model.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/combined/combined_weather_model.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/combined/null_check.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/dividend_model.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/espn/__init__.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/espn/espn_bookie_model.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/espn/espn_coach_model.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/espn/espn_game_model.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/espn/espn_odds_model.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/espn/espn_team_model.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/espn/espn_venue_model.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/field_type.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/game_model.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/google/__init__.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/google/google_news_model.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/hkjc/__init__.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/hkjc/hkjc/__init__.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/hkjc/hkjc/hkjc_hkjc_bookie_model.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/hkjc/hkjc/hkjc_hkjc_dividend_model.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/hkjc/hkjc/hkjc_hkjc_odds_model.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/hkjc/hkjc/hkjc_hkjc_owner_model.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/hkjc/hkjc/hkjc_hkjc_venue_model.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/hkjc/position.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/league.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/nba/__init__.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/nba/combined/__init__.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/nba/espn/__init__.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/nba/nba/__init__.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/nba/nba/nba_nba_game_model.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/nba/nba/nba_nba_team_model.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/nba/nbacom/__init__.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/nba/nbacom/nba_nbacom_game_model.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/nba/nbacom/nba_nbacom_player_model.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/nba/nbacom/nba_nbacom_team_model.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/nba/nbacom/nba_nbacom_venue_model.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/nba/oddsportal/__init__.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/nba/position.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/nba/sportsdb/__init__.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/nba/sportsreference/__init__.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/ncaab/__init__.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/ncaab/combined/__init__.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/ncaab/espn/__init__.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/ncaab/oddsportal/__init__.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/ncaab/sportsreference/__init__.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/ncaaf/__init__.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/ncaaf/combined/__init__.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/ncaaf/espn/__init__.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/ncaaf/oddsportal/__init__.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/news_model.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/nfl/__init__.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/nfl/aussportsbetting/__init__.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/nfl/combined/__init__.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/nfl/espn/__init__.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/nfl/oddsportal/__init__.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/nfl/position.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/nfl/sportsdb/__init__.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/odds_model.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/oddsportal/__init__.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/oddsportal/oddsportal_bookie_model.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/oddsportal/oddsportal_odds_model.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/oddsportal/oddsportal_team_model.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/oddsportal/oddsportal_venue_model.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/owner_model.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/player_model.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/season_type.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/sex.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/social_model.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/species.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/sportsdb/__init__.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/sportsdb/sportsdb_game_model.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/sportsdb/sportsdb_team_model.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/sportsdb/sportsdb_venue_model.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/sportsreference/__init__.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/sportsreference/sportsreference_player_model.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/sportsreference/sportsreference_venue_model.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/team_model.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/venue_model.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/weather/__init__.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/weather/gribstream/__init__.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/weather/gribstream/gribstream_weather_model.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/weather/multi_weather_model.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/weather/openmeteo/__init__.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/weather/openmeteo/openmeteo_weather_model.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/weather_model.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/wikipedia/__init__.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/wikipedia/wikipedia_venue_model.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/x/__init__.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/x/x_social_model.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/logger.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/loglevel.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/playwright.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/session.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/vendor/__init__.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/vendor/pygooglenews/__init__.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball.egg-info/SOURCES.txt +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball.egg-info/dependency_links.txt +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball.egg-info/entry_points.txt +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball.egg-info/not-zip-safe +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball.egg-info/requires.txt +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/sportsball.egg-info/top_level.txt +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/tests/__init__.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/__init__.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/afl/__init__.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/afl/afl/__init__.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/afl/afl/afl_afl_game_model_test.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/afl/afl/afl_afl_league_model_test.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/afl/afltables/__init__.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/afl/afltables/afl_afltables_coach_model_test.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/afl/afltables/afl_afltables_game_model_test.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/afl/afltables/afl_afltables_league_model_test.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/afl/afltables/afl_afltables_player_model_test.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/aussportsbetting/__init__.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/aussportsbetting/aussportsbetting_game_model_test.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/combined/__init__.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/combined/combined_game_model_test.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/combined/combined_player_model_test.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/combined/combined_team_model_test.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/combined/combined_venue_model_test.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/espn/__init__.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/espn/espn_game_model_test.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/game_model_test.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/google/__init__.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/google/google_address_model_test.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/google/google_news_model_test.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/hkjc/__init__.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/hkjc/hkjc/__init__.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/nba/__init__.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/nba/nba/__init__.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/nba/nba/nba_nba_game_model_test.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/nba/nba/nba_nba_league_model_test.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/nba/nba/nba_nba_team_model_test.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/nba/sportsdb/__init__.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/nba/sportsdb/nba_sportsdb_league_model_test.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/nba/sportsreference/__init__.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/nba/sportsreference/nba_sportsreference_league_model_test.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/ncaab/__init__.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/ncaab/sportsreference/__init__.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/ncaab/sportsreference/ncaab_sportsreference_league_model_test.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/nfl/__init__.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/nfl/sportsdb/__init__.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/nfl/sportsdb/nfl_sportsdb_league_model_test.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/oddsportal/__init__.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/oddsportal/oddsportal_league_model_test.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/player_model_test.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/social_model_test.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/sportsdb/__init__.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/sportsdb/sportsdb_game_model_test.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/sportsdb/sportsdb_league_model_test.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/sportsdb/sportsdb_team_model_test.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/sportsdb/sportsdb_venue_model_test.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/sportsreference/__init__.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/sportsreference/sportsreference_coach_model_test.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/sportsreference/sportsreference_game_model_test.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/sportsreference/sportsreference_league_model_test.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/sportsreference/sportsreference_player_model_test.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/sportsreference/sportsreference_venue_model_test.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/team_model_test.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/x/__init__.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/x/x_social_model_test.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/tests/proxy_session_test.py +0 -0
- {sportsball-0.4.12 → sportsball-0.4.14}/tests/sportsball_test.py +0 -0
@@ -26,7 +26,7 @@ def install_requires() -> typing.List[str]:
|
|
26
26
|
|
27
27
|
setup(
|
28
28
|
name='sportsball',
|
29
|
-
version='0.4.
|
29
|
+
version='0.4.14',
|
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',
|
@@ -7,12 +7,12 @@ import re
|
|
7
7
|
import urllib.parse
|
8
8
|
from typing import Iterator
|
9
9
|
|
10
|
-
import requests_cache
|
11
10
|
from bs4 import BeautifulSoup, Tag
|
12
11
|
from dateutil.parser import parse
|
13
12
|
from playwright.sync_api import Playwright, sync_playwright
|
14
13
|
|
15
14
|
from ....playwright import ensure_install
|
15
|
+
from ....proxy_session import ProxySession
|
16
16
|
from ...game_model import GameModel
|
17
17
|
from ...league import League
|
18
18
|
from ...league_model import LeagueModel
|
@@ -22,7 +22,7 @@ from .afl_afl_game_model import create_afl_afl_game_model, parse_players_v1
|
|
22
22
|
|
23
23
|
def _parse_v1(
|
24
24
|
soup: BeautifulSoup,
|
25
|
-
session:
|
25
|
+
session: ProxySession,
|
26
26
|
ladder: list[str],
|
27
27
|
html_url: str,
|
28
28
|
playwright: Playwright,
|
@@ -143,7 +143,7 @@ def _parse_v2_soup(
|
|
143
143
|
|
144
144
|
def _parse_v2(
|
145
145
|
soup: BeautifulSoup,
|
146
|
-
session:
|
146
|
+
session: ProxySession,
|
147
147
|
ladder: list[str],
|
148
148
|
html_url: str,
|
149
149
|
playwright: Playwright,
|
@@ -163,7 +163,7 @@ def _parse_v2(
|
|
163
163
|
|
164
164
|
def _parse_game_info(
|
165
165
|
html: str,
|
166
|
-
session:
|
166
|
+
session: ProxySession,
|
167
167
|
ladder: list[str],
|
168
168
|
html_url: str,
|
169
169
|
playwright: Playwright,
|
@@ -180,9 +180,7 @@ def _parse_game_info(
|
|
180
180
|
class AFLAFLLeagueModel(LeagueModel):
|
181
181
|
"""AFL AFL implementation of the league model."""
|
182
182
|
|
183
|
-
def __init__(
|
184
|
-
self, session: requests_cache.CachedSession, position: int | None = None
|
185
|
-
) -> None:
|
183
|
+
def __init__(self, session: ProxySession, position: int | None = None) -> None:
|
186
184
|
super().__init__(League.AFL, session, position=position)
|
187
185
|
|
188
186
|
@classmethod
|
{sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/afl/afltables/afl_afltables_league_model.py
RENAMED
@@ -8,11 +8,11 @@ import urllib.parse
|
|
8
8
|
from typing import Iterator
|
9
9
|
from urllib.parse import urlparse
|
10
10
|
|
11
|
-
import requests_cache
|
12
11
|
import tqdm
|
13
12
|
from bs4 import BeautifulSoup
|
14
13
|
from dateutil import parser
|
15
14
|
|
15
|
+
from ....proxy_session import ProxySession
|
16
16
|
from ...game_model import GameModel
|
17
17
|
from ...league import League
|
18
18
|
from ...league_model import LeagueModel
|
@@ -42,9 +42,7 @@ def _find_dt(td_text: str, season_url: str) -> datetime.datetime:
|
|
42
42
|
class AFLAFLTablesLeagueModel(LeagueModel):
|
43
43
|
"""AFL AFLTables implementation of the league model."""
|
44
44
|
|
45
|
-
def __init__(
|
46
|
-
self, session: requests_cache.CachedSession, position: int | None = None
|
47
|
-
) -> None:
|
45
|
+
def __init__(self, session: ProxySession, position: int | None = None) -> None:
|
48
46
|
super().__init__(League.AFL, session)
|
49
47
|
|
50
48
|
@classmethod
|
@@ -1,7 +1,6 @@
|
|
1
1
|
"""AFL aussportsbetting league model."""
|
2
2
|
|
3
|
-
import
|
4
|
-
|
3
|
+
from ....proxy_session import ProxySession
|
5
4
|
from ...aussportsbetting.aussportsbetting_league_model import \
|
6
5
|
AusSportsBettingLeagueModel
|
7
6
|
from ...league import League
|
@@ -10,9 +9,7 @@ from ...league import League
|
|
10
9
|
class AFLAusSportsBettingLeagueModel(AusSportsBettingLeagueModel):
|
11
10
|
"""AFL AusSportsBetting implementation of the league model."""
|
12
11
|
|
13
|
-
def __init__(
|
14
|
-
self, session: requests_cache.CachedSession, position: int | None = None
|
15
|
-
) -> None:
|
12
|
+
def __init__(self, session: ProxySession, position: int | None = None) -> None:
|
16
13
|
super().__init__(League.AFL, session, position=position)
|
17
14
|
|
18
15
|
@classmethod
|
{sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/afl/combined/afl_combined_league_model.py
RENAMED
@@ -1,7 +1,6 @@
|
|
1
1
|
"""AFL combined league model."""
|
2
2
|
|
3
|
-
import
|
4
|
-
|
3
|
+
from ....proxy_session import ProxySession
|
5
4
|
from ...combined.combined_league_model import CombinedLeagueModel
|
6
5
|
from ...league import League
|
7
6
|
from ..afl.afl_afl_league_model import AFLAFLLeagueModel
|
@@ -269,9 +268,7 @@ AFL_VENUE_IDENTITY_MAP = {
|
|
269
268
|
class AFLCombinedLeagueModel(CombinedLeagueModel):
|
270
269
|
"""AFL combined implementation of the league model."""
|
271
270
|
|
272
|
-
def __init__(
|
273
|
-
self, session: requests_cache.CachedSession, league_filter: str | None
|
274
|
-
) -> None:
|
271
|
+
def __init__(self, session: ProxySession, league_filter: str | None) -> None:
|
275
272
|
super().__init__(
|
276
273
|
session,
|
277
274
|
League.AFL,
|
@@ -2,8 +2,7 @@
|
|
2
2
|
|
3
3
|
# pylint: disable=line-too-long
|
4
4
|
|
5
|
-
import
|
6
|
-
|
5
|
+
from ....proxy_session import ProxySession
|
7
6
|
from ...espn.espn_league_model import ESPNLeagueModel
|
8
7
|
from ...league import League
|
9
8
|
|
@@ -13,9 +12,7 @@ _SEASON_URL = "https://sports.core.api.espn.com/v2/sports/australian-football/le
|
|
13
12
|
class AFLESPNLeagueModel(ESPNLeagueModel):
|
14
13
|
"""AFL ESPN implementation of the league model."""
|
15
14
|
|
16
|
-
def __init__(
|
17
|
-
self, session: requests_cache.CachedSession, position: int | None = None
|
18
|
-
) -> None:
|
15
|
+
def __init__(self, session: ProxySession, position: int | None = None) -> None:
|
19
16
|
super().__init__(_SEASON_URL, League.AFL, session, position=position)
|
20
17
|
|
21
18
|
@classmethod
|
@@ -2,8 +2,7 @@
|
|
2
2
|
|
3
3
|
# pylint: disable=line-too-long
|
4
4
|
|
5
|
-
import
|
6
|
-
|
5
|
+
from ....proxy_session import ProxySession
|
7
6
|
from ...league import League
|
8
7
|
from ...oddsportal.oddsportal_league_model import OddsPortalLeagueModel
|
9
8
|
|
@@ -11,9 +10,7 @@ from ...oddsportal.oddsportal_league_model import OddsPortalLeagueModel
|
|
11
10
|
class AFLOddsPortalLeagueModel(OddsPortalLeagueModel):
|
12
11
|
"""AFL OddsPortal implementation of the league model."""
|
13
12
|
|
14
|
-
def __init__(
|
15
|
-
self, session: requests_cache.CachedSession, position: int | None = None
|
16
|
-
) -> None:
|
13
|
+
def __init__(self, session: ProxySession, position: int | None = None) -> None:
|
17
14
|
super().__init__(League.AFL, session, position=position)
|
18
15
|
|
19
16
|
@classmethod
|
@@ -4,11 +4,11 @@
|
|
4
4
|
from io import BytesIO
|
5
5
|
from typing import Any, Iterator
|
6
6
|
|
7
|
-
import requests_cache
|
8
7
|
import tqdm
|
9
8
|
from dateutil.parser import parse
|
10
9
|
from openpyxl import load_workbook
|
11
10
|
|
11
|
+
from ...proxy_session import ProxySession
|
12
12
|
from ..game_model import GameModel
|
13
13
|
from ..league import League
|
14
14
|
from ..league_model import LeagueModel
|
@@ -21,7 +21,7 @@ class AusSportsBettingLeagueModel(LeagueModel):
|
|
21
21
|
def __init__(
|
22
22
|
self,
|
23
23
|
league: League,
|
24
|
-
session:
|
24
|
+
session: ProxySession,
|
25
25
|
position: int | None = None,
|
26
26
|
) -> None:
|
27
27
|
super().__init__(league, session, position=position)
|
@@ -6,8 +6,7 @@ import multiprocessing
|
|
6
6
|
from concurrent.futures import ThreadPoolExecutor
|
7
7
|
from typing import Any, Iterator
|
8
8
|
|
9
|
-
import
|
10
|
-
|
9
|
+
from ...proxy_session import ProxySession
|
11
10
|
from ..game_model import GameModel
|
12
11
|
from ..league import League
|
13
12
|
from ..league_model import LeagueModel
|
@@ -23,7 +22,7 @@ class CombinedLeagueModel(LeagueModel):
|
|
23
22
|
|
24
23
|
def __init__(
|
25
24
|
self,
|
26
|
-
session:
|
25
|
+
session: ProxySession,
|
27
26
|
league: League,
|
28
27
|
league_models: list[LeagueModel],
|
29
28
|
league_filter: str | None,
|
@@ -3,9 +3,9 @@
|
|
3
3
|
# pylint: disable=too-many-locals,too-many-arguments
|
4
4
|
from typing import Any, Iterator
|
5
5
|
|
6
|
-
import requests_cache
|
7
6
|
import tqdm
|
8
7
|
|
8
|
+
from ...proxy_session import ProxySession
|
9
9
|
from ..game_model import GameModel
|
10
10
|
from ..league import League
|
11
11
|
from ..league_model import LeagueModel
|
@@ -32,7 +32,7 @@ class ESPNLeagueModel(LeagueModel):
|
|
32
32
|
self,
|
33
33
|
start_url: str,
|
34
34
|
league: League,
|
35
|
-
session:
|
35
|
+
session: ProxySession,
|
36
36
|
position: int | None = None,
|
37
37
|
) -> None:
|
38
38
|
super().__init__(league, session, position=position)
|
@@ -50,8 +50,7 @@ def _create_espn_player_model(
|
|
50
50
|
try:
|
51
51
|
birth_date = parse(athlete_dict["dateOfBirth"]).date()
|
52
52
|
except KeyError:
|
53
|
-
logging.
|
54
|
-
raise
|
53
|
+
logging.warning("Failed to get birth date for %s", athlete_response.url)
|
55
54
|
|
56
55
|
birth_place = athlete_dict["birthPlace"]
|
57
56
|
return PlayerModel(
|
@@ -15543,6 +15543,25 @@ _CACHED_GEOCODES: dict[str, Any] = {
|
|
15543
15543
|
housenumber="",
|
15544
15544
|
country="Spain",
|
15545
15545
|
),
|
15546
|
+
"Corinthians Arena - Sao Paulo": SportsballGeocodeTuple(
|
15547
|
+
city="Sao Paulo",
|
15548
|
+
state="",
|
15549
|
+
postal="",
|
15550
|
+
lat=-23.54525,
|
15551
|
+
lng=-46.474278,
|
15552
|
+
housenumber="",
|
15553
|
+
country="Brazil",
|
15554
|
+
),
|
15555
|
+
"AT&T Stadium, Arlington, TX, USA": ATT_STADIUM,
|
15556
|
+
"Brandon, MS, USA": SportsballGeocodeTuple(
|
15557
|
+
city="Brandon",
|
15558
|
+
state="MS",
|
15559
|
+
postal="",
|
15560
|
+
lat=32.280278,
|
15561
|
+
lng=-89.998333,
|
15562
|
+
housenumber="",
|
15563
|
+
country="USA",
|
15564
|
+
),
|
15546
15565
|
}
|
15547
15566
|
|
15548
15567
|
|
@@ -4,19 +4,18 @@ import io
|
|
4
4
|
|
5
5
|
import pandas as pd
|
6
6
|
import pytest_is_running
|
7
|
-
import requests_cache
|
8
7
|
|
9
8
|
from ....cache import MEMORY
|
10
|
-
from ....proxy_session import
|
9
|
+
from ....proxy_session import ProxySession
|
11
10
|
from ...coach_model import CoachModel
|
12
11
|
|
13
12
|
|
14
13
|
def _create_hkjc_hkjc_coach_model(
|
15
|
-
session:
|
14
|
+
session: ProxySession,
|
16
15
|
url: str,
|
17
16
|
) -> CoachModel:
|
18
|
-
|
19
|
-
|
17
|
+
with session.wayback_disabled():
|
18
|
+
response = session.get(url)
|
20
19
|
response.raise_for_status()
|
21
20
|
|
22
21
|
handle = io.StringIO()
|
@@ -49,14 +48,14 @@ def _create_hkjc_hkjc_coach_model(
|
|
49
48
|
|
50
49
|
@MEMORY.cache(ignore=["session"])
|
51
50
|
def _cached_create_hkjc_hkjc_coach_model(
|
52
|
-
session:
|
51
|
+
session: ProxySession,
|
53
52
|
url: str,
|
54
53
|
) -> CoachModel:
|
55
54
|
return _create_hkjc_hkjc_coach_model(session=session, url=url)
|
56
55
|
|
57
56
|
|
58
57
|
def create_hkjc_hkjc_coach_model(
|
59
|
-
session:
|
58
|
+
session: ProxySession,
|
60
59
|
url: str,
|
61
60
|
) -> CoachModel:
|
62
61
|
"""Create a coach model based off HKJC."""
|
@@ -9,11 +9,11 @@ from urllib.parse import urlparse
|
|
9
9
|
|
10
10
|
import pandas as pd
|
11
11
|
import pytest_is_running
|
12
|
-
import requests_cache
|
13
12
|
from bs4 import BeautifulSoup
|
14
13
|
from dateutil.parser import parse
|
15
14
|
|
16
15
|
from ....cache import MEMORY
|
16
|
+
from ....proxy_session import ProxySession
|
17
17
|
from ...game_model import GameModel
|
18
18
|
from ...league import League
|
19
19
|
from ..position import position_from_str
|
@@ -28,7 +28,7 @@ RACE_COURSE_QUERY_KEY = "Racecourse"
|
|
28
28
|
|
29
29
|
|
30
30
|
def _create_hkjc_hkjc_game_model(
|
31
|
-
session:
|
31
|
+
session: ProxySession,
|
32
32
|
html: str,
|
33
33
|
url: str,
|
34
34
|
) -> GameModel | None:
|
@@ -279,7 +279,7 @@ def _create_hkjc_hkjc_game_model(
|
|
279
279
|
|
280
280
|
@MEMORY.cache(ignore=["session"])
|
281
281
|
def _cached_create_hkjc_hkjc_game_model(
|
282
|
-
session:
|
282
|
+
session: ProxySession,
|
283
283
|
html: str,
|
284
284
|
url: str,
|
285
285
|
) -> GameModel | None:
|
@@ -288,7 +288,7 @@ def _cached_create_hkjc_hkjc_game_model(
|
|
288
288
|
|
289
289
|
|
290
290
|
def create_hkjc_hkjc_game_model(
|
291
|
-
session:
|
291
|
+
session: ProxySession,
|
292
292
|
html: str,
|
293
293
|
url: str,
|
294
294
|
) -> GameModel | None:
|
@@ -6,11 +6,10 @@ import urllib.parse
|
|
6
6
|
from typing import Iterator
|
7
7
|
from urllib.parse import urlparse
|
8
8
|
|
9
|
-
import requests_cache
|
10
9
|
import tqdm
|
11
10
|
from bs4 import BeautifulSoup
|
12
11
|
|
13
|
-
from ....proxy_session import
|
12
|
+
from ....proxy_session import ProxySession
|
14
13
|
from ...game_model import GameModel
|
15
14
|
from ...league import League
|
16
15
|
from ...league_model import LeagueModel
|
@@ -23,9 +22,7 @@ from .hkjc_hkjc_venue_model import HAPPY_VALLEY_VENUE_CODE, SHA_TIN_VENUE_CODE
|
|
23
22
|
class HKJCHKJCLeagueModel(LeagueModel):
|
24
23
|
"""HKJC HKJC implementation of the league model."""
|
25
24
|
|
26
|
-
def __init__(
|
27
|
-
self, session: requests_cache.CachedSession, position: int | None = None
|
28
|
-
) -> None:
|
25
|
+
def __init__(self, session: ProxySession, position: int | None = None) -> None:
|
29
26
|
super().__init__(League.HKJC, session, position=position)
|
30
27
|
|
31
28
|
@classmethod
|
@@ -37,10 +34,10 @@ class HKJCHKJCLeagueModel(LeagueModel):
|
|
37
34
|
def games_for_date(dt: datetime.date) -> Iterator[GameModel]:
|
38
35
|
dt_str = dt.strftime("%Y/%m/%d")
|
39
36
|
for course in [SHA_TIN_VENUE_CODE, HAPPY_VALLEY_VENUE_CODE]:
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
37
|
+
with self.session.wayback_disabled():
|
38
|
+
response = self.session.get(
|
39
|
+
f"https://racing.hkjc.com/racing/information/English/Racing/LocalResults.aspx?{RACE_DATE_QUERY_KEY}={dt_str}&{RACE_COURSE_QUERY_KEY}={course}&{RACE_NUMBER_QUERY_KEY}=1",
|
40
|
+
)
|
44
41
|
response.raise_for_status()
|
45
42
|
game_model = create_hkjc_hkjc_game_model(
|
46
43
|
self.session, response.text, response.url
|
@@ -61,7 +58,8 @@ class HKJCHKJCLeagueModel(LeagueModel):
|
|
61
58
|
continue
|
62
59
|
if query[RACE_COURSE_QUERY_KEY][0] != course:
|
63
60
|
continue
|
64
|
-
|
61
|
+
with self.session.wayback_disabled():
|
62
|
+
response = self.session.get(url)
|
65
63
|
response.raise_for_status()
|
66
64
|
game_model = create_hkjc_hkjc_game_model(
|
67
65
|
self.session, response.text, response.url
|
@@ -8,11 +8,10 @@ from urllib.parse import urlparse
|
|
8
8
|
|
9
9
|
import pandas as pd
|
10
10
|
import pytest_is_running
|
11
|
-
import requests_cache
|
12
11
|
from bs4 import BeautifulSoup
|
13
12
|
|
14
13
|
from ....cache import MEMORY
|
15
|
-
from ....proxy_session import
|
14
|
+
from ....proxy_session import ProxySession
|
16
15
|
from ...google.google_address_model import create_google_address_model
|
17
16
|
from ...player_model import PlayerModel
|
18
17
|
from ...sex import sex_from_str
|
@@ -22,15 +21,15 @@ from .hkjc_hkjc_owner_model import create_hkjc_hkjc_owner_model
|
|
22
21
|
|
23
22
|
|
24
23
|
def _create_hkjc_hkjc_player_model(
|
25
|
-
session:
|
24
|
+
session: ProxySession,
|
26
25
|
url: str,
|
27
26
|
jersey: str | None,
|
28
27
|
handicap_weight: float | None,
|
29
28
|
starting_position: Position | None,
|
30
29
|
weight: float | None,
|
31
30
|
) -> PlayerModel | None:
|
32
|
-
|
33
|
-
|
31
|
+
with session.wayback_disabled():
|
32
|
+
response = session.get(url)
|
34
33
|
response.raise_for_status()
|
35
34
|
|
36
35
|
o = urlparse(url)
|
@@ -42,13 +41,12 @@ def _create_hkjc_hkjc_player_model(
|
|
42
41
|
dfs = []
|
43
42
|
try:
|
44
43
|
dfs = pd.read_html(handle)
|
45
|
-
except AttributeError as exc:
|
46
|
-
logging.warning(str(exc))
|
47
44
|
except ValueError:
|
48
45
|
if not is_sire:
|
49
46
|
logging.error(response.text)
|
50
47
|
logging.error(url)
|
51
|
-
|
48
|
+
logging.error(response.url)
|
49
|
+
return None
|
52
50
|
|
53
51
|
soup = BeautifulSoup(response.text, "lxml")
|
54
52
|
for noscript in soup.find_all("noscript"):
|
@@ -65,7 +63,7 @@ def _create_hkjc_hkjc_player_model(
|
|
65
63
|
age = None
|
66
64
|
birth_address = None
|
67
65
|
owner = None
|
68
|
-
if o.path.endswith("/Horse/Horse.aspx"):
|
66
|
+
if o.path.endswith("/Horse/Horse.aspx") or o.path.endswith("/Horse/OtherHorse.aspx"):
|
69
67
|
species = Species.HORSE
|
70
68
|
for count, df in enumerate(dfs):
|
71
69
|
if count == 0:
|
@@ -124,6 +122,7 @@ def _create_hkjc_hkjc_player_model(
|
|
124
122
|
logging.error(dfs)
|
125
123
|
logging.error(o.path)
|
126
124
|
logging.error(url)
|
125
|
+
logging.error(response.url)
|
127
126
|
raise ValueError("name is null")
|
128
127
|
|
129
128
|
return PlayerModel(
|
@@ -177,7 +176,7 @@ def _create_hkjc_hkjc_player_model(
|
|
177
176
|
|
178
177
|
@MEMORY.cache(ignore=["session"])
|
179
178
|
def _cached_create_hkjc_hkjc_player_model(
|
180
|
-
session:
|
179
|
+
session: ProxySession,
|
181
180
|
url: str,
|
182
181
|
jersey: str | None,
|
183
182
|
handicap_weight: float | None,
|
@@ -195,7 +194,7 @@ def _cached_create_hkjc_hkjc_player_model(
|
|
195
194
|
|
196
195
|
|
197
196
|
def create_hkjc_hkjc_player_model(
|
198
|
-
session:
|
197
|
+
session: ProxySession,
|
199
198
|
url: str,
|
200
199
|
jersey: str | None,
|
201
200
|
handicap_weight: float | None,
|
@@ -4,9 +4,9 @@
|
|
4
4
|
import datetime
|
5
5
|
|
6
6
|
import pytest_is_running
|
7
|
-
import requests_cache
|
8
7
|
|
9
8
|
from ....cache import MEMORY
|
9
|
+
from ....proxy_session import ProxySession
|
10
10
|
from ...odds_model import OddsModel
|
11
11
|
from ...team_model import TeamModel
|
12
12
|
from ..position import Position
|
@@ -15,7 +15,7 @@ from .hkjc_hkjc_player_model import create_hkjc_hkjc_player_model
|
|
15
15
|
|
16
16
|
|
17
17
|
def _create_hkjc_hkjc_team_model(
|
18
|
-
session:
|
18
|
+
session: ProxySession,
|
19
19
|
horse_url: str,
|
20
20
|
jockey_url: str | None,
|
21
21
|
trainer_url: str | None,
|
@@ -75,7 +75,7 @@ def _create_hkjc_hkjc_team_model(
|
|
75
75
|
|
76
76
|
@MEMORY.cache(ignore=["session"])
|
77
77
|
def _cached_create_hkjc_hkjc_team_model(
|
78
|
-
session:
|
78
|
+
session: ProxySession,
|
79
79
|
horse_url: str,
|
80
80
|
jockey_url: str | None,
|
81
81
|
trainer_url: str | None,
|
@@ -105,7 +105,7 @@ def _cached_create_hkjc_hkjc_team_model(
|
|
105
105
|
|
106
106
|
|
107
107
|
def create_hkjc_hkjc_team_model(
|
108
|
-
session:
|
108
|
+
session: ProxySession,
|
109
109
|
horse_url: str,
|
110
110
|
jockey_url: str | None,
|
111
111
|
trainer_url: str | None,
|
@@ -5,11 +5,11 @@ import datetime
|
|
5
5
|
from typing import Iterator, get_args, get_origin
|
6
6
|
|
7
7
|
import pandas as pd
|
8
|
-
import requests_cache
|
9
8
|
import tqdm
|
10
9
|
from flatten_json import flatten # type: ignore
|
11
10
|
from pydantic import BaseModel
|
12
11
|
|
12
|
+
from ..proxy_session import ProxySession
|
13
13
|
from .address_model import ADDRESS_TIMEZONE_COLUMN
|
14
14
|
from .field_type import FieldType
|
15
15
|
from .game_model import GAME_DT_COLUMN, VENUE_COLUMN_PREFIX, GameModel
|
@@ -76,7 +76,7 @@ class LeagueModel(Model):
|
|
76
76
|
def __init__(
|
77
77
|
self,
|
78
78
|
league: League,
|
79
|
-
session:
|
79
|
+
session: ProxySession,
|
80
80
|
position: int | None = None,
|
81
81
|
) -> None:
|
82
82
|
super().__init__(session)
|
@@ -2,21 +2,20 @@
|
|
2
2
|
|
3
3
|
# pylint: disable=too-few-public-methods
|
4
4
|
import pandas as pd
|
5
|
-
import requests_cache
|
6
5
|
|
7
|
-
from ..proxy_session import create_proxy_session
|
6
|
+
from ..proxy_session import ProxySession, create_proxy_session
|
8
7
|
|
9
8
|
|
10
9
|
class Model:
|
11
10
|
"""The base model class."""
|
12
11
|
|
13
|
-
_session:
|
12
|
+
_session: ProxySession | None
|
14
13
|
|
15
|
-
def __init__(self, session:
|
14
|
+
def __init__(self, session: ProxySession) -> None:
|
16
15
|
self._session = session
|
17
16
|
|
18
17
|
@property
|
19
|
-
def session(self) ->
|
18
|
+
def session(self) -> ProxySession:
|
20
19
|
"""Fetch a session that can never be null."""
|
21
20
|
session = self._session
|
22
21
|
if session is None:
|
{sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/nba/combined/nba_combined_league_model.py
RENAMED
@@ -2,8 +2,7 @@
|
|
2
2
|
|
3
3
|
# pylint: disable=line-too-long
|
4
4
|
|
5
|
-
import
|
6
|
-
|
5
|
+
from ....proxy_session import ProxySession
|
7
6
|
from ...combined.combined_league_model import CombinedLeagueModel
|
8
7
|
from ...league import League
|
9
8
|
from ..espn.nba_espn_league_model import NBAESPNLeagueModel
|
@@ -897,9 +896,7 @@ NBA_PLAYER_IDENTITY_MAP: dict[str, str] = {}
|
|
897
896
|
class NBACombinedLeagueModel(CombinedLeagueModel):
|
898
897
|
"""NBA combined implementation of the league model."""
|
899
898
|
|
900
|
-
def __init__(
|
901
|
-
self, session: requests_cache.CachedSession, league_filter: str | None
|
902
|
-
) -> None:
|
899
|
+
def __init__(self, session: ProxySession, league_filter: str | None) -> None:
|
903
900
|
super().__init__(
|
904
901
|
session,
|
905
902
|
League.NBA,
|
@@ -1,7 +1,6 @@
|
|
1
1
|
"""NBA ESPN league model."""
|
2
2
|
|
3
|
-
import
|
4
|
-
|
3
|
+
from ....proxy_session import ProxySession
|
5
4
|
from ...espn.espn_league_model import ESPNLeagueModel
|
6
5
|
from ...league import League
|
7
6
|
from ..position import Position
|
@@ -14,9 +13,7 @@ _SEASON_URL = (
|
|
14
13
|
class NBAESPNLeagueModel(ESPNLeagueModel):
|
15
14
|
"""NBA ESPN implementation of the league model."""
|
16
15
|
|
17
|
-
def __init__(
|
18
|
-
self, session: requests_cache.CachedSession, position: int | None = None
|
19
|
-
) -> None:
|
16
|
+
def __init__(self, session: ProxySession, position: int | None = None) -> None:
|
20
17
|
super().__init__(_SEASON_URL, League.NBA, session, position=position)
|
21
18
|
|
22
19
|
@classmethod
|
@@ -4,13 +4,13 @@ import datetime
|
|
4
4
|
from typing import Iterator, TypedDict
|
5
5
|
|
6
6
|
import pandas as pd
|
7
|
-
import requests_cache
|
8
7
|
import tqdm
|
9
8
|
from dateutil.parser import parse
|
10
9
|
from dateutil.relativedelta import relativedelta
|
11
10
|
from nba_api.library.http import NBAHTTP # type: ignore
|
12
11
|
from nba_api.stats.endpoints import leaguegamefinder # type: ignore
|
13
12
|
|
13
|
+
from ....proxy_session import ProxySession
|
14
14
|
from ...game_model import GameModel
|
15
15
|
from ...league import League
|
16
16
|
from ...league_model import LeagueModel
|
@@ -67,9 +67,7 @@ class NBANBALeagueModel(LeagueModel):
|
|
67
67
|
start: datetime.datetime
|
68
68
|
games: int
|
69
69
|
|
70
|
-
def __init__(
|
71
|
-
self, session: requests_cache.CachedSession, position: int | None = None
|
72
|
-
) -> None:
|
70
|
+
def __init__(self, session: ProxySession, position: int | None = None) -> None:
|
73
71
|
super().__init__(League.NBA, session, position=position)
|
74
72
|
self._league_id = "00"
|
75
73
|
NBAHTTP.set_session(session)
|