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.
Files changed (222) hide show
  1. {sportsball-0.3.118/sportsball.egg-info → sportsball-0.3.119}/PKG-INFO +1 -1
  2. {sportsball-0.3.118 → sportsball-0.3.119}/setup.py +1 -1
  3. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/__init__.py +1 -1
  4. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/afl/afl/afl_afl_game_model.py +20 -7
  5. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/afl/afl/afl_afl_league_model.py +89 -5
  6. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/afl/combined/afl_combined_league_model.py +9 -0
  7. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/google/google_address_model.py +18 -0
  8. {sportsball-0.3.118 → sportsball-0.3.119/sportsball.egg-info}/PKG-INFO +1 -1
  9. {sportsball-0.3.118 → sportsball-0.3.119}/LICENSE +0 -0
  10. {sportsball-0.3.118 → sportsball-0.3.119}/MANIFEST.in +0 -0
  11. {sportsball-0.3.118 → sportsball-0.3.119}/README.md +0 -0
  12. {sportsball-0.3.118 → sportsball-0.3.119}/requirements.txt +0 -0
  13. {sportsball-0.3.118 → sportsball-0.3.119}/setup.cfg +0 -0
  14. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/__main__.py +0 -0
  15. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/args.py +0 -0
  16. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/cache.py +0 -0
  17. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/__init__.py +0 -0
  18. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/address_model.py +0 -0
  19. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/afl/__init__.py +0 -0
  20. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/afl/afl/__init__.py +0 -0
  21. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/afl/afl/afl_afl_bookie_model.py +0 -0
  22. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/afl/afl/afl_afl_odds_model.py +0 -0
  23. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/afl/afl/afl_afl_player_model.py +0 -0
  24. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/afl/afl/afl_afl_team_model.py +0 -0
  25. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/afl/afl/afl_afl_venue_model.py +0 -0
  26. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/afl/afltables/__init__.py +0 -0
  27. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/afl/afltables/afl_afltables_game_model.py +0 -0
  28. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/afl/afltables/afl_afltables_league_model.py +0 -0
  29. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/afl/afltables/afl_afltables_player_model.py +0 -0
  30. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/afl/afltables/afl_afltables_team_model.py +0 -0
  31. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/afl/afltables/afl_afltables_venue_model.py +0 -0
  32. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/afl/aussportsbetting/__init__.py +0 -0
  33. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/afl/aussportsbetting/afl_aussportsbetting_league_model.py +0 -0
  34. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/afl/combined/__init__.py +0 -0
  35. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/afl/espn/__init__.py +0 -0
  36. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/afl/espn/afl_espn_league_model.py +0 -0
  37. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/afl/oddsportal/__init__.py +0 -0
  38. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/afl/oddsportal/afl_oddsportal_league_model.py +0 -0
  39. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/aussportsbetting/__init__.py +0 -0
  40. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/aussportsbetting/aussportsbetting_bookie_model.py +0 -0
  41. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/aussportsbetting/aussportsbetting_game_model.py +0 -0
  42. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/aussportsbetting/aussportsbetting_league_model.py +0 -0
  43. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/aussportsbetting/aussportsbetting_odds_model.py +0 -0
  44. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/aussportsbetting/aussportsbetting_team_model.py +0 -0
  45. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/aussportsbetting/aussportsbetting_venue_model.py +0 -0
  46. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/bookie_model.py +0 -0
  47. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/combined/__init__.py +0 -0
  48. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/combined/combined_address_model.py +0 -0
  49. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/combined/combined_game_model.py +0 -0
  50. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/combined/combined_league_model.py +0 -0
  51. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/combined/combined_player_model.py +0 -0
  52. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/combined/combined_team_model.py +0 -0
  53. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/combined/combined_venue_model.py +0 -0
  54. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/combined/combined_weather_model.py +0 -0
  55. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/combined/null_check.py +0 -0
  56. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/espn/__init__.py +0 -0
  57. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/espn/espn_bookie_model.py +0 -0
  58. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/espn/espn_game_model.py +0 -0
  59. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/espn/espn_league_model.py +0 -0
  60. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/espn/espn_odds_model.py +0 -0
  61. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/espn/espn_player_model.py +0 -0
  62. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/espn/espn_team_model.py +0 -0
  63. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/espn/espn_venue_model.py +0 -0
  64. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/field_type.py +0 -0
  65. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/game_model.py +0 -0
  66. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/google/__init__.py +0 -0
  67. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/google/google_news_model.py +0 -0
  68. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/league.py +0 -0
  69. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/league_model.py +0 -0
  70. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/model.py +0 -0
  71. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/nba/__init__.py +0 -0
  72. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/nba/combined/__init__.py +0 -0
  73. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/nba/combined/nba_combined_league_model.py +0 -0
  74. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/nba/espn/__init__.py +0 -0
  75. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/nba/espn/nba_espn_league_model.py +0 -0
  76. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/nba/nba/__init__.py +0 -0
  77. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/nba/nba/nba_nba_game_model.py +0 -0
  78. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/nba/nba/nba_nba_league_model.py +0 -0
  79. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/nba/nba/nba_nba_team_model.py +0 -0
  80. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/nba/oddsportal/__init__.py +0 -0
  81. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/nba/oddsportal/nba_oddsportal_league_model.py +0 -0
  82. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/nba/sportsdb/__init__.py +0 -0
  83. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/nba/sportsdb/nba_sportsdb_league_model.py +0 -0
  84. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/nba/sportsreference/__init__.py +0 -0
  85. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/nba/sportsreference/nba_sportsreference_league_model.py +0 -0
  86. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/ncaab/__init__.py +0 -0
  87. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/ncaab/combined/__init__.py +0 -0
  88. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/ncaab/combined/ncaab_combined_league_model.py +0 -0
  89. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/ncaab/espn/__init__.py +0 -0
  90. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/ncaab/espn/ncaab_espn_league_model.py +0 -0
  91. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/ncaab/oddsportal/__init__.py +0 -0
  92. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/ncaab/oddsportal/ncaab_oddsportal_league_model.py +0 -0
  93. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/ncaab/sportsreference/__init__.py +0 -0
  94. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/ncaab/sportsreference/ncaab_sportsreference_league_model.py +0 -0
  95. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/ncaaf/__init__.py +0 -0
  96. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/ncaaf/combined/__init__.py +0 -0
  97. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/ncaaf/combined/ncaaf_combined_league_model.py +0 -0
  98. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/ncaaf/espn/__init__.py +0 -0
  99. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/ncaaf/espn/ncaaf_espn_league_model.py +0 -0
  100. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/ncaaf/oddsportal/__init__.py +0 -0
  101. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/ncaaf/oddsportal/ncaaf_oddsportal_league_model.py +0 -0
  102. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/news_model.py +0 -0
  103. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/nfl/__init__.py +0 -0
  104. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/nfl/aussportsbetting/__init__.py +0 -0
  105. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/nfl/aussportsbetting/nfl_aussportsbetting_league_model.py +0 -0
  106. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/nfl/combined/__init__.py +0 -0
  107. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/nfl/combined/nfl_combined_league_model.py +0 -0
  108. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/nfl/espn/__init__.py +0 -0
  109. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/nfl/espn/nfl_espn_league_model.py +0 -0
  110. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/nfl/oddsportal/__init__.py +0 -0
  111. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/nfl/oddsportal/nfl_oddsportal_league_model.py +0 -0
  112. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/nfl/sportsdb/__init__.py +0 -0
  113. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/nfl/sportsdb/nfl_sportsdb_league_model.py +0 -0
  114. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/odds_model.py +0 -0
  115. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/oddsportal/__init__.py +0 -0
  116. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/oddsportal/decrypt.py +0 -0
  117. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/oddsportal/oddsportal_bookie_model.py +0 -0
  118. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/oddsportal/oddsportal_game_model.py +0 -0
  119. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/oddsportal/oddsportal_league_model.py +0 -0
  120. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/oddsportal/oddsportal_odds_model.py +0 -0
  121. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/oddsportal/oddsportal_team_model.py +0 -0
  122. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/oddsportal/oddsportal_venue_model.py +0 -0
  123. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/player_model.py +0 -0
  124. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/season_type.py +0 -0
  125. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/social_model.py +0 -0
  126. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/sportsdb/__init__.py +0 -0
  127. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/sportsdb/sportsdb_game_model.py +0 -0
  128. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/sportsdb/sportsdb_league_model.py +0 -0
  129. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/sportsdb/sportsdb_team_model.py +0 -0
  130. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/sportsdb/sportsdb_venue_model.py +0 -0
  131. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/sportsreference/__init__.py +0 -0
  132. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/sportsreference/sportsreference_game_model.py +0 -0
  133. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/sportsreference/sportsreference_league_model.py +0 -0
  134. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/sportsreference/sportsreference_player_model.py +0 -0
  135. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/sportsreference/sportsreference_team_model.py +0 -0
  136. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/sportsreference/sportsreference_venue_model.py +0 -0
  137. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/team_model.py +0 -0
  138. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/venue_model.py +0 -0
  139. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/weather/__init__.py +0 -0
  140. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/weather/gribstream/__init__.py +0 -0
  141. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/weather/gribstream/gribstream_weather_model.py +0 -0
  142. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/weather/multi_weather_model.py +0 -0
  143. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/weather/openmeteo/__init__.py +0 -0
  144. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/weather/openmeteo/openmeteo_weather_model.py +0 -0
  145. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/weather_model.py +0 -0
  146. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/wikipedia/__init__.py +0 -0
  147. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/wikipedia/wikipedia_venue_model.py +0 -0
  148. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/x/__init__.py +0 -0
  149. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/data/x/x_social_model.py +0 -0
  150. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/logger.py +0 -0
  151. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/loglevel.py +0 -0
  152. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/playwright.py +0 -0
  153. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/proxy_session.py +0 -0
  154. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/session.py +0 -0
  155. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/sportsball.py +0 -0
  156. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/vendor/__init__.py +0 -0
  157. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball/vendor/pygooglenews/__init__.py +0 -0
  158. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball.egg-info/SOURCES.txt +0 -0
  159. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball.egg-info/dependency_links.txt +0 -0
  160. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball.egg-info/entry_points.txt +0 -0
  161. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball.egg-info/not-zip-safe +0 -0
  162. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball.egg-info/requires.txt +0 -0
  163. {sportsball-0.3.118 → sportsball-0.3.119}/sportsball.egg-info/top_level.txt +0 -0
  164. {sportsball-0.3.118 → sportsball-0.3.119}/tests/__init__.py +0 -0
  165. {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/__init__.py +0 -0
  166. {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/afl/__init__.py +0 -0
  167. {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/afl/afl/__init__.py +0 -0
  168. {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/afl/afl/afl_afl_league_model_test.py +0 -0
  169. {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/afl/afltables/__init__.py +0 -0
  170. {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/afl/afltables/afl_afltables_game_model_test.py +0 -0
  171. {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/afl/afltables/afl_afltables_league_model_test.py +0 -0
  172. {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/afl/afltables/afl_afltables_player_model_test.py +0 -0
  173. {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/aussportsbetting/__init__.py +0 -0
  174. {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/aussportsbetting/aussportsbetting_game_model_test.py +0 -0
  175. {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/combined/__init__.py +0 -0
  176. {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/combined/combined_game_model_test.py +0 -0
  177. {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/combined/combined_player_model_test.py +0 -0
  178. {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/combined/combined_team_model_test.py +0 -0
  179. {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/espn/__init__.py +0 -0
  180. {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/espn/espn_game_model_test.py +0 -0
  181. {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/espn/espn_player_model_test.py +0 -0
  182. {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/game_model_test.py +0 -0
  183. {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/google/__init__.py +0 -0
  184. {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/google/google_address_model_test.py +0 -0
  185. {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/google/google_news_model_test.py +0 -0
  186. {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/nba/__init__.py +0 -0
  187. {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/nba/nba/__init__.py +0 -0
  188. {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/nba/nba/nba_nba_game_model_test.py +0 -0
  189. {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/nba/nba/nba_nba_league_model_test.py +0 -0
  190. {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/nba/nba/nba_nba_team_model_test.py +0 -0
  191. {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/nba/sportsdb/__init__.py +0 -0
  192. {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/nba/sportsdb/nba_sportsdb_league_model_test.py +0 -0
  193. {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/nba/sportsreference/__init__.py +0 -0
  194. {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/nba/sportsreference/nba_sportsreference_league_model_test.py +0 -0
  195. {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/ncaab/__init__.py +0 -0
  196. {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/ncaab/sportsreference/__init__.py +0 -0
  197. {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/ncaab/sportsreference/ncaab_sportsreference_league_model_test.py +0 -0
  198. {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/nfl/__init__.py +0 -0
  199. {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/nfl/sportsdb/__init__.py +0 -0
  200. {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/nfl/sportsdb/nfl_sportsdb_league_model_test.py +0 -0
  201. {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/oddsportal/__init__.py +0 -0
  202. {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/oddsportal/decrypt_test.py +0 -0
  203. {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/oddsportal/oddsportal_game_model_test.py +0 -0
  204. {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/oddsportal/oddsportal_league_model_test.py +0 -0
  205. {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/player_model_test.py +0 -0
  206. {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/social_model_test.py +0 -0
  207. {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/sportsdb/__init__.py +0 -0
  208. {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/sportsdb/sportsdb_game_model_test.py +0 -0
  209. {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/sportsdb/sportsdb_league_model_test.py +0 -0
  210. {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/sportsdb/sportsdb_team_model_test.py +0 -0
  211. {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/sportsdb/sportsdb_venue_model_test.py +0 -0
  212. {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/sportsreference/__init__.py +0 -0
  213. {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/sportsreference/sportsreference_game_model_test.py +0 -0
  214. {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/sportsreference/sportsreference_league_model_test.py +0 -0
  215. {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/sportsreference/sportsreference_player_model_test.py +0 -0
  216. {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/sportsreference/sportsreference_team_model_test.py +0 -0
  217. {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/sportsreference/sportsreference_venue_model_test.py +0 -0
  218. {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/team_model_test.py +0 -0
  219. {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/x/__init__.py +0 -0
  220. {sportsball-0.3.118 → sportsball-0.3.119}/tests/data/x/x_social_model_test.py +0 -0
  221. {sportsball-0.3.118 → sportsball-0.3.119}/tests/proxy_session_test.py +0 -0
  222. {sportsball-0.3.118 → sportsball-0.3.119}/tests/sportsball_test.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: sportsball
3
- Version: 0.3.118
3
+ Version: 0.3.119
4
4
  Summary: A library for pulling in and normalising sports stats.
5
5
  Home-page: https://github.com/8W9aG/sportsball
6
6
  Author: Will Sackfield
@@ -26,7 +26,7 @@ def install_requires() -> typing.List[str]:
26
26
 
27
27
  setup(
28
28
  name='sportsball',
29
- version='0.3.118',
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',
@@ -4,4 +4,4 @@
4
4
  import cchardet # type: ignore
5
5
  import lxml # noqa: ignore
6
6
 
7
- __VERSION__ = "0.3.118"
7
+ __VERSION__ = "0.3.119"
@@ -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 logging
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(html: str) -> list[float]:
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
- logging.warning("Ladder URL timed out.")
48
- odds = _extract_odds(page.content())
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 _parse_game_info(
23
- html: str,
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
- logging.warning("Ladder URL timed out.")
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
@@ -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
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: sportsball
3
- Version: 0.3.118
3
+ Version: 0.3.119
4
4
  Summary: A library for pulling in and normalising sports stats.
5
5
  Home-page: https://github.com/8W9aG/sportsball
6
6
  Author: Will Sackfield
File without changes
File without changes
File without changes
File without changes