sportsball 0.3.116__tar.gz → 0.3.118__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.3.116/sportsball.egg-info → sportsball-0.3.118}/PKG-INFO +1 -1
- {sportsball-0.3.116 → sportsball-0.3.118}/setup.py +1 -1
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/__init__.py +1 -1
- sportsball-0.3.118/sportsball/data/afl/afl/afl_afl_bookie_model.py +8 -0
- sportsball-0.3.118/sportsball/data/afl/afl/afl_afl_game_model.py +75 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/afl/afl/afl_afl_league_model.py +24 -8
- sportsball-0.3.118/sportsball/data/afl/afl/afl_afl_odds_model.py +14 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/afl/afl/afl_afl_team_model.py +7 -2
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/aussportsbetting/aussportsbetting_odds_model.py +1 -1
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/espn/espn_odds_model.py +1 -1
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/odds_model.py +2 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/oddsportal/oddsportal_odds_model.py +1 -1
- {sportsball-0.3.116 → sportsball-0.3.118/sportsball.egg-info}/PKG-INFO +1 -1
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball.egg-info/SOURCES.txt +2 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/tests/data/afl/afl/afl_afl_league_model_test.py +1 -1
- sportsball-0.3.116/sportsball/data/afl/afl/afl_afl_game_model.py +0 -41
- {sportsball-0.3.116 → sportsball-0.3.118}/LICENSE +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/MANIFEST.in +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/README.md +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/requirements.txt +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/setup.cfg +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/__main__.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/args.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/cache.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/__init__.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/address_model.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/afl/__init__.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/afl/afl/__init__.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/afl/afl/afl_afl_player_model.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/afl/afl/afl_afl_venue_model.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/afl/afltables/__init__.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/afl/afltables/afl_afltables_game_model.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/afl/afltables/afl_afltables_league_model.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/afl/afltables/afl_afltables_player_model.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/afl/afltables/afl_afltables_team_model.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/afl/afltables/afl_afltables_venue_model.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/afl/aussportsbetting/__init__.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/afl/aussportsbetting/afl_aussportsbetting_league_model.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/afl/combined/__init__.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/afl/combined/afl_combined_league_model.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/afl/espn/__init__.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/afl/espn/afl_espn_league_model.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/afl/oddsportal/__init__.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/afl/oddsportal/afl_oddsportal_league_model.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/aussportsbetting/__init__.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/aussportsbetting/aussportsbetting_bookie_model.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/aussportsbetting/aussportsbetting_game_model.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/aussportsbetting/aussportsbetting_league_model.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/aussportsbetting/aussportsbetting_team_model.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/aussportsbetting/aussportsbetting_venue_model.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/bookie_model.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/combined/__init__.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/combined/combined_address_model.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/combined/combined_game_model.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/combined/combined_league_model.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/combined/combined_player_model.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/combined/combined_team_model.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/combined/combined_venue_model.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/combined/combined_weather_model.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/combined/null_check.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/espn/__init__.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/espn/espn_bookie_model.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/espn/espn_game_model.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/espn/espn_league_model.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/espn/espn_player_model.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/espn/espn_team_model.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/espn/espn_venue_model.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/field_type.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/game_model.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/google/__init__.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/google/google_address_model.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/google/google_news_model.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/league.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/league_model.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/model.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/nba/__init__.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/nba/combined/__init__.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/nba/combined/nba_combined_league_model.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/nba/espn/__init__.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/nba/espn/nba_espn_league_model.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/nba/nba/__init__.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/nba/nba/nba_nba_game_model.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/nba/nba/nba_nba_league_model.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/nba/nba/nba_nba_team_model.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/nba/oddsportal/__init__.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/nba/oddsportal/nba_oddsportal_league_model.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/nba/sportsdb/__init__.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/nba/sportsdb/nba_sportsdb_league_model.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/nba/sportsreference/__init__.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/nba/sportsreference/nba_sportsreference_league_model.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/ncaab/__init__.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/ncaab/combined/__init__.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/ncaab/combined/ncaab_combined_league_model.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/ncaab/espn/__init__.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/ncaab/espn/ncaab_espn_league_model.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/ncaab/oddsportal/__init__.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/ncaab/oddsportal/ncaab_oddsportal_league_model.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/ncaab/sportsreference/__init__.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/ncaab/sportsreference/ncaab_sportsreference_league_model.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/ncaaf/__init__.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/ncaaf/combined/__init__.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/ncaaf/combined/ncaaf_combined_league_model.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/ncaaf/espn/__init__.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/ncaaf/espn/ncaaf_espn_league_model.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/ncaaf/oddsportal/__init__.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/ncaaf/oddsportal/ncaaf_oddsportal_league_model.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/news_model.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/nfl/__init__.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/nfl/aussportsbetting/__init__.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/nfl/aussportsbetting/nfl_aussportsbetting_league_model.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/nfl/combined/__init__.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/nfl/combined/nfl_combined_league_model.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/nfl/espn/__init__.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/nfl/espn/nfl_espn_league_model.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/nfl/oddsportal/__init__.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/nfl/oddsportal/nfl_oddsportal_league_model.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/nfl/sportsdb/__init__.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/nfl/sportsdb/nfl_sportsdb_league_model.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/oddsportal/__init__.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/oddsportal/decrypt.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/oddsportal/oddsportal_bookie_model.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/oddsportal/oddsportal_game_model.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/oddsportal/oddsportal_league_model.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/oddsportal/oddsportal_team_model.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/oddsportal/oddsportal_venue_model.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/player_model.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/season_type.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/social_model.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/sportsdb/__init__.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/sportsdb/sportsdb_game_model.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/sportsdb/sportsdb_league_model.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/sportsdb/sportsdb_team_model.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/sportsdb/sportsdb_venue_model.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/sportsreference/__init__.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/sportsreference/sportsreference_game_model.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/sportsreference/sportsreference_league_model.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/sportsreference/sportsreference_player_model.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/sportsreference/sportsreference_team_model.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/sportsreference/sportsreference_venue_model.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/team_model.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/venue_model.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/weather/__init__.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/weather/gribstream/__init__.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/weather/gribstream/gribstream_weather_model.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/weather/multi_weather_model.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/weather/openmeteo/__init__.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/weather/openmeteo/openmeteo_weather_model.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/weather_model.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/wikipedia/__init__.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/wikipedia/wikipedia_venue_model.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/x/__init__.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/x/x_social_model.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/logger.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/loglevel.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/playwright.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/proxy_session.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/session.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/sportsball.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/vendor/__init__.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball/vendor/pygooglenews/__init__.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball.egg-info/dependency_links.txt +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball.egg-info/entry_points.txt +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball.egg-info/not-zip-safe +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball.egg-info/requires.txt +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/sportsball.egg-info/top_level.txt +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/tests/__init__.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/tests/data/__init__.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/tests/data/afl/__init__.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/tests/data/afl/afl/__init__.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/tests/data/afl/afltables/__init__.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/tests/data/afl/afltables/afl_afltables_game_model_test.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/tests/data/afl/afltables/afl_afltables_league_model_test.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/tests/data/afl/afltables/afl_afltables_player_model_test.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/tests/data/aussportsbetting/__init__.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/tests/data/aussportsbetting/aussportsbetting_game_model_test.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/tests/data/combined/__init__.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/tests/data/combined/combined_game_model_test.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/tests/data/combined/combined_player_model_test.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/tests/data/combined/combined_team_model_test.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/tests/data/espn/__init__.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/tests/data/espn/espn_game_model_test.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/tests/data/espn/espn_player_model_test.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/tests/data/game_model_test.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/tests/data/google/__init__.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/tests/data/google/google_address_model_test.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/tests/data/google/google_news_model_test.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/tests/data/nba/__init__.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/tests/data/nba/nba/__init__.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/tests/data/nba/nba/nba_nba_game_model_test.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/tests/data/nba/nba/nba_nba_league_model_test.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/tests/data/nba/nba/nba_nba_team_model_test.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/tests/data/nba/sportsdb/__init__.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/tests/data/nba/sportsdb/nba_sportsdb_league_model_test.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/tests/data/nba/sportsreference/__init__.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/tests/data/nba/sportsreference/nba_sportsreference_league_model_test.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/tests/data/ncaab/__init__.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/tests/data/ncaab/sportsreference/__init__.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/tests/data/ncaab/sportsreference/ncaab_sportsreference_league_model_test.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/tests/data/nfl/__init__.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/tests/data/nfl/sportsdb/__init__.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/tests/data/nfl/sportsdb/nfl_sportsdb_league_model_test.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/tests/data/oddsportal/__init__.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/tests/data/oddsportal/decrypt_test.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/tests/data/oddsportal/oddsportal_game_model_test.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/tests/data/oddsportal/oddsportal_league_model_test.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/tests/data/player_model_test.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/tests/data/social_model_test.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/tests/data/sportsdb/__init__.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/tests/data/sportsdb/sportsdb_game_model_test.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/tests/data/sportsdb/sportsdb_league_model_test.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/tests/data/sportsdb/sportsdb_team_model_test.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/tests/data/sportsdb/sportsdb_venue_model_test.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/tests/data/sportsreference/__init__.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/tests/data/sportsreference/sportsreference_game_model_test.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/tests/data/sportsreference/sportsreference_league_model_test.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/tests/data/sportsreference/sportsreference_player_model_test.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/tests/data/sportsreference/sportsreference_team_model_test.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/tests/data/sportsreference/sportsreference_venue_model_test.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/tests/data/team_model_test.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/tests/data/x/__init__.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/tests/data/x/x_social_model_test.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/tests/proxy_session_test.py +0 -0
- {sportsball-0.3.116 → sportsball-0.3.118}/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.3.
|
29
|
+
version='0.3.118',
|
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',
|
@@ -0,0 +1,75 @@
|
|
1
|
+
"""AFL AFL game model."""
|
2
|
+
|
3
|
+
# pylint: disable=too-many-statements,protected-access,too-many-arguments,bare-except
|
4
|
+
import datetime
|
5
|
+
import logging
|
6
|
+
|
7
|
+
import pytest_is_running
|
8
|
+
import requests_cache
|
9
|
+
from bs4 import BeautifulSoup
|
10
|
+
from playwright.sync_api import Playwright
|
11
|
+
|
12
|
+
from ....playwright import ensure_install
|
13
|
+
from ...game_model import GameModel
|
14
|
+
from ...league import League
|
15
|
+
from .afl_afl_team_model import create_afl_afl_team_model
|
16
|
+
from .afl_afl_venue_model import create_afl_afl_venue_model
|
17
|
+
|
18
|
+
|
19
|
+
def _extract_odds(html: str) -> list[float]:
|
20
|
+
odds = []
|
21
|
+
soup = BeautifulSoup(html, "lxml")
|
22
|
+
for span in soup.find_all("span", {"class": "betting-button__money"}):
|
23
|
+
odds.append(float(span.get_text().strip().replace("$", "")))
|
24
|
+
return odds
|
25
|
+
|
26
|
+
|
27
|
+
def create_afl_afl_game_model(
|
28
|
+
team_names: list[str],
|
29
|
+
players: list[list[tuple[str, str, str, str]]],
|
30
|
+
dt: datetime.datetime,
|
31
|
+
venue_name: str,
|
32
|
+
session: requests_cache.CachedSession,
|
33
|
+
ladder: list[str],
|
34
|
+
url: str | None,
|
35
|
+
playwright: Playwright,
|
36
|
+
) -> GameModel:
|
37
|
+
"""Create a game model from AFL Tables."""
|
38
|
+
odds = []
|
39
|
+
if url is not None and not pytest_is_running.is_running():
|
40
|
+
ensure_install()
|
41
|
+
browser = playwright.chromium.launch()
|
42
|
+
context = browser.new_context()
|
43
|
+
page = context.new_page()
|
44
|
+
try:
|
45
|
+
page.goto(url, wait_until="networkidle")
|
46
|
+
except: # noqa: E722
|
47
|
+
logging.warning("Ladder URL timed out.")
|
48
|
+
odds = _extract_odds(page.content())
|
49
|
+
|
50
|
+
venue_model = create_afl_afl_venue_model(venue_name, session, dt)
|
51
|
+
teams = [
|
52
|
+
create_afl_afl_team_model(
|
53
|
+
x,
|
54
|
+
players[count],
|
55
|
+
session,
|
56
|
+
dt,
|
57
|
+
ladder,
|
58
|
+
odds[count] if count < len(odds) else None,
|
59
|
+
)
|
60
|
+
for count, x in enumerate(team_names)
|
61
|
+
]
|
62
|
+
return GameModel(
|
63
|
+
dt=dt,
|
64
|
+
week=None,
|
65
|
+
game_number=None,
|
66
|
+
venue=venue_model,
|
67
|
+
teams=teams,
|
68
|
+
end_dt=None,
|
69
|
+
attendance=None,
|
70
|
+
league=League.AFL,
|
71
|
+
year=datetime.datetime.today().year,
|
72
|
+
season_type=None,
|
73
|
+
postponed=None,
|
74
|
+
play_off=None,
|
75
|
+
)
|
@@ -1,15 +1,16 @@
|
|
1
1
|
"""AFL AFL league model."""
|
2
2
|
|
3
|
-
# pylint: disable=too-many-statements,protected-access,too-many-locals,bare-except,too-many-branches
|
3
|
+
# pylint: disable=too-many-statements,protected-access,too-many-locals,bare-except,too-many-branches,duplicate-code
|
4
4
|
import datetime
|
5
5
|
import logging
|
6
6
|
import re
|
7
|
+
import urllib.parse
|
7
8
|
from typing import Iterator
|
8
9
|
|
9
10
|
import requests_cache
|
10
11
|
from bs4 import BeautifulSoup
|
11
12
|
from dateutil.parser import parse
|
12
|
-
from playwright.sync_api import sync_playwright
|
13
|
+
from playwright.sync_api import Playwright, sync_playwright
|
13
14
|
|
14
15
|
from ....playwright import ensure_install
|
15
16
|
from ...game_model import GameModel
|
@@ -19,7 +20,11 @@ from .afl_afl_game_model import create_afl_afl_game_model
|
|
19
20
|
|
20
21
|
|
21
22
|
def _parse_game_info(
|
22
|
-
html: str,
|
23
|
+
html: str,
|
24
|
+
session: requests_cache.CachedSession,
|
25
|
+
ladder: list[str],
|
26
|
+
html_url: str,
|
27
|
+
playwright: Playwright,
|
23
28
|
) -> Iterator[GameModel]:
|
24
29
|
soup = BeautifulSoup(html, "lxml")
|
25
30
|
for div in soup.find_all("div", {"class": re.compile(".*js-match-list-item.*")}):
|
@@ -88,8 +93,20 @@ def _parse_game_info(
|
|
88
93
|
raise ValueError("venue_name is null")
|
89
94
|
if dt is None:
|
90
95
|
raise ValueError("dt is null")
|
96
|
+
url = None
|
97
|
+
for a in div.find_all(
|
98
|
+
"a", {"class": re.compile(".*match-list-alt__header-mc-link.*")}
|
99
|
+
):
|
100
|
+
url = urllib.parse.urljoin(html_url, a.get("href"))
|
91
101
|
yield create_afl_afl_game_model(
|
92
|
-
team_names,
|
102
|
+
team_names,
|
103
|
+
teams_players,
|
104
|
+
dt,
|
105
|
+
venue_name,
|
106
|
+
session,
|
107
|
+
ladder,
|
108
|
+
url,
|
109
|
+
playwright,
|
93
110
|
)
|
94
111
|
|
95
112
|
|
@@ -139,7 +156,6 @@ class AFLAFLLeagueModel(LeagueModel):
|
|
139
156
|
browser = p.chromium.launch()
|
140
157
|
context = browser.new_context()
|
141
158
|
page = context.new_page()
|
142
|
-
|
143
|
-
|
144
|
-
)
|
145
|
-
yield from _parse_game_info(page.content(), self.session, ladder)
|
159
|
+
url = "https://www.afl.com.au/matches/team-lineups"
|
160
|
+
page.goto(url, wait_until="networkidle")
|
161
|
+
yield from _parse_game_info(page.content(), self.session, ladder, url, p)
|
@@ -0,0 +1,14 @@
|
|
1
|
+
"""AFL AFL odds model."""
|
2
|
+
|
3
|
+
import datetime
|
4
|
+
|
5
|
+
from ...team_model import OddsModel
|
6
|
+
from .afl_afl_bookie_model import create_afl_afl_bookie_model
|
7
|
+
|
8
|
+
|
9
|
+
def create_afl_afl_odds_model(odds: float) -> OddsModel:
|
10
|
+
"""Create an odds model based off aus sports betting."""
|
11
|
+
bookie = create_afl_afl_bookie_model()
|
12
|
+
return OddsModel(
|
13
|
+
odds=odds, bookie=bookie, dt=datetime.datetime.now(), canonical=True
|
14
|
+
) # pyright: ignore
|
@@ -1,6 +1,6 @@
|
|
1
1
|
"""AFL AFL team model."""
|
2
2
|
|
3
|
-
# pylint: disable=duplicate-code
|
3
|
+
# pylint: disable=duplicate-code,too-many-arguments
|
4
4
|
import datetime
|
5
5
|
|
6
6
|
import requests_cache
|
@@ -8,6 +8,7 @@ import requests_cache
|
|
8
8
|
from ...google.google_news_model import create_google_news_models
|
9
9
|
from ...league import League
|
10
10
|
from ...team_model import TeamModel
|
11
|
+
from .afl_afl_odds_model import create_afl_afl_odds_model
|
11
12
|
from .afl_afl_player_model import create_afl_afl_player_model
|
12
13
|
|
13
14
|
|
@@ -17,6 +18,7 @@ def create_afl_afl_team_model(
|
|
17
18
|
session: requests_cache.CachedSession,
|
18
19
|
dt: datetime.datetime,
|
19
20
|
ladder: list[str],
|
21
|
+
odds: float | None,
|
20
22
|
) -> TeamModel:
|
21
23
|
"""Create a team model from AFL AFL."""
|
22
24
|
player_models = [
|
@@ -25,12 +27,15 @@ def create_afl_afl_team_model(
|
|
25
27
|
)
|
26
28
|
for identifier, player_number, first_name, second_name in players
|
27
29
|
]
|
30
|
+
odds_models = []
|
31
|
+
if odds is not None:
|
32
|
+
odds_models.append(create_afl_afl_odds_model(odds))
|
28
33
|
return TeamModel(
|
29
34
|
identifier=team_name,
|
30
35
|
name=team_name,
|
31
36
|
location=None,
|
32
37
|
players=player_models,
|
33
|
-
odds=
|
38
|
+
odds=odds_models,
|
34
39
|
points=None,
|
35
40
|
ladder_rank=ladder.index(team_name) + 1,
|
36
41
|
kicks=None,
|
@@ -9,4 +9,4 @@ from .aussportsbetting_bookie_model import create_aussportsbetting_bookie_model
|
|
9
9
|
def create_aussportsbetting_odds_model(odds: float) -> OddsModel:
|
10
10
|
"""Create an odds model based off aus sports betting."""
|
11
11
|
bookie = create_aussportsbetting_bookie_model()
|
12
|
-
return OddsModel(odds=odds, bookie=bookie, dt=None) # pyright: ignore
|
12
|
+
return OddsModel(odds=odds, bookie=bookie, dt=None, canonical=True) # pyright: ignore
|
@@ -18,4 +18,4 @@ def create_espn_odds_model(odds: dict[str, Any], bookie: BookieModel) -> OddsMod
|
|
18
18
|
odds_val = (float(moneyline) / 100.0) + 1.0
|
19
19
|
elif moneyline < 0:
|
20
20
|
odds_val = (100.0 / float(abs(moneyline))) + 1.0
|
21
|
-
return OddsModel(odds=odds_val, bookie=bookie, dt=None)
|
21
|
+
return OddsModel(odds=odds_val, bookie=bookie, dt=None, canonical=False)
|
@@ -11,6 +11,7 @@ from .field_type import TYPE_KEY, FieldType
|
|
11
11
|
DT_COLUMN: Literal["dt"] = "dt"
|
12
12
|
ODDS_ODDS_COLUMN: Literal["odds"] = "odds"
|
13
13
|
ODDS_BOOKIE_COLUMN: Literal["bookie"] = "bookie"
|
14
|
+
ODDS_CANONICAL_COLUMN: Literal["canonical"] = "canonical"
|
14
15
|
|
15
16
|
|
16
17
|
class OddsModel(BaseModel):
|
@@ -24,3 +25,4 @@ class OddsModel(BaseModel):
|
|
24
25
|
...,
|
25
26
|
alias=DT_COLUMN,
|
26
27
|
)
|
28
|
+
canonical: bool = Field(..., alias=ODDS_CANONICAL_COLUMN)
|
{sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/oddsportal/oddsportal_odds_model.py
RENAMED
@@ -13,4 +13,4 @@ def create_oddsportal_odds_model(
|
|
13
13
|
) -> OddsModel:
|
14
14
|
"""Create an odds model based off aus sports betting."""
|
15
15
|
bookie = create_oddsportal_bookie_model(bookie_name, bookie_id)
|
16
|
-
return OddsModel(odds=odds, bookie=bookie, dt=dt) # pyright: ignore
|
16
|
+
return OddsModel(odds=odds, bookie=bookie, dt=dt, canonical=False) # pyright: ignore
|
@@ -38,8 +38,10 @@ sportsball/data/venue_model.py
|
|
38
38
|
sportsball/data/weather_model.py
|
39
39
|
sportsball/data/afl/__init__.py
|
40
40
|
sportsball/data/afl/afl/__init__.py
|
41
|
+
sportsball/data/afl/afl/afl_afl_bookie_model.py
|
41
42
|
sportsball/data/afl/afl/afl_afl_game_model.py
|
42
43
|
sportsball/data/afl/afl/afl_afl_league_model.py
|
44
|
+
sportsball/data/afl/afl/afl_afl_odds_model.py
|
43
45
|
sportsball/data/afl/afl/afl_afl_player_model.py
|
44
46
|
sportsball/data/afl/afl/afl_afl_team_model.py
|
45
47
|
sportsball/data/afl/afl/afl_afl_venue_model.py
|
@@ -34,7 +34,7 @@ class TestAFLAFLLeagueModel(unittest.TestCase):
|
|
34
34
|
"Geelong Cats",
|
35
35
|
"Hawthorn",
|
36
36
|
"West Coast Eagles",
|
37
|
-
]))
|
37
|
+
], "https://www.afl.com.au/matches/team-lineups", None))
|
38
38
|
first_game = game_models[0]
|
39
39
|
self.assertEqual(len(first_game.teams), 2)
|
40
40
|
for team in first_game.teams:
|
@@ -1,41 +0,0 @@
|
|
1
|
-
"""AFL AFL game model."""
|
2
|
-
|
3
|
-
# pylint: disable=too-many-statements,protected-access,too-many-arguments
|
4
|
-
import datetime
|
5
|
-
|
6
|
-
import requests_cache
|
7
|
-
|
8
|
-
from ...game_model import GameModel
|
9
|
-
from ...league import League
|
10
|
-
from .afl_afl_team_model import create_afl_afl_team_model
|
11
|
-
from .afl_afl_venue_model import create_afl_afl_venue_model
|
12
|
-
|
13
|
-
|
14
|
-
def create_afl_afl_game_model(
|
15
|
-
team_names: list[str],
|
16
|
-
players: list[list[tuple[str, str, str, str]]],
|
17
|
-
dt: datetime.datetime,
|
18
|
-
venue_name: str,
|
19
|
-
session: requests_cache.CachedSession,
|
20
|
-
ladder: list[str],
|
21
|
-
) -> GameModel:
|
22
|
-
"""Create a game model from AFL Tables."""
|
23
|
-
venue_model = create_afl_afl_venue_model(venue_name, session, dt)
|
24
|
-
teams = [
|
25
|
-
create_afl_afl_team_model(x, players[count], session, dt, ladder)
|
26
|
-
for count, x in enumerate(team_names)
|
27
|
-
]
|
28
|
-
return GameModel(
|
29
|
-
dt=dt,
|
30
|
-
week=None,
|
31
|
-
game_number=None,
|
32
|
-
venue=venue_model,
|
33
|
-
teams=teams,
|
34
|
-
end_dt=None,
|
35
|
-
attendance=None,
|
36
|
-
league=League.AFL,
|
37
|
-
year=datetime.datetime.today().year,
|
38
|
-
season_type=None,
|
39
|
-
postponed=None,
|
40
|
-
play_off=None,
|
41
|
-
)
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/afl/afltables/afl_afltables_game_model.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/afl/afltables/afl_afltables_team_model.py
RENAMED
File without changes
|
{sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/afl/afltables/afl_afltables_venue_model.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/afl/combined/afl_combined_league_model.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/combined/combined_address_model.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/combined/combined_weather_model.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/nba/combined/nba_combined_league_model.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/nba/sportsdb/nba_sportsdb_league_model.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/ncaab/espn/ncaab_espn_league_model.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/ncaaf/espn/ncaaf_espn_league_model.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/nfl/combined/nfl_combined_league_model.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/nfl/sportsdb/nfl_sportsdb_league_model.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/oddsportal/oddsportal_bookie_model.py
RENAMED
File without changes
|
{sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/oddsportal/oddsportal_game_model.py
RENAMED
File without changes
|
{sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/oddsportal/oddsportal_league_model.py
RENAMED
File without changes
|
{sportsball-0.3.116 → sportsball-0.3.118}/sportsball/data/oddsportal/oddsportal_team_model.py
RENAMED
File without changes
|