sportsball 0.3.59__tar.gz → 0.3.61__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.59/sportsball.egg-info → sportsball-0.3.61}/PKG-INFO +1 -1
- {sportsball-0.3.59 → sportsball-0.3.61}/setup.py +1 -1
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/__init__.py +1 -1
- sportsball-0.3.61/sportsball/data/afl/afl/afl_afl_league_model.py +137 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/google/google_address_model.py +49 -9
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/sportsreference/sportsreference_game_model.py +25 -19
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/sportsreference/sportsreference_team_model.py +14 -0
- {sportsball-0.3.59 → sportsball-0.3.61/sportsball.egg-info}/PKG-INFO +1 -1
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball.egg-info/SOURCES.txt +2 -0
- sportsball-0.3.61/tests/data/afl/afl/afl_afl_league_model_test.py +37 -0
- sportsball-0.3.61/tests/data/x/__init__.py +0 -0
- sportsball-0.3.59/sportsball/data/afl/afl/afl_afl_league_model.py +0 -132
- {sportsball-0.3.59 → sportsball-0.3.61}/LICENSE +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/MANIFEST.in +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/README.md +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/requirements.txt +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/setup.cfg +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/__main__.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/args.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/cache.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/__init__.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/address_model.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/afl/__init__.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/afl/afl/__init__.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/afl/afl/afl_afl_game_model.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/afl/afl/afl_afl_player_model.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/afl/afl/afl_afl_team_model.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/afl/afl/afl_afl_venue_model.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/afl/afltables/__init__.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/afl/afltables/afl_afltables_game_model.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/afl/afltables/afl_afltables_league_model.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/afl/afltables/afl_afltables_player_model.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/afl/afltables/afl_afltables_team_model.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/afl/afltables/afl_afltables_venue_model.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/afl/aussportsbetting/__init__.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/afl/aussportsbetting/afl_aussportsbetting_league_model.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/afl/combined/__init__.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/afl/combined/afl_combined_league_model.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/afl/espn/__init__.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/afl/espn/afl_espn_league_model.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/afl/oddsportal/__init__.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/afl/oddsportal/afl_oddsportal_league_model.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/aussportsbetting/__init__.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/aussportsbetting/aussportsbetting_bookie_model.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/aussportsbetting/aussportsbetting_game_model.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/aussportsbetting/aussportsbetting_league_model.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/aussportsbetting/aussportsbetting_odds_model.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/aussportsbetting/aussportsbetting_team_model.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/aussportsbetting/aussportsbetting_venue_model.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/bookie_model.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/combined/__init__.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/combined/combined_address_model.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/combined/combined_game_model.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/combined/combined_league_model.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/combined/combined_player_model.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/combined/combined_team_model.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/combined/combined_venue_model.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/combined/combined_weather_model.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/espn/__init__.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/espn/espn_bookie_model.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/espn/espn_game_model.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/espn/espn_league_model.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/espn/espn_odds_model.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/espn/espn_player_model.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/espn/espn_team_model.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/espn/espn_venue_model.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/field_type.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/game_model.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/google/__init__.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/google/google_news_model.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/league.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/league_model.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/model.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/nba/__init__.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/nba/combined/__init__.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/nba/combined/nba_combined_league_model.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/nba/espn/__init__.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/nba/espn/nba_espn_league_model.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/nba/nba/__init__.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/nba/nba/nba_nba_game_model.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/nba/nba/nba_nba_league_model.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/nba/nba/nba_nba_team_model.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/nba/oddsportal/__init__.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/nba/oddsportal/nba_oddsportal_league_model.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/nba/sportsdb/__init__.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/nba/sportsdb/nba_sportsdb_league_model.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/nba/sportsreference/__init__.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/nba/sportsreference/nba_sportsreference_league_model.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/ncaab/__init__.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/ncaab/combined/__init__.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/ncaab/combined/ncaab_combined_league_model.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/ncaab/espn/__init__.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/ncaab/espn/ncaab_espn_league_model.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/ncaab/oddsportal/__init__.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/ncaab/oddsportal/ncaab_oddsportal_league_model.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/ncaab/sportsreference/__init__.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/ncaab/sportsreference/ncaab_sportsreference_league_model.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/ncaaf/__init__.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/ncaaf/combined/__init__.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/ncaaf/combined/ncaaf_combined_league_model.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/ncaaf/espn/__init__.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/ncaaf/espn/ncaaf_espn_league_model.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/ncaaf/oddsportal/__init__.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/ncaaf/oddsportal/ncaaf_oddsportal_league_model.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/news_model.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/nfl/__init__.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/nfl/aussportsbetting/__init__.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/nfl/aussportsbetting/nfl_aussportsbetting_league_model.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/nfl/combined/__init__.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/nfl/combined/nfl_combined_league_model.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/nfl/espn/__init__.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/nfl/espn/nfl_espn_league_model.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/nfl/oddsportal/__init__.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/nfl/oddsportal/nfl_oddsportal_league_model.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/nfl/sportsdb/__init__.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/nfl/sportsdb/nfl_sportsdb_league_model.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/odds_model.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/oddsportal/__init__.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/oddsportal/decrypt.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/oddsportal/oddsportal_bookie_model.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/oddsportal/oddsportal_game_model.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/oddsportal/oddsportal_league_model.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/oddsportal/oddsportal_odds_model.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/oddsportal/oddsportal_team_model.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/oddsportal/oddsportal_venue_model.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/player_model.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/season_type.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/social_model.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/sportsdb/__init__.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/sportsdb/sportsdb_game_model.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/sportsdb/sportsdb_league_model.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/sportsdb/sportsdb_team_model.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/sportsdb/sportsdb_venue_model.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/sportsreference/__init__.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/sportsreference/sportsreference_league_model.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/sportsreference/sportsreference_player_model.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/sportsreference/sportsreference_venue_model.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/team_model.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/venue_model.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/weather/__init__.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/weather/gribstream/__init__.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/weather/gribstream/gribstream_weather_model.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/weather/multi_weather_model.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/weather/openmeteo/__init__.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/weather/openmeteo/openmeteo_weather_model.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/weather_model.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/wikipedia/__init__.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/wikipedia/wikipedia_venue_model.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/x/__init__.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/x/x_social_model.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/logger.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/loglevel.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/playwright.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/proxy_session.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/session.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/sportsball.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/vendor/__init__.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball/vendor/pygooglenews/__init__.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball.egg-info/dependency_links.txt +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball.egg-info/entry_points.txt +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball.egg-info/not-zip-safe +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball.egg-info/requires.txt +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/sportsball.egg-info/top_level.txt +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/tests/__init__.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/tests/data/__init__.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/tests/data/afl/__init__.py +0 -0
- {sportsball-0.3.59/tests/data/afl/afltables → sportsball-0.3.61/tests/data/afl/afl}/__init__.py +0 -0
- {sportsball-0.3.59/tests/data/aussportsbetting → sportsball-0.3.61/tests/data/afl/afltables}/__init__.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/tests/data/afl/afltables/afl_afltables_game_model_test.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/tests/data/afl/afltables/afl_afltables_league_model_test.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/tests/data/afl/afltables/afl_afltables_player_model_test.py +0 -0
- {sportsball-0.3.59/tests/data/combined → sportsball-0.3.61/tests/data/aussportsbetting}/__init__.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/tests/data/aussportsbetting/aussportsbetting_game_model_test.py +0 -0
- {sportsball-0.3.59/tests/data/espn → sportsball-0.3.61/tests/data/combined}/__init__.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/tests/data/combined/combined_game_model_test.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/tests/data/combined/combined_player_model_test.py +0 -0
- {sportsball-0.3.59/tests/data/google → sportsball-0.3.61/tests/data/espn}/__init__.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/tests/data/espn/espn_game_model_test.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/tests/data/espn/espn_player_model_test.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/tests/data/game_model_test.py +0 -0
- {sportsball-0.3.59/tests/data/nba → sportsball-0.3.61/tests/data/google}/__init__.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/tests/data/google/google_address_model_test.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/tests/data/google/google_news_model_test.py +0 -0
- {sportsball-0.3.59/tests/data/nba → sportsball-0.3.61/tests/data}/nba/__init__.py +0 -0
- {sportsball-0.3.59/tests/data/nba/sportsdb → sportsball-0.3.61/tests/data/nba/nba}/__init__.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/tests/data/nba/nba/nba_nba_game_model_test.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/tests/data/nba/nba/nba_nba_league_model_test.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/tests/data/nba/nba/nba_nba_team_model_test.py +0 -0
- {sportsball-0.3.59/tests/data/nba/sportsreference → sportsball-0.3.61/tests/data/nba/sportsdb}/__init__.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/tests/data/nba/sportsdb/nba_sportsdb_league_model_test.py +0 -0
- {sportsball-0.3.59/tests/data/ncaab → sportsball-0.3.61/tests/data/nba/sportsreference}/__init__.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/tests/data/nba/sportsreference/nba_sportsreference_league_model_test.py +0 -0
- {sportsball-0.3.59/tests/data/ncaab/sportsreference → sportsball-0.3.61/tests/data/ncaab}/__init__.py +0 -0
- {sportsball-0.3.59/tests/data/nfl → sportsball-0.3.61/tests/data/ncaab/sportsreference}/__init__.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/tests/data/ncaab/sportsreference/ncaab_sportsreference_league_model_test.py +0 -0
- {sportsball-0.3.59/tests/data/nfl/sportsdb → sportsball-0.3.61/tests/data/nfl}/__init__.py +0 -0
- {sportsball-0.3.59/tests/data/oddsportal → sportsball-0.3.61/tests/data/nfl/sportsdb}/__init__.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/tests/data/nfl/sportsdb/nfl_sportsdb_league_model_test.py +0 -0
- {sportsball-0.3.59/tests/data/sportsdb → sportsball-0.3.61/tests/data/oddsportal}/__init__.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/tests/data/oddsportal/decrypt_test.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/tests/data/oddsportal/oddsportal_game_model_test.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/tests/data/oddsportal/oddsportal_league_model_test.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/tests/data/player_model_test.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/tests/data/social_model_test.py +0 -0
- {sportsball-0.3.59/tests/data/sportsreference → sportsball-0.3.61/tests/data/sportsdb}/__init__.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/tests/data/sportsdb/sportsdb_game_model_test.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/tests/data/sportsdb/sportsdb_league_model_test.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/tests/data/sportsdb/sportsdb_team_model_test.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/tests/data/sportsdb/sportsdb_venue_model_test.py +0 -0
- {sportsball-0.3.59/tests/data/x → sportsball-0.3.61/tests/data/sportsreference}/__init__.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/tests/data/sportsreference/sportsreference_game_model_test.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/tests/data/sportsreference/sportsreference_league_model_test.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/tests/data/sportsreference/sportsreference_player_model_test.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/tests/data/sportsreference/sportsreference_team_model_test.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/tests/data/sportsreference/sportsreference_venue_model_test.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/tests/data/team_model_test.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/tests/data/x/x_social_model_test.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/tests/proxy_session_test.py +0 -0
- {sportsball-0.3.59 → sportsball-0.3.61}/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.61',
|
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,137 @@
|
|
1
|
+
"""AFL AFL league model."""
|
2
|
+
|
3
|
+
# pylint: disable=too-many-statements,protected-access,too-many-locals,bare-except,too-many-branches
|
4
|
+
import datetime
|
5
|
+
import logging
|
6
|
+
import re
|
7
|
+
from typing import Iterator
|
8
|
+
|
9
|
+
import requests_cache
|
10
|
+
from bs4 import BeautifulSoup
|
11
|
+
from playwright.sync_api import sync_playwright
|
12
|
+
|
13
|
+
from ....playwright import ensure_install
|
14
|
+
from ...game_model import GameModel
|
15
|
+
from ...league import League
|
16
|
+
from ...league_model import LeagueModel
|
17
|
+
from .afl_afl_game_model import create_afl_afl_game_model
|
18
|
+
|
19
|
+
|
20
|
+
def _parse_game_info(
|
21
|
+
html: str, session: requests_cache.CachedSession, ladder: list[str]
|
22
|
+
) -> Iterator[GameModel]:
|
23
|
+
soup = BeautifulSoup(html, "lxml")
|
24
|
+
for div in soup.find_all("div", {"class": re.compile(".*js-match-list-item.*")}):
|
25
|
+
team_names = []
|
26
|
+
for span in div.find_all(
|
27
|
+
"span", {"class": re.compile(".*team-lineups__team-name.*")}
|
28
|
+
):
|
29
|
+
team_names.append(span.get_text().strip())
|
30
|
+
teams_players: list[list[tuple[str, str, str, str]]] = [[], []]
|
31
|
+
for div_positions_row in div.find_all(
|
32
|
+
"div", {"class": re.compile(".*team-lineups__positions-row.*")}
|
33
|
+
):
|
34
|
+
row_players: list[list[tuple[str, str, str, str]]] = []
|
35
|
+
for div_team_players in div_positions_row.find_all(
|
36
|
+
"div",
|
37
|
+
{"class": re.compile(".*team-lineups__positions-players.*")},
|
38
|
+
):
|
39
|
+
team_players: list[tuple[str, str, str, str]] = []
|
40
|
+
for a in div_team_players.find_all(
|
41
|
+
"a", {"class": re.compile(".*js-player-profile-link.*")}
|
42
|
+
):
|
43
|
+
player_id = "afl:" + a.get("data-player-id")
|
44
|
+
first_name = a.get("data-first-name")
|
45
|
+
second_name = a.get("data-surname")
|
46
|
+
player_number = None
|
47
|
+
for span_player_number in a.find_all(
|
48
|
+
"span",
|
49
|
+
{"class": re.compile(".*team-lineups__player-number.*")},
|
50
|
+
):
|
51
|
+
player_number = (
|
52
|
+
span_player_number.get_text()
|
53
|
+
.strip()
|
54
|
+
.replace("[", "")
|
55
|
+
.replace("]", "")
|
56
|
+
)
|
57
|
+
if player_number is None:
|
58
|
+
raise ValueError("player_number is null")
|
59
|
+
team_players.append(
|
60
|
+
(player_id, player_number, first_name, second_name)
|
61
|
+
)
|
62
|
+
row_players.append(team_players)
|
63
|
+
if len(row_players) >= 2:
|
64
|
+
break
|
65
|
+
for count, row_players_list in enumerate(row_players):
|
66
|
+
try:
|
67
|
+
teams_players[count].extend(row_players_list)
|
68
|
+
except IndexError as exc:
|
69
|
+
# logging.error(html)
|
70
|
+
logging.error(len(team_players))
|
71
|
+
logging.error(count)
|
72
|
+
raise exc
|
73
|
+
dt = None
|
74
|
+
for time in div.find_all(
|
75
|
+
"time", {"class": re.compile(".*match-list-alt__header-time.*")}
|
76
|
+
):
|
77
|
+
dt = datetime.datetime.fromtimestamp(float(time.get("data-date")) / 1000.0)
|
78
|
+
venue_name: str | None = None
|
79
|
+
for span in div.find_all(
|
80
|
+
"span", {"class": re.compile(".*match-list-alt__header-venue.*")}
|
81
|
+
):
|
82
|
+
venue_name = span.get_text().strip().replace(",", "")
|
83
|
+
if venue_name is None:
|
84
|
+
raise ValueError("venue_name is null")
|
85
|
+
if dt is None:
|
86
|
+
raise ValueError("dt is null")
|
87
|
+
yield create_afl_afl_game_model(
|
88
|
+
team_names, teams_players, dt, venue_name, session, ladder
|
89
|
+
)
|
90
|
+
|
91
|
+
|
92
|
+
class AFLAFLLeagueModel(LeagueModel):
|
93
|
+
"""AFL AFL implementation of the league model."""
|
94
|
+
|
95
|
+
def __init__(
|
96
|
+
self, session: requests_cache.CachedSession, position: int | None = None
|
97
|
+
) -> None:
|
98
|
+
super().__init__(League.AFL, session)
|
99
|
+
|
100
|
+
@property
|
101
|
+
def _ladder(self) -> list[str]:
|
102
|
+
ladder = []
|
103
|
+
ensure_install()
|
104
|
+
with sync_playwright() as p:
|
105
|
+
browser = p.chromium.launch()
|
106
|
+
context = browser.new_context()
|
107
|
+
page = context.new_page()
|
108
|
+
try:
|
109
|
+
page.goto(
|
110
|
+
"https://www.afl.com.au/ladder",
|
111
|
+
wait_until="networkidle",
|
112
|
+
timeout=60000.0,
|
113
|
+
)
|
114
|
+
except: # noqa: E722
|
115
|
+
logging.warning("Ladder URL timed out.")
|
116
|
+
soup = BeautifulSoup(page.content(), "lxml")
|
117
|
+
for span in soup.find_all(
|
118
|
+
"span", {"class": re.compile(".*stats-table__club-name.*")}
|
119
|
+
):
|
120
|
+
team_name = span.get_text().strip()
|
121
|
+
if team_name in ladder:
|
122
|
+
continue
|
123
|
+
ladder.append(team_name)
|
124
|
+
return ladder
|
125
|
+
|
126
|
+
@property
|
127
|
+
def games(self) -> Iterator[GameModel]:
|
128
|
+
ladder = self._ladder
|
129
|
+
ensure_install()
|
130
|
+
with sync_playwright() as p:
|
131
|
+
browser = p.chromium.launch()
|
132
|
+
context = browser.new_context()
|
133
|
+
page = context.new_page()
|
134
|
+
page.goto(
|
135
|
+
"https://www.afl.com.au/matches/team-lineups", wait_until="networkidle"
|
136
|
+
)
|
137
|
+
yield from _parse_game_info(page.content(), self.session, ladder)
|
@@ -2287,6 +2287,15 @@ NEW_ORLEANS_CITY = SportsballGeocodeTuple(
|
|
2287
2287
|
housenumber="",
|
2288
2288
|
country="USA",
|
2289
2289
|
)
|
2290
|
+
PETCO_PARK = SportsballGeocodeTuple(
|
2291
|
+
city="San Diego",
|
2292
|
+
state="CA",
|
2293
|
+
postal="92101",
|
2294
|
+
lat=32.7073,
|
2295
|
+
lng=-117.1566,
|
2296
|
+
housenumber="100",
|
2297
|
+
country="USA",
|
2298
|
+
)
|
2290
2299
|
_CACHED_GEOCODES: dict[str, Any] = {
|
2291
2300
|
"S.C.G. - Australia": SCG,
|
2292
2301
|
"Victoria Park - Australia": SportsballGeocodeTuple(
|
@@ -4035,15 +4044,7 @@ _CACHED_GEOCODES: dict[str, Any] = {
|
|
4035
4044
|
),
|
4036
4045
|
"Riccardo Silva Stadium - Miami - FL - 33199": PITBULL_STADIUM,
|
4037
4046
|
"Ryan Field - Evanston - IL - 60208": LANNY_AND_SHARON_MARTIN_STADIUM,
|
4038
|
-
"Petco Park - San Diego - CA - 92101":
|
4039
|
-
city="San Diego",
|
4040
|
-
state="CA",
|
4041
|
-
postal="92101",
|
4042
|
-
lat=32.7073,
|
4043
|
-
lng=-117.1566,
|
4044
|
-
housenumber="100",
|
4045
|
-
country="USA",
|
4046
|
-
),
|
4047
|
+
"Petco Park - San Diego - CA - 92101": PETCO_PARK,
|
4047
4048
|
"Providence Park - Portland - OR - 97205": SportsballGeocodeTuple(
|
4048
4049
|
city="Portland",
|
4049
4050
|
state="OR",
|
@@ -12709,6 +12710,45 @@ _CACHED_GEOCODES: dict[str, Any] = {
|
|
12709
12710
|
country="USA",
|
12710
12711
|
),
|
12711
12712
|
"New Orleans , Louisiana": NEW_ORLEANS_CITY,
|
12713
|
+
"First Bank & Trust Arena, Brookings, South Dakota": SportsballGeocodeTuple(
|
12714
|
+
city="Brookings",
|
12715
|
+
state="SD",
|
12716
|
+
postal="57007",
|
12717
|
+
lat=44.317984,
|
12718
|
+
lng=-96.779058,
|
12719
|
+
housenumber="1165",
|
12720
|
+
country="USA",
|
12721
|
+
),
|
12722
|
+
"Cambria County War Memorial Arena, Johnstown, Pennsylvania": SportsballGeocodeTuple(
|
12723
|
+
city="Johnstown",
|
12724
|
+
state="PA",
|
12725
|
+
postal="15901",
|
12726
|
+
lat=40.32296,
|
12727
|
+
lng=-78.922654,
|
12728
|
+
housenumber="326",
|
12729
|
+
country="USA",
|
12730
|
+
),
|
12731
|
+
"Petco Park, San Diego, California": PETCO_PARK,
|
12732
|
+
"Esby Gym, Glassboro, New Jersey": SportsballGeocodeTuple(
|
12733
|
+
city="Glassboro",
|
12734
|
+
state="NJ",
|
12735
|
+
postal="08028",
|
12736
|
+
lat=39.7106001,
|
12737
|
+
lng=-75.1186627,
|
12738
|
+
housenumber="300",
|
12739
|
+
country="USA",
|
12740
|
+
),
|
12741
|
+
"Boone, North Carolina": SportsballGeocodeTuple(
|
12742
|
+
city="Boone",
|
12743
|
+
state="NC",
|
12744
|
+
postal="",
|
12745
|
+
lat=36.211111,
|
12746
|
+
lng=-81.666944,
|
12747
|
+
housenumber="",
|
12748
|
+
country="USA",
|
12749
|
+
),
|
12750
|
+
"FedExForum - Memphis, Tennessee - United States": FEDEX_FORUM,
|
12751
|
+
"Kia Center, Orlando, FL, EUA": KIA_CENTER,
|
12712
12752
|
}
|
12713
12753
|
|
12714
12754
|
|
@@ -179,27 +179,33 @@ def _find_old_dt(
|
|
179
179
|
test_row = df.iat[0, 0]
|
180
180
|
test_row_2 = df.iat[1, 0]
|
181
181
|
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
dt = parse(" ".join(date_venue_split[:current_idx]))
|
192
|
-
except dateutil.parser._parser.ParserError: # type: ignore
|
182
|
+
try:
|
183
|
+
if (
|
184
|
+
"Prev Game" in test_row
|
185
|
+
or "Next Game" in test_row
|
186
|
+
or "Lost" in test_row
|
187
|
+
or "PM," in test_row_2
|
188
|
+
):
|
189
|
+
date_venue_split = df.iat[1, 0].split()
|
190
|
+
current_idx = 5
|
193
191
|
try:
|
194
|
-
current_idx = 3
|
195
192
|
dt = parse(" ".join(date_venue_split[:current_idx]))
|
196
193
|
except dateutil.parser._parser.ParserError: # type: ignore
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
194
|
+
try:
|
195
|
+
current_idx = 3
|
196
|
+
dt = parse(" ".join(date_venue_split[:current_idx]))
|
197
|
+
except dateutil.parser._parser.ParserError: # type: ignore
|
198
|
+
dt = parse(
|
199
|
+
" ".join(",".join(test_row.split(",")[1:]).split()[:3])
|
200
|
+
)
|
201
|
+
venue_name = " ".join(date_venue_split[current_idx:])
|
202
|
+
_process_team_row(df)
|
203
|
+
break
|
204
|
+
except TypeError as exc:
|
205
|
+
logging.error(test_row)
|
206
|
+
logging.error(response.url)
|
207
|
+
logging.error(response.text)
|
208
|
+
raise exc
|
203
209
|
|
204
210
|
if dt is None:
|
205
211
|
title_tag = soup.find("title")
|
@@ -305,7 +311,7 @@ def _create_sportsreference_game_model(
|
|
305
311
|
|
306
312
|
# If the page_title is bad, try fetching from a non wayback source
|
307
313
|
if page_title is not None:
|
308
|
-
if page_title.get_text().strip()
|
314
|
+
if "File Not Found" in page_title.get_text().strip():
|
309
315
|
session.cache.delete(urls=[url])
|
310
316
|
response = session.get(url, headers={X_NO_WAYBACK: "1"})
|
311
317
|
response.raise_for_status()
|
@@ -90,6 +90,20 @@ def _create_sportsreference_team_model(
|
|
90
90
|
assists: dict[str, int],
|
91
91
|
turnovers: dict[str, int],
|
92
92
|
) -> TeamModel:
|
93
|
+
if url == "https://www.sports-reference.com/cbb/schools/alaska-anchorage/2016.html":
|
94
|
+
name = "Alaska-Anchorage"
|
95
|
+
return TeamModel(
|
96
|
+
identifier=name,
|
97
|
+
name=name,
|
98
|
+
location="Alaska",
|
99
|
+
players=[],
|
100
|
+
odds=[],
|
101
|
+
points=points,
|
102
|
+
ladder_rank=None,
|
103
|
+
news=create_google_news_models(name, session, dt, league),
|
104
|
+
social=create_x_social_model(name, session, dt),
|
105
|
+
)
|
106
|
+
|
93
107
|
headers = {}
|
94
108
|
if url in _NON_WAYBACK_URLS:
|
95
109
|
headers = {X_NO_WAYBACK: "1"}
|
@@ -165,6 +165,8 @@ tests/data/player_model_test.py
|
|
165
165
|
tests/data/social_model_test.py
|
166
166
|
tests/data/team_model_test.py
|
167
167
|
tests/data/afl/__init__.py
|
168
|
+
tests/data/afl/afl/__init__.py
|
169
|
+
tests/data/afl/afl/afl_afl_league_model_test.py
|
168
170
|
tests/data/afl/afltables/__init__.py
|
169
171
|
tests/data/afl/afltables/afl_afltables_game_model_test.py
|
170
172
|
tests/data/afl/afltables/afl_afltables_league_model_test.py
|
@@ -0,0 +1,37 @@
|
|
1
|
+
"""Tests for the afl AFL league model class."""
|
2
|
+
import unittest
|
3
|
+
import os
|
4
|
+
import datetime
|
5
|
+
|
6
|
+
import requests_cache
|
7
|
+
from sportsball.data.afl.afl.afl_afl_league_model import _parse_game_info
|
8
|
+
|
9
|
+
|
10
|
+
class TestAFLAFLLeagueModel(unittest.TestCase):
|
11
|
+
|
12
|
+
def setUp(self):
|
13
|
+
self.dir = os.path.dirname(__file__)
|
14
|
+
self._session = requests_cache.CachedSession(backend="memory")
|
15
|
+
|
16
|
+
def test_parse_game_info(self):
|
17
|
+
with open(os.path.join(self.dir, "team-lineups.html")) as handle:
|
18
|
+
list(_parse_game_info(handle.read(), self._session, [
|
19
|
+
"Melbourne",
|
20
|
+
"Richmond",
|
21
|
+
"Collingwood",
|
22
|
+
"Essendon",
|
23
|
+
"Fremantle",
|
24
|
+
"Adelaide Crows",
|
25
|
+
"St Kilda",
|
26
|
+
"Brisbane Lions",
|
27
|
+
"Port Adelaide",
|
28
|
+
"North Melbourne",
|
29
|
+
"GWS GIANTS",
|
30
|
+
"Western Bulldogs",
|
31
|
+
"Gold Coast SUNS",
|
32
|
+
"Sydney Swans",
|
33
|
+
"Carlton",
|
34
|
+
"Geelong Cats",
|
35
|
+
"Hawthorn",
|
36
|
+
"West Coast Eagles",
|
37
|
+
]))
|
File without changes
|
@@ -1,132 +0,0 @@
|
|
1
|
-
"""AFL AFL league model."""
|
2
|
-
|
3
|
-
# pylint: disable=too-many-statements,protected-access,too-many-locals,bare-except
|
4
|
-
import datetime
|
5
|
-
import logging
|
6
|
-
import re
|
7
|
-
from typing import Iterator
|
8
|
-
|
9
|
-
import requests_cache
|
10
|
-
from bs4 import BeautifulSoup
|
11
|
-
from playwright.sync_api import sync_playwright
|
12
|
-
|
13
|
-
from ....playwright import ensure_install
|
14
|
-
from ...game_model import GameModel
|
15
|
-
from ...league import League
|
16
|
-
from ...league_model import LeagueModel
|
17
|
-
from .afl_afl_game_model import create_afl_afl_game_model
|
18
|
-
|
19
|
-
|
20
|
-
class AFLAFLLeagueModel(LeagueModel):
|
21
|
-
"""AFL AFL implementation of the league model."""
|
22
|
-
|
23
|
-
def __init__(
|
24
|
-
self, session: requests_cache.CachedSession, position: int | None = None
|
25
|
-
) -> None:
|
26
|
-
super().__init__(League.AFL, session)
|
27
|
-
|
28
|
-
@property
|
29
|
-
def _ladder(self) -> list[str]:
|
30
|
-
ladder = []
|
31
|
-
ensure_install()
|
32
|
-
with sync_playwright() as p:
|
33
|
-
browser = p.chromium.launch()
|
34
|
-
context = browser.new_context()
|
35
|
-
page = context.new_page()
|
36
|
-
try:
|
37
|
-
page.goto(
|
38
|
-
"https://www.afl.com.au/ladder",
|
39
|
-
wait_until="networkidle",
|
40
|
-
timeout=60000.0,
|
41
|
-
)
|
42
|
-
except: # noqa: E722
|
43
|
-
logging.warning("Ladder URL timed out.")
|
44
|
-
soup = BeautifulSoup(page.content(), "lxml")
|
45
|
-
for span in soup.find_all(
|
46
|
-
"span", {"class": re.compile(".*stats-table__club-name.*")}
|
47
|
-
):
|
48
|
-
team_name = span.get_text().strip()
|
49
|
-
if team_name in ladder:
|
50
|
-
continue
|
51
|
-
ladder.append(team_name)
|
52
|
-
return ladder
|
53
|
-
|
54
|
-
@property
|
55
|
-
def games(self) -> Iterator[GameModel]:
|
56
|
-
# https://www.afl.com.au/matches/team-lineups
|
57
|
-
ladder = self._ladder
|
58
|
-
ensure_install()
|
59
|
-
with sync_playwright() as p:
|
60
|
-
browser = p.chromium.launch()
|
61
|
-
context = browser.new_context()
|
62
|
-
page = context.new_page()
|
63
|
-
page.goto(
|
64
|
-
"https://www.afl.com.au/matches/team-lineups", wait_until="networkidle"
|
65
|
-
)
|
66
|
-
soup = BeautifulSoup(page.content(), "lxml")
|
67
|
-
for div in soup.find_all(
|
68
|
-
"div", {"class": re.compile(".*js-match-list-item.*")}
|
69
|
-
):
|
70
|
-
team_names = []
|
71
|
-
for span in div.find_all(
|
72
|
-
"span", {"class": re.compile(".*team-lineups__team-name.*")}
|
73
|
-
):
|
74
|
-
team_names.append(span.get_text().strip())
|
75
|
-
teams_players: list[list[tuple[str, str, str, str]]] = [[], []]
|
76
|
-
for div_positions_row in div.find_all(
|
77
|
-
"div", {"class": re.compile(".*team-lineups__positions-row.*")}
|
78
|
-
):
|
79
|
-
row_players: list[list[tuple[str, str, str, str]]] = []
|
80
|
-
for div_team_players in div_positions_row.find_all(
|
81
|
-
"div",
|
82
|
-
{"class": re.compile(".*team-lineups__positions-players.*")},
|
83
|
-
):
|
84
|
-
team_players: list[tuple[str, str, str, str]] = []
|
85
|
-
for a in div_team_players.find_all(
|
86
|
-
"a", {"class": re.compile(".*js-player-profile-link.*")}
|
87
|
-
):
|
88
|
-
player_id = "afl:" + a.get("data-player-id")
|
89
|
-
first_name = a.get("data-first-name")
|
90
|
-
second_name = a.get("data-surname")
|
91
|
-
player_number = None
|
92
|
-
for span_player_number in a.find_all(
|
93
|
-
"span",
|
94
|
-
{
|
95
|
-
"class": re.compile(
|
96
|
-
".*team-lineups__player-number.*"
|
97
|
-
)
|
98
|
-
},
|
99
|
-
):
|
100
|
-
player_number = (
|
101
|
-
span_player_number.get_text()
|
102
|
-
.strip()
|
103
|
-
.replace("[", "")
|
104
|
-
.replace("]", "")
|
105
|
-
)
|
106
|
-
if player_number is None:
|
107
|
-
raise ValueError("player_number is null")
|
108
|
-
team_players.append(
|
109
|
-
(player_id, player_number, first_name, second_name)
|
110
|
-
)
|
111
|
-
row_players.append(team_players)
|
112
|
-
for count, row_players_list in enumerate(row_players):
|
113
|
-
teams_players[count].extend(row_players_list)
|
114
|
-
dt = None
|
115
|
-
for time in div.find_all(
|
116
|
-
"time", {"class": re.compile(".*match-list-alt__header-time.*")}
|
117
|
-
):
|
118
|
-
dt = datetime.datetime.fromtimestamp(
|
119
|
-
float(time.get("data-date")) / 1000.0
|
120
|
-
)
|
121
|
-
venue_name: str | None = None
|
122
|
-
for span in div.find_all(
|
123
|
-
"span", {"class": re.compile(".*match-list-alt__header-venue.*")}
|
124
|
-
):
|
125
|
-
venue_name = span.get_text().strip().replace(",", "")
|
126
|
-
if venue_name is None:
|
127
|
-
raise ValueError("venue_name is null")
|
128
|
-
if dt is None:
|
129
|
-
raise ValueError("dt is null")
|
130
|
-
yield create_afl_afl_game_model(
|
131
|
-
team_names, teams_players, dt, venue_name, self.session, ladder
|
132
|
-
)
|
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.59 → sportsball-0.3.61}/sportsball/data/afl/afltables/afl_afltables_game_model.py
RENAMED
File without changes
|
{sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/afl/afltables/afl_afltables_league_model.py
RENAMED
File without changes
|
{sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/afl/afltables/afl_afltables_player_model.py
RENAMED
File without changes
|
{sportsball-0.3.59 → sportsball-0.3.61}/sportsball/data/afl/afltables/afl_afltables_team_model.py
RENAMED
File without changes
|
{sportsball-0.3.59 → sportsball-0.3.61}/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.59 → sportsball-0.3.61}/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
|
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
|