sportsball 0.3.118__tar.gz → 0.3.119__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.118/sportsball.egg-info → sportsball-0.3.119}/PKG-INFO +1 -1
- {sportsball-0.3.118 → sportsball-0.3.119}/setup.py +1 -1
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/__init__.py +1 -1
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/afl/afl/afl_afl_game_model.py +20 -7
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/afl/afl/afl_afl_league_model.py +89 -5
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/afl/combined/afl_combined_league_model.py +9 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/google/google_address_model.py +18 -0
- {sportsball-0.3.118 → sportsball-0.3.119/sportsball.egg-info}/PKG-INFO +1 -1
- {sportsball-0.3.118 → sportsball-0.3.119}/LICENSE +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/MANIFEST.in +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/README.md +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/requirements.txt +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/setup.cfg +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/__main__.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/args.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/cache.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/__init__.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/address_model.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/afl/__init__.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/afl/afl/__init__.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/afl/afl/afl_afl_bookie_model.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/afl/afl/afl_afl_odds_model.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/afl/afl/afl_afl_player_model.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/afl/afl/afl_afl_team_model.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/afl/afl/afl_afl_venue_model.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/afl/afltables/__init__.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/afl/afltables/afl_afltables_game_model.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/afl/afltables/afl_afltables_league_model.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/afl/afltables/afl_afltables_player_model.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/afl/afltables/afl_afltables_team_model.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/afl/afltables/afl_afltables_venue_model.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/afl/aussportsbetting/__init__.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/afl/aussportsbetting/afl_aussportsbetting_league_model.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/afl/combined/__init__.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/afl/espn/__init__.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/afl/espn/afl_espn_league_model.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/afl/oddsportal/__init__.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/afl/oddsportal/afl_oddsportal_league_model.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/aussportsbetting/__init__.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/aussportsbetting/aussportsbetting_bookie_model.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/aussportsbetting/aussportsbetting_game_model.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/aussportsbetting/aussportsbetting_league_model.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/aussportsbetting/aussportsbetting_odds_model.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/aussportsbetting/aussportsbetting_team_model.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/aussportsbetting/aussportsbetting_venue_model.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/bookie_model.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/combined/__init__.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/combined/combined_address_model.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/combined/combined_game_model.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/combined/combined_league_model.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/combined/combined_player_model.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/combined/combined_team_model.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/combined/combined_venue_model.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/combined/combined_weather_model.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/combined/null_check.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/espn/__init__.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/espn/espn_bookie_model.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/espn/espn_game_model.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/espn/espn_league_model.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/espn/espn_odds_model.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/espn/espn_player_model.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/espn/espn_team_model.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/espn/espn_venue_model.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/field_type.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/game_model.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/google/__init__.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/google/google_news_model.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/league.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/league_model.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/model.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/nba/__init__.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/nba/combined/__init__.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/nba/combined/nba_combined_league_model.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/nba/espn/__init__.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/nba/espn/nba_espn_league_model.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/nba/nba/__init__.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/nba/nba/nba_nba_game_model.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/nba/nba/nba_nba_league_model.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/nba/nba/nba_nba_team_model.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/nba/oddsportal/__init__.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/nba/oddsportal/nba_oddsportal_league_model.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/nba/sportsdb/__init__.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/nba/sportsdb/nba_sportsdb_league_model.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/nba/sportsreference/__init__.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/nba/sportsreference/nba_sportsreference_league_model.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/ncaab/__init__.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/ncaab/combined/__init__.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/ncaab/combined/ncaab_combined_league_model.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/ncaab/espn/__init__.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/ncaab/espn/ncaab_espn_league_model.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/ncaab/oddsportal/__init__.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/ncaab/oddsportal/ncaab_oddsportal_league_model.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/ncaab/sportsreference/__init__.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/ncaab/sportsreference/ncaab_sportsreference_league_model.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/ncaaf/__init__.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/ncaaf/combined/__init__.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/ncaaf/combined/ncaaf_combined_league_model.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/ncaaf/espn/__init__.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/ncaaf/espn/ncaaf_espn_league_model.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/ncaaf/oddsportal/__init__.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/ncaaf/oddsportal/ncaaf_oddsportal_league_model.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/news_model.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/nfl/__init__.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/nfl/aussportsbetting/__init__.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/nfl/aussportsbetting/nfl_aussportsbetting_league_model.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/nfl/combined/__init__.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/nfl/combined/nfl_combined_league_model.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/nfl/espn/__init__.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/nfl/espn/nfl_espn_league_model.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/nfl/oddsportal/__init__.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/nfl/oddsportal/nfl_oddsportal_league_model.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/nfl/sportsdb/__init__.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/nfl/sportsdb/nfl_sportsdb_league_model.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/odds_model.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/oddsportal/__init__.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/oddsportal/decrypt.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/oddsportal/oddsportal_bookie_model.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/oddsportal/oddsportal_game_model.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/oddsportal/oddsportal_league_model.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/oddsportal/oddsportal_odds_model.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/oddsportal/oddsportal_team_model.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/oddsportal/oddsportal_venue_model.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/player_model.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/season_type.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/social_model.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/sportsdb/__init__.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/sportsdb/sportsdb_game_model.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/sportsdb/sportsdb_league_model.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/sportsdb/sportsdb_team_model.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/sportsdb/sportsdb_venue_model.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/sportsreference/__init__.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/sportsreference/sportsreference_game_model.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/sportsreference/sportsreference_league_model.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/sportsreference/sportsreference_player_model.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/sportsreference/sportsreference_team_model.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/sportsreference/sportsreference_venue_model.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/team_model.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/venue_model.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/weather/__init__.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/weather/gribstream/__init__.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/weather/gribstream/gribstream_weather_model.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/weather/multi_weather_model.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/weather/openmeteo/__init__.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/weather/openmeteo/openmeteo_weather_model.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/weather_model.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/wikipedia/__init__.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/wikipedia/wikipedia_venue_model.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/x/__init__.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/x/x_social_model.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/logger.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/loglevel.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/playwright.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/proxy_session.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/session.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/sportsball.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/vendor/__init__.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/vendor/pygooglenews/__init__.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball.egg-info/SOURCES.txt +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball.egg-info/dependency_links.txt +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball.egg-info/entry_points.txt +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball.egg-info/not-zip-safe +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball.egg-info/requires.txt +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/sportsball.egg-info/top_level.txt +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/tests/__init__.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/__init__.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/afl/__init__.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/afl/afl/__init__.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/afl/afl/afl_afl_league_model_test.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/afl/afltables/__init__.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/afl/afltables/afl_afltables_game_model_test.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/afl/afltables/afl_afltables_league_model_test.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/afl/afltables/afl_afltables_player_model_test.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/aussportsbetting/__init__.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/aussportsbetting/aussportsbetting_game_model_test.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/combined/__init__.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/combined/combined_game_model_test.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/combined/combined_player_model_test.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/combined/combined_team_model_test.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/espn/__init__.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/espn/espn_game_model_test.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/espn/espn_player_model_test.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/game_model_test.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/google/__init__.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/google/google_address_model_test.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/google/google_news_model_test.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/nba/__init__.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/nba/nba/__init__.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/nba/nba/nba_nba_game_model_test.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/nba/nba/nba_nba_league_model_test.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/nba/nba/nba_nba_team_model_test.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/nba/sportsdb/__init__.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/nba/sportsdb/nba_sportsdb_league_model_test.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/nba/sportsreference/__init__.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/nba/sportsreference/nba_sportsreference_league_model_test.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/ncaab/__init__.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/ncaab/sportsreference/__init__.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/ncaab/sportsreference/ncaab_sportsreference_league_model_test.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/nfl/__init__.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/nfl/sportsdb/__init__.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/nfl/sportsdb/nfl_sportsdb_league_model_test.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/oddsportal/__init__.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/oddsportal/decrypt_test.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/oddsportal/oddsportal_game_model_test.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/oddsportal/oddsportal_league_model_test.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/player_model_test.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/social_model_test.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/sportsdb/__init__.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/sportsdb/sportsdb_game_model_test.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/sportsdb/sportsdb_league_model_test.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/sportsdb/sportsdb_team_model_test.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/sportsdb/sportsdb_venue_model_test.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/sportsreference/__init__.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/sportsreference/sportsreference_game_model_test.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/sportsreference/sportsreference_league_model_test.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/sportsreference/sportsreference_player_model_test.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/sportsreference/sportsreference_team_model_test.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/sportsreference/sportsreference_venue_model_test.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/team_model_test.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/x/__init__.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/x/x_social_model_test.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/tests/proxy_session_test.py +0 -0
- {sportsball-0.3.118 → sportsball-0.3.119}/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.119',
|
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',
|
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
# pylint: disable=too-many-statements,protected-access,too-many-arguments,bare-except
|
4
4
|
import datetime
|
5
|
-
import
|
5
|
+
import re
|
6
6
|
|
7
7
|
import pytest_is_running
|
8
8
|
import requests_cache
|
@@ -16,18 +16,29 @@ from .afl_afl_team_model import create_afl_afl_team_model
|
|
16
16
|
from .afl_afl_venue_model import create_afl_afl_venue_model
|
17
17
|
|
18
18
|
|
19
|
-
def _extract_odds(
|
19
|
+
def _extract_odds(soup: BeautifulSoup) -> list[float]:
|
20
20
|
odds = []
|
21
|
-
soup = BeautifulSoup(html, "lxml")
|
22
21
|
for span in soup.find_all("span", {"class": "betting-button__money"}):
|
23
22
|
odds.append(float(span.get_text().strip().replace("$", "")))
|
24
23
|
return odds
|
25
24
|
|
26
25
|
|
26
|
+
def _extract_dt(soup: BeautifulSoup) -> datetime.datetime:
|
27
|
+
for div in soup.find_all("div", {"class": re.compile(".*js-match-start-time.*")}):
|
28
|
+
start_time = div.get("data-start-time")
|
29
|
+
return datetime.datetime.fromisoformat(start_time)
|
30
|
+
raise ValueError("Unable to find datetime")
|
31
|
+
|
32
|
+
|
33
|
+
def _parse(html: str) -> tuple[list[float], datetime.datetime]:
|
34
|
+
soup = BeautifulSoup(html, "lxml")
|
35
|
+
return _extract_odds(soup), _extract_dt(soup)
|
36
|
+
|
37
|
+
|
27
38
|
def create_afl_afl_game_model(
|
28
39
|
team_names: list[str],
|
29
40
|
players: list[list[tuple[str, str, str, str]]],
|
30
|
-
dt: datetime.datetime,
|
41
|
+
dt: datetime.datetime | None,
|
31
42
|
venue_name: str,
|
32
43
|
session: requests_cache.CachedSession,
|
33
44
|
ladder: list[str],
|
@@ -35,7 +46,7 @@ def create_afl_afl_game_model(
|
|
35
46
|
playwright: Playwright,
|
36
47
|
) -> GameModel:
|
37
48
|
"""Create a game model from AFL Tables."""
|
38
|
-
odds = []
|
49
|
+
odds: list[float] = []
|
39
50
|
if url is not None and not pytest_is_running.is_running():
|
40
51
|
ensure_install()
|
41
52
|
browser = playwright.chromium.launch()
|
@@ -44,8 +55,10 @@ def create_afl_afl_game_model(
|
|
44
55
|
try:
|
45
56
|
page.goto(url, wait_until="networkidle")
|
46
57
|
except: # noqa: E722
|
47
|
-
|
48
|
-
odds =
|
58
|
+
pass
|
59
|
+
odds, dt = _parse(page.content())
|
60
|
+
if dt is None:
|
61
|
+
raise ValueError("dt is null")
|
49
62
|
|
50
63
|
venue_model = create_afl_afl_venue_model(venue_name, session, dt)
|
51
64
|
teams = [
|
@@ -8,7 +8,7 @@ import urllib.parse
|
|
8
8
|
from typing import Iterator
|
9
9
|
|
10
10
|
import requests_cache
|
11
|
-
from bs4 import BeautifulSoup
|
11
|
+
from bs4 import BeautifulSoup, Tag
|
12
12
|
from dateutil.parser import parse
|
13
13
|
from playwright.sync_api import Playwright, sync_playwright
|
14
14
|
|
@@ -19,14 +19,13 @@ from ...league_model import LeagueModel
|
|
19
19
|
from .afl_afl_game_model import create_afl_afl_game_model
|
20
20
|
|
21
21
|
|
22
|
-
def
|
23
|
-
|
22
|
+
def _parse_v1(
|
23
|
+
soup: BeautifulSoup,
|
24
24
|
session: requests_cache.CachedSession,
|
25
25
|
ladder: list[str],
|
26
26
|
html_url: str,
|
27
27
|
playwright: Playwright,
|
28
28
|
) -> Iterator[GameModel]:
|
29
|
-
soup = BeautifulSoup(html, "lxml")
|
30
29
|
for div in soup.find_all("div", {"class": re.compile(".*js-match-list-item.*")}):
|
31
30
|
team_names = []
|
32
31
|
for span in div.find_all(
|
@@ -110,6 +109,90 @@ def _parse_game_info(
|
|
110
109
|
)
|
111
110
|
|
112
111
|
|
112
|
+
def _parse_v2(
|
113
|
+
soup: BeautifulSoup,
|
114
|
+
session: requests_cache.CachedSession,
|
115
|
+
ladder: list[str],
|
116
|
+
html_url: str,
|
117
|
+
playwright: Playwright,
|
118
|
+
) -> Iterator[GameModel]:
|
119
|
+
for div in soup.find_all("div", {"class": "team-lineups__item"}):
|
120
|
+
team_names = []
|
121
|
+
for span in div.find_all(
|
122
|
+
"span", {"class": re.compile(".*team-lineups-header__name.*")}
|
123
|
+
):
|
124
|
+
team_names = [x.strip() for x in span.get_text().strip().split(" v ")]
|
125
|
+
team_players: list[list[tuple[str, str, str, str]]] = [[], []]
|
126
|
+
|
127
|
+
def process_a_player(
|
128
|
+
a: Tag, idx: int, team_players: list[list[tuple[str, str, str, str]]]
|
129
|
+
) -> list[list[tuple[str, str, str, str]]]:
|
130
|
+
href = a.get("href")
|
131
|
+
if not isinstance(href, str):
|
132
|
+
raise ValueError("href is not a str")
|
133
|
+
player_id = "afl:" + href.split("/")[2]
|
134
|
+
name = a.get("title")
|
135
|
+
if not isinstance(name, str):
|
136
|
+
raise ValueError("name is not a str")
|
137
|
+
first_name, sur_name = name.split()
|
138
|
+
jersey = None
|
139
|
+
for div_shirt in a.find_all(
|
140
|
+
"div", {"class": re.compile(".*team-lineups__player-entry--shirt.*")}
|
141
|
+
):
|
142
|
+
jersey = div_shirt.get_text().strip()
|
143
|
+
if jersey is None:
|
144
|
+
raise ValueError("jersey is null")
|
145
|
+
team_players[idx].append((player_id, first_name, sur_name, jersey))
|
146
|
+
return team_players
|
147
|
+
|
148
|
+
for a in div.find_all(
|
149
|
+
"a", {"class": re.compile(".*team-lineups__player-entry--home-team.*")}
|
150
|
+
):
|
151
|
+
team_players = process_a_player(a, 0, team_players)
|
152
|
+
for a in div.find_all(
|
153
|
+
"a", {"class": re.compile(".*team-lineups__player-entry--away-team.*")}
|
154
|
+
):
|
155
|
+
team_players = process_a_player(a, 1, team_players)
|
156
|
+
|
157
|
+
venue_name = None
|
158
|
+
for div_info in div.find_all("div", {"class": "team-lineups-header__info"}):
|
159
|
+
header_info = div_info.get_text().strip()
|
160
|
+
venue_name = header_info.split("・")[1].strip()
|
161
|
+
if venue_name is None:
|
162
|
+
raise ValueError("venue_name is null")
|
163
|
+
|
164
|
+
url = None
|
165
|
+
for a in div.find_all("a", {"class": "team-lineups-header"}):
|
166
|
+
url = urllib.parse.urljoin(html_url, a.get("href"))
|
167
|
+
|
168
|
+
yield create_afl_afl_game_model(
|
169
|
+
team_names,
|
170
|
+
team_players,
|
171
|
+
None,
|
172
|
+
venue_name,
|
173
|
+
session,
|
174
|
+
ladder,
|
175
|
+
url,
|
176
|
+
playwright,
|
177
|
+
)
|
178
|
+
|
179
|
+
|
180
|
+
def _parse_game_info(
|
181
|
+
html: str,
|
182
|
+
session: requests_cache.CachedSession,
|
183
|
+
ladder: list[str],
|
184
|
+
html_url: str,
|
185
|
+
playwright: Playwright,
|
186
|
+
) -> Iterator[GameModel]:
|
187
|
+
soup = BeautifulSoup(html, "lxml")
|
188
|
+
found = False
|
189
|
+
for game_model in _parse_v1(soup, session, ladder, html_url, playwright):
|
190
|
+
found = True
|
191
|
+
yield game_model
|
192
|
+
if not found:
|
193
|
+
yield from _parse_v2(soup, session, ladder, html_url, playwright)
|
194
|
+
|
195
|
+
|
113
196
|
class AFLAFLLeagueModel(LeagueModel):
|
114
197
|
"""AFL AFL implementation of the league model."""
|
115
198
|
|
@@ -137,7 +220,7 @@ class AFLAFLLeagueModel(LeagueModel):
|
|
137
220
|
timeout=60000.0,
|
138
221
|
)
|
139
222
|
except: # noqa: E722
|
140
|
-
|
223
|
+
pass
|
141
224
|
soup = BeautifulSoup(page.content(), "lxml")
|
142
225
|
for span in soup.find_all(
|
143
226
|
"span", {"class": re.compile(".*stats-table__club-name.*")}
|
@@ -146,6 +229,7 @@ class AFLAFLLeagueModel(LeagueModel):
|
|
146
229
|
if team_name in ladder:
|
147
230
|
continue
|
148
231
|
ladder.append(team_name)
|
232
|
+
logging.info("Found ladder: %s", ",".join(ladder))
|
149
233
|
return ladder
|
150
234
|
|
151
235
|
@property
|
{sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/afl/combined/afl_combined_league_model.py
RENAMED
@@ -251,6 +251,15 @@ AFL_VENUE_IDENTITY_MAP = {
|
|
251
251
|
"Ondrej Nepela Arena": TIPOS_ARENA,
|
252
252
|
"Barossa Park": BAROSSA_PARK,
|
253
253
|
"Ninja Stadium": BELLERIVE_OVAL,
|
254
|
+
# AFL
|
255
|
+
"TIO Stadium, Darwin": MARRARA_OVAL,
|
256
|
+
"SCG, Sydney": SCG,
|
257
|
+
"MCG, Melbourne": MCG,
|
258
|
+
"Adelaide Oval, Adelaide": ADELAIDE_OVAL,
|
259
|
+
"ENGIE Stadium, Sydney": STADIUM_AUSTRALIA,
|
260
|
+
"Marvel Stadium, Melbourne": DOCKLANDS,
|
261
|
+
"Gabba, Brisbane": GABBA,
|
262
|
+
"Optus Stadium, Perth": PERTH,
|
254
263
|
}
|
255
264
|
|
256
265
|
|
@@ -13864,6 +13864,24 @@ _CACHED_GEOCODES: dict[str, Any] = {
|
|
13864
13864
|
),
|
13865
13865
|
"Cox Arena, San Diego, California": VIEJAS_ARENA,
|
13866
13866
|
"The Omni, Atlanta, Georgia": OMNI_COLISEUM,
|
13867
|
+
"TD Banknorth Sports Center, Hamden, Connecticut": TD_BANK_SPORTS_CENTER,
|
13868
|
+
"The Event Center, San Jose, California": SportsballGeocodeTuple(
|
13869
|
+
city="San Jose",
|
13870
|
+
state="CA",
|
13871
|
+
postal="95192",
|
13872
|
+
lat=37.33536,
|
13873
|
+
lng=-121.87985,
|
13874
|
+
housenumber="290",
|
13875
|
+
country="USA",
|
13876
|
+
),
|
13877
|
+
"TIO Stadium, Darwin": TIO_STADIUM,
|
13878
|
+
"SCG, Sydney": SCG,
|
13879
|
+
"MCG, Melbourne": MCG,
|
13880
|
+
"Adelaide Oval, Adelaide": ADELAIDE_OVAL,
|
13881
|
+
"ENGIE Stadium, Sydney": ENGIE_STADIUM,
|
13882
|
+
"Marvel Stadium, Melbourne": MARVEL_STADIUM,
|
13883
|
+
"Gabba, Brisbane": GABBA,
|
13884
|
+
"Optus Stadium, Perth": OPTUS_STADIUM,
|
13867
13885
|
}
|
13868
13886
|
|
13869
13887
|
|
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.118 → sportsball-0.3.119}/sportsball/data/afl/afltables/afl_afltables_game_model.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/afl/afltables/afl_afltables_team_model.py
RENAMED
File without changes
|
{sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/afl/afltables/afl_afltables_venue_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
|
{sportsball-0.3.118 → sportsball-0.3.119}/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.118 → sportsball-0.3.119}/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.118 → sportsball-0.3.119}/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.118 → sportsball-0.3.119}/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.118 → sportsball-0.3.119}/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.118 → sportsball-0.3.119}/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.118 → sportsball-0.3.119}/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.118 → sportsball-0.3.119}/sportsball/data/nfl/sportsdb/nfl_sportsdb_league_model.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/oddsportal/oddsportal_bookie_model.py
RENAMED
File without changes
|
{sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/oddsportal/oddsportal_game_model.py
RENAMED
File without changes
|
{sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/oddsportal/oddsportal_league_model.py
RENAMED
File without changes
|
{sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/oddsportal/oddsportal_odds_model.py
RENAMED
File without changes
|
{sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/oddsportal/oddsportal_team_model.py
RENAMED
File without changes
|
{sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/oddsportal/oddsportal_venue_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
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/wikipedia/wikipedia_venue_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
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{sportsball-0.3.118 → sportsball-0.3.119}/tests/data/afl/afltables/afl_afltables_game_model_test.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
|
File without changes
|
File without changes
|
File without changes
|
{sportsball-0.3.118 → sportsball-0.3.119}/tests/data/nba/sportsdb/nba_sportsdb_league_model_test.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.118 → sportsball-0.3.119}/tests/data/nfl/sportsdb/nfl_sportsdb_league_model_test.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{sportsball-0.3.118 → sportsball-0.3.119}/tests/data/oddsportal/oddsportal_game_model_test.py
RENAMED
File without changes
|
{sportsball-0.3.118 → sportsball-0.3.119}/tests/data/oddsportal/oddsportal_league_model_test.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
|