sportsball 0.3.25__tar.gz → 0.3.26__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 (207) hide show
  1. {sportsball-0.3.25/sportsball.egg-info → sportsball-0.3.26}/PKG-INFO +1 -1
  2. {sportsball-0.3.25 → sportsball-0.3.26}/setup.py +1 -1
  3. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/__init__.py +1 -1
  4. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/google/google_address_model.py +270 -81
  5. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/oddsportal/oddsportal_game_model.py +12 -8
  6. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/oddsportal/oddsportal_league_model.py +46 -13
  7. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/proxy_session.py +11 -2
  8. {sportsball-0.3.25 → sportsball-0.3.26/sportsball.egg-info}/PKG-INFO +1 -1
  9. {sportsball-0.3.25 → sportsball-0.3.26}/LICENSE +0 -0
  10. {sportsball-0.3.25 → sportsball-0.3.26}/MANIFEST.in +0 -0
  11. {sportsball-0.3.25 → sportsball-0.3.26}/README.md +0 -0
  12. {sportsball-0.3.25 → sportsball-0.3.26}/requirements.txt +0 -0
  13. {sportsball-0.3.25 → sportsball-0.3.26}/setup.cfg +0 -0
  14. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/__main__.py +0 -0
  15. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/args.py +0 -0
  16. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/cache.py +0 -0
  17. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/__init__.py +0 -0
  18. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/address_model.py +0 -0
  19. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/afl/__init__.py +0 -0
  20. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/afl/afltables/__init__.py +0 -0
  21. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/afl/afltables/afl_afltables_game_model.py +0 -0
  22. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/afl/afltables/afl_afltables_league_model.py +0 -0
  23. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/afl/afltables/afl_afltables_player_model.py +0 -0
  24. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/afl/afltables/afl_afltables_team_model.py +0 -0
  25. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/afl/afltables/afl_afltables_venue_model.py +0 -0
  26. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/afl/aussportsbetting/__init__.py +0 -0
  27. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/afl/aussportsbetting/afl_aussportsbetting_league_model.py +0 -0
  28. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/afl/combined/__init__.py +0 -0
  29. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/afl/combined/afl_combined_league_model.py +0 -0
  30. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/afl/espn/__init__.py +0 -0
  31. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/afl/espn/afl_espn_league_model.py +0 -0
  32. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/afl/oddsportal/__init__.py +0 -0
  33. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/afl/oddsportal/afl_oddsportal_league_model.py +0 -0
  34. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/aussportsbetting/__init__.py +0 -0
  35. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/aussportsbetting/aussportsbetting_bookie_model.py +0 -0
  36. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/aussportsbetting/aussportsbetting_game_model.py +0 -0
  37. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/aussportsbetting/aussportsbetting_league_model.py +0 -0
  38. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/aussportsbetting/aussportsbetting_odds_model.py +0 -0
  39. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/aussportsbetting/aussportsbetting_team_model.py +0 -0
  40. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/aussportsbetting/aussportsbetting_venue_model.py +0 -0
  41. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/bookie_model.py +0 -0
  42. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/combined/__init__.py +0 -0
  43. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/combined/combined_address_model.py +0 -0
  44. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/combined/combined_game_model.py +0 -0
  45. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/combined/combined_league_model.py +0 -0
  46. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/combined/combined_player_model.py +0 -0
  47. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/combined/combined_team_model.py +0 -0
  48. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/combined/combined_venue_model.py +0 -0
  49. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/combined/combined_weather_model.py +0 -0
  50. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/espn/__init__.py +0 -0
  51. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/espn/espn_bookie_model.py +0 -0
  52. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/espn/espn_game_model.py +0 -0
  53. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/espn/espn_league_model.py +0 -0
  54. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/espn/espn_odds_model.py +0 -0
  55. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/espn/espn_player_model.py +0 -0
  56. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/espn/espn_team_model.py +0 -0
  57. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/espn/espn_venue_model.py +0 -0
  58. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/field_type.py +0 -0
  59. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/game_model.py +0 -0
  60. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/google/__init__.py +0 -0
  61. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/google/google_news_model.py +0 -0
  62. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/league.py +0 -0
  63. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/league_model.py +0 -0
  64. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/model.py +0 -0
  65. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/nba/__init__.py +0 -0
  66. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/nba/combined/__init__.py +0 -0
  67. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/nba/combined/nba_combined_league_model.py +0 -0
  68. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/nba/espn/__init__.py +0 -0
  69. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/nba/espn/nba_espn_league_model.py +0 -0
  70. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/nba/nba/__init__.py +0 -0
  71. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/nba/nba/nba_nba_game_model.py +0 -0
  72. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/nba/nba/nba_nba_league_model.py +0 -0
  73. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/nba/nba/nba_nba_player_model.py +0 -0
  74. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/nba/nba/nba_nba_team_model.py +0 -0
  75. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/nba/oddsportal/__init__.py +0 -0
  76. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/nba/oddsportal/nba_oddsportal_league_model.py +0 -0
  77. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/nba/sportsdb/__init__.py +0 -0
  78. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/nba/sportsdb/nba_sportsdb_league_model.py +0 -0
  79. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/nba/sportsreference/__init__.py +0 -0
  80. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/nba/sportsreference/nba_sportsreference_league_model.py +0 -0
  81. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/ncaab/__init__.py +0 -0
  82. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/ncaab/combined/__init__.py +0 -0
  83. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/ncaab/combined/ncaab_combined_league_model.py +0 -0
  84. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/ncaab/espn/__init__.py +0 -0
  85. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/ncaab/espn/ncaab_espn_league_model.py +0 -0
  86. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/ncaab/oddsportal/__init__.py +0 -0
  87. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/ncaab/oddsportal/ncaab_oddsportal_league_model.py +0 -0
  88. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/ncaab/sportsreference/__init__.py +0 -0
  89. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/ncaab/sportsreference/ncaab_sportsreference_league_model.py +0 -0
  90. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/ncaaf/__init__.py +0 -0
  91. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/ncaaf/combined/__init__.py +0 -0
  92. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/ncaaf/combined/ncaaf_combined_league_model.py +0 -0
  93. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/ncaaf/espn/__init__.py +0 -0
  94. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/ncaaf/espn/ncaaf_espn_league_model.py +0 -0
  95. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/ncaaf/oddsportal/__init__.py +0 -0
  96. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/ncaaf/oddsportal/ncaaf_oddsportal_league_model.py +0 -0
  97. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/news_model.py +0 -0
  98. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/nfl/__init__.py +0 -0
  99. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/nfl/aussportsbetting/__init__.py +0 -0
  100. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/nfl/aussportsbetting/nfl_aussportsbetting_league_model.py +0 -0
  101. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/nfl/combined/__init__.py +0 -0
  102. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/nfl/combined/nfl_combined_league_model.py +0 -0
  103. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/nfl/espn/__init__.py +0 -0
  104. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/nfl/espn/nfl_espn_league_model.py +0 -0
  105. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/nfl/oddsportal/__init__.py +0 -0
  106. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/nfl/oddsportal/nfl_oddsportal_league_model.py +0 -0
  107. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/nfl/sportsdb/__init__.py +0 -0
  108. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/nfl/sportsdb/nfl_sportsdb_league_model.py +0 -0
  109. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/odds_model.py +0 -0
  110. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/oddsportal/__init__.py +0 -0
  111. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/oddsportal/oddsportal_bookie_model.py +0 -0
  112. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/oddsportal/oddsportal_odds_model.py +0 -0
  113. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/oddsportal/oddsportal_team_model.py +0 -0
  114. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/oddsportal/oddsportal_venue_model.py +0 -0
  115. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/player_model.py +0 -0
  116. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/season_type.py +0 -0
  117. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/social_model.py +0 -0
  118. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/sportsdb/__init__.py +0 -0
  119. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/sportsdb/sportsdb_game_model.py +0 -0
  120. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/sportsdb/sportsdb_league_model.py +0 -0
  121. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/sportsdb/sportsdb_team_model.py +0 -0
  122. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/sportsdb/sportsdb_venue_model.py +0 -0
  123. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/sportsreference/__init__.py +0 -0
  124. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/sportsreference/sportsreference_game_model.py +0 -0
  125. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/sportsreference/sportsreference_league_model.py +0 -0
  126. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/sportsreference/sportsreference_player_model.py +0 -0
  127. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/sportsreference/sportsreference_team_model.py +0 -0
  128. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/sportsreference/sportsreference_venue_model.py +0 -0
  129. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/team_model.py +0 -0
  130. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/venue_model.py +0 -0
  131. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/weather/__init__.py +0 -0
  132. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/weather/gribstream/__init__.py +0 -0
  133. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/weather/gribstream/gribstream_weather_model.py +0 -0
  134. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/weather/multi_weather_model.py +0 -0
  135. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/weather/openmeteo/__init__.py +0 -0
  136. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/weather/openmeteo/openmeteo_weather_model.py +0 -0
  137. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/weather_model.py +0 -0
  138. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/wikipedia/__init__.py +0 -0
  139. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/wikipedia/wikipedia_venue_model.py +0 -0
  140. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/x/__init__.py +0 -0
  141. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/data/x/x_social_model.py +0 -0
  142. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/logger.py +0 -0
  143. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/loglevel.py +0 -0
  144. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/session.py +0 -0
  145. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/sportsball.py +0 -0
  146. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/vendor/__init__.py +0 -0
  147. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball/vendor/pygooglenews/__init__.py +0 -0
  148. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball.egg-info/SOURCES.txt +0 -0
  149. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball.egg-info/dependency_links.txt +0 -0
  150. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball.egg-info/entry_points.txt +0 -0
  151. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball.egg-info/not-zip-safe +0 -0
  152. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball.egg-info/requires.txt +0 -0
  153. {sportsball-0.3.25 → sportsball-0.3.26}/sportsball.egg-info/top_level.txt +0 -0
  154. {sportsball-0.3.25 → sportsball-0.3.26}/tests/__init__.py +0 -0
  155. {sportsball-0.3.25 → sportsball-0.3.26}/tests/data/__init__.py +0 -0
  156. {sportsball-0.3.25 → sportsball-0.3.26}/tests/data/afl/__init__.py +0 -0
  157. {sportsball-0.3.25 → sportsball-0.3.26}/tests/data/afl/afltables/__init__.py +0 -0
  158. {sportsball-0.3.25 → sportsball-0.3.26}/tests/data/afl/afltables/afl_afltables_league_model_test.py +0 -0
  159. {sportsball-0.3.25 → sportsball-0.3.26}/tests/data/afl/afltables/afl_afltables_player_model_test.py +0 -0
  160. {sportsball-0.3.25 → sportsball-0.3.26}/tests/data/aussportsbetting/__init__.py +0 -0
  161. {sportsball-0.3.25 → sportsball-0.3.26}/tests/data/aussportsbetting/aussportsbetting_game_model_test.py +0 -0
  162. {sportsball-0.3.25 → sportsball-0.3.26}/tests/data/combined/__init__.py +0 -0
  163. {sportsball-0.3.25 → sportsball-0.3.26}/tests/data/combined/combined_game_model_test.py +0 -0
  164. {sportsball-0.3.25 → sportsball-0.3.26}/tests/data/combined/combined_player_model_test.py +0 -0
  165. {sportsball-0.3.25 → sportsball-0.3.26}/tests/data/espn/__init__.py +0 -0
  166. {sportsball-0.3.25 → sportsball-0.3.26}/tests/data/espn/espn_game_model_test.py +0 -0
  167. {sportsball-0.3.25 → sportsball-0.3.26}/tests/data/espn/espn_player_model_test.py +0 -0
  168. {sportsball-0.3.25 → sportsball-0.3.26}/tests/data/game_model_test.py +0 -0
  169. {sportsball-0.3.25 → sportsball-0.3.26}/tests/data/google/__init__.py +0 -0
  170. {sportsball-0.3.25 → sportsball-0.3.26}/tests/data/google/google_address_model_test.py +0 -0
  171. {sportsball-0.3.25 → sportsball-0.3.26}/tests/data/google/google_news_model_test.py +0 -0
  172. {sportsball-0.3.25 → sportsball-0.3.26}/tests/data/nba/__init__.py +0 -0
  173. {sportsball-0.3.25 → sportsball-0.3.26}/tests/data/nba/nba/__init__.py +0 -0
  174. {sportsball-0.3.25 → sportsball-0.3.26}/tests/data/nba/nba/nba_nba_game_model_test.py +0 -0
  175. {sportsball-0.3.25 → sportsball-0.3.26}/tests/data/nba/nba/nba_nba_league_model_test.py +0 -0
  176. {sportsball-0.3.25 → sportsball-0.3.26}/tests/data/nba/nba/nba_nba_player_model_test.py +0 -0
  177. {sportsball-0.3.25 → sportsball-0.3.26}/tests/data/nba/nba/nba_nba_team_model_test.py +0 -0
  178. {sportsball-0.3.25 → sportsball-0.3.26}/tests/data/nba/sportsdb/__init__.py +0 -0
  179. {sportsball-0.3.25 → sportsball-0.3.26}/tests/data/nba/sportsdb/nba_sportsdb_league_model_test.py +0 -0
  180. {sportsball-0.3.25 → sportsball-0.3.26}/tests/data/nba/sportsreference/__init__.py +0 -0
  181. {sportsball-0.3.25 → sportsball-0.3.26}/tests/data/nba/sportsreference/nba_sportsreference_league_model_test.py +0 -0
  182. {sportsball-0.3.25 → sportsball-0.3.26}/tests/data/ncaab/__init__.py +0 -0
  183. {sportsball-0.3.25 → sportsball-0.3.26}/tests/data/ncaab/sportsreference/__init__.py +0 -0
  184. {sportsball-0.3.25 → sportsball-0.3.26}/tests/data/ncaab/sportsreference/ncaab_sportsreference_league_model_test.py +0 -0
  185. {sportsball-0.3.25 → sportsball-0.3.26}/tests/data/nfl/__init__.py +0 -0
  186. {sportsball-0.3.25 → sportsball-0.3.26}/tests/data/nfl/sportsdb/__init__.py +0 -0
  187. {sportsball-0.3.25 → sportsball-0.3.26}/tests/data/nfl/sportsdb/nfl_sportsdb_league_model_test.py +0 -0
  188. {sportsball-0.3.25 → sportsball-0.3.26}/tests/data/oddsportal/__init__.py +0 -0
  189. {sportsball-0.3.25 → sportsball-0.3.26}/tests/data/oddsportal/oddsportal_game_model_test.py +0 -0
  190. {sportsball-0.3.25 → sportsball-0.3.26}/tests/data/player_model_test.py +0 -0
  191. {sportsball-0.3.25 → sportsball-0.3.26}/tests/data/social_model_test.py +0 -0
  192. {sportsball-0.3.25 → sportsball-0.3.26}/tests/data/sportsdb/__init__.py +0 -0
  193. {sportsball-0.3.25 → sportsball-0.3.26}/tests/data/sportsdb/sportsdb_game_model_test.py +0 -0
  194. {sportsball-0.3.25 → sportsball-0.3.26}/tests/data/sportsdb/sportsdb_league_model_test.py +0 -0
  195. {sportsball-0.3.25 → sportsball-0.3.26}/tests/data/sportsdb/sportsdb_team_model_test.py +0 -0
  196. {sportsball-0.3.25 → sportsball-0.3.26}/tests/data/sportsdb/sportsdb_venue_model_test.py +0 -0
  197. {sportsball-0.3.25 → sportsball-0.3.26}/tests/data/sportsreference/__init__.py +0 -0
  198. {sportsball-0.3.25 → sportsball-0.3.26}/tests/data/sportsreference/sportsreference_game_model_test.py +0 -0
  199. {sportsball-0.3.25 → sportsball-0.3.26}/tests/data/sportsreference/sportsreference_league_model_test.py +0 -0
  200. {sportsball-0.3.25 → sportsball-0.3.26}/tests/data/sportsreference/sportsreference_player_model_test.py +0 -0
  201. {sportsball-0.3.25 → sportsball-0.3.26}/tests/data/sportsreference/sportsreference_team_model_test.py +0 -0
  202. {sportsball-0.3.25 → sportsball-0.3.26}/tests/data/sportsreference/sportsreference_venue_model_test.py +0 -0
  203. {sportsball-0.3.25 → sportsball-0.3.26}/tests/data/team_model_test.py +0 -0
  204. {sportsball-0.3.25 → sportsball-0.3.26}/tests/data/x/__init__.py +0 -0
  205. {sportsball-0.3.25 → sportsball-0.3.26}/tests/data/x/x_social_model_test.py +0 -0
  206. {sportsball-0.3.25 → sportsball-0.3.26}/tests/proxy_session_test.py +0 -0
  207. {sportsball-0.3.25 → sportsball-0.3.26}/tests/sportsball_test.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: sportsball
3
- Version: 0.3.25
3
+ Version: 0.3.26
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.25',
29
+ version='0.3.26',
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',
@@ -1,3 +1,3 @@
1
1
  """The main module for sportsball."""
2
2
 
3
- __VERSION__ = "0.3.25"
3
+ __VERSION__ = "0.3.26"
@@ -1297,6 +1297,87 @@ ROSS_E_TEMPLETON_CENTER = SportsballGeocodeTuple(
1297
1297
  housenumber="503",
1298
1298
  country="USA",
1299
1299
  )
1300
+ LEVIEN_GYM = SportsballGeocodeTuple(
1301
+ city="New York",
1302
+ state="NY",
1303
+ postal="",
1304
+ lat=40.80979,
1305
+ lng=-73.961715,
1306
+ housenumber="3030",
1307
+ country="USA",
1308
+ )
1309
+ CRISLER_CENTER = SportsballGeocodeTuple(
1310
+ city="Ann Arbor",
1311
+ state="MI",
1312
+ postal="48104",
1313
+ lat=42.265037,
1314
+ lng=-83.746768,
1315
+ housenumber="333",
1316
+ country="USA",
1317
+ )
1318
+ HYNES_ATHELTIC_CENTER = SportsballGeocodeTuple(
1319
+ city="New Rochelle",
1320
+ state="NY",
1321
+ postal="",
1322
+ lat=40.92664,
1323
+ lng=-73.784325,
1324
+ housenumber="",
1325
+ country="USA",
1326
+ )
1327
+ OLE_MISS = SportsballGeocodeTuple(
1328
+ city="Oxford",
1329
+ state="MS",
1330
+ postal="38677",
1331
+ lat=34.363164,
1332
+ lng=-89.535453,
1333
+ housenumber="",
1334
+ country="USA",
1335
+ )
1336
+ HOLMES_CENTER = SportsballGeocodeTuple(
1337
+ city="Boone",
1338
+ state="NC",
1339
+ postal="28608",
1340
+ lat=36.210624,
1341
+ lng=-81.675952,
1342
+ housenumber="111",
1343
+ country="USA",
1344
+ )
1345
+ FARRIS_CENTER = SportsballGeocodeTuple(
1346
+ city="Conway",
1347
+ state="AR",
1348
+ postal="",
1349
+ lat=35.081667,
1350
+ lng=-92.459444,
1351
+ housenumber="",
1352
+ country="USA",
1353
+ )
1354
+ HTC_CENTER = SportsballGeocodeTuple(
1355
+ city="Conway",
1356
+ state="SC",
1357
+ postal="29579",
1358
+ lat=33.799167,
1359
+ lng=-79.015556,
1360
+ housenumber="104",
1361
+ country="USA",
1362
+ )
1363
+ GERSTEN_PAVILION = SportsballGeocodeTuple(
1364
+ city="Los Angeles",
1365
+ state="CA",
1366
+ postal="90045",
1367
+ lat=33.9675,
1368
+ lng=-118.415556,
1369
+ housenumber="1",
1370
+ country="USA",
1371
+ )
1372
+ BOGOTA_SAVINGS_BANK_CENTER = SportsballGeocodeTuple(
1373
+ city="Teaneck",
1374
+ state="NJ",
1375
+ postal="07601",
1376
+ lat=40.8967,
1377
+ lng=-74.0324,
1378
+ housenumber="",
1379
+ country="USA",
1380
+ )
1300
1381
  _CACHED_GEOCODES: dict[str, Any] = {
1301
1382
  "S.C.G. - Australia": SCG,
1302
1383
  "Victoria Park - Australia": SportsballGeocodeTuple(
@@ -3510,15 +3591,7 @@ _CACHED_GEOCODES: dict[str, Any] = {
3510
3591
  housenumber="",
3511
3592
  country="USA",
3512
3593
  ),
3513
- "The HTC Center, Conway, South Carolina": SportsballGeocodeTuple(
3514
- city="Conway",
3515
- state="SC",
3516
- postal="29579",
3517
- lat=33.799167,
3518
- lng=-79.015556,
3519
- housenumber="104",
3520
- country="USA",
3521
- ),
3594
+ "The HTC Center, Conway, South Carolina": HTC_CENTER,
3522
3595
  "Daskalakis Athletic Center, Philadelphia, Pennsylvania": SportsballGeocodeTuple(
3523
3596
  city="Philadelphia",
3524
3597
  state="PA",
@@ -3546,15 +3619,7 @@ _CACHED_GEOCODES: dict[str, Any] = {
3546
3619
  housenumber="100",
3547
3620
  country="USA",
3548
3621
  ),
3549
- "Hynes Athletics Center, New Rochelle, New York": SportsballGeocodeTuple(
3550
- city="New Rochelle",
3551
- state="NY",
3552
- postal="",
3553
- lat=40.92664,
3554
- lng=-73.784325,
3555
- housenumber="",
3556
- country="USA",
3557
- ),
3622
+ "Hynes Athletics Center, New Rochelle, New York": HYNES_ATHELTIC_CENTER,
3558
3623
  "Swisher Gymnasium, Jacksonville, Florida": SportsballGeocodeTuple(
3559
3624
  city="Jacksonville",
3560
3625
  state="FL",
@@ -3783,15 +3848,7 @@ _CACHED_GEOCODES: dict[str, Any] = {
3783
3848
  housenumber="1250",
3784
3849
  country="USA",
3785
3850
  ),
3786
- "Albert Gersten Pavilion, Los Angeles, California": SportsballGeocodeTuple(
3787
- city="Los Angeles",
3788
- state="CA",
3789
- postal="90045",
3790
- lat=33.9675,
3791
- lng=-118.415556,
3792
- housenumber="1",
3793
- country="USA",
3794
- ),
3851
+ "Albert Gersten Pavilion, Los Angeles, California": GERSTEN_PAVILION,
3795
3852
  "Firestone Fieldhouse, Malibu, California": SportsballGeocodeTuple(
3796
3853
  city="Malibu",
3797
3854
  state="CA",
@@ -4661,15 +4718,7 @@ _CACHED_GEOCODES: dict[str, Any] = {
4661
4718
  housenumber="900",
4662
4719
  country="USA",
4663
4720
  ),
4664
- "Crisler Arena, Ann Arbor, Michigan": SportsballGeocodeTuple(
4665
- city="Ann Arbor",
4666
- state="MI",
4667
- postal="48104",
4668
- lat=42.265037,
4669
- lng=-83.746768,
4670
- housenumber="333",
4671
- country="USA",
4672
- ),
4721
+ "Crisler Arena, Ann Arbor, Michigan": CRISLER_CENTER,
4673
4722
  "FAU Arena, Boca Raton, Florida": SportsballGeocodeTuple(
4674
4723
  city="Boca Raton",
4675
4724
  state="FL",
@@ -4706,15 +4755,7 @@ _CACHED_GEOCODES: dict[str, Any] = {
4706
4755
  housenumber="1615",
4707
4756
  country="USA",
4708
4757
  ),
4709
- "Bogota Savings Bank Center, Teaneck, New Jersey": SportsballGeocodeTuple(
4710
- city="Teaneck",
4711
- state="NJ",
4712
- postal="07601",
4713
- lat=40.8967,
4714
- lng=-74.0324,
4715
- housenumber="",
4716
- country="USA",
4717
- ),
4758
+ "Bogota Savings Bank Center, Teaneck, New Jersey": BOGOTA_SAVINGS_BANK_CENTER,
4718
4759
  "Emil and Patricia Jones Convocation Center, Chicago, Illinois": SportsballGeocodeTuple(
4719
4760
  city="Chicago",
4720
4761
  state="IL",
@@ -4862,15 +4903,7 @@ _CACHED_GEOCODES: dict[str, Any] = {
4862
4903
  country="USA",
4863
4904
  ),
4864
4905
  "FedExForum, Memphis, Tennessee": FEDEX_FORUM,
4865
- "The Pavilion at Ole Miss, Oxford, Mississippi": SportsballGeocodeTuple(
4866
- city="Oxford",
4867
- state="MS",
4868
- postal="38677",
4869
- lat=34.363164,
4870
- lng=-89.535453,
4871
- housenumber="",
4872
- country="USA",
4873
- ),
4906
+ "The Pavilion at Ole Miss, Oxford, Mississippi": OLE_MISS,
4874
4907
  "Dee Glen Smith Spectrum, Logan, Utah": SportsballGeocodeTuple(
4875
4908
  city="Logan",
4876
4909
  state="UT",
@@ -4880,15 +4913,7 @@ _CACHED_GEOCODES: dict[str, Any] = {
4880
4913
  housenumber="900",
4881
4914
  country="USA",
4882
4915
  ),
4883
- "Holmes Convocation Center, Boone, North Carolina": SportsballGeocodeTuple(
4884
- city="Boone",
4885
- state="NC",
4886
- postal="28608",
4887
- lat=36.210624,
4888
- lng=-81.675952,
4889
- housenumber="111",
4890
- country="USA",
4891
- ),
4916
+ "Holmes Convocation Center, Boone, North Carolina": HOLMES_CENTER,
4892
4917
  "Leede Arena, Hanover, New Hampshire": SportsballGeocodeTuple(
4893
4918
  city="Hanover",
4894
4919
  state="NH",
@@ -5177,15 +5202,7 @@ _CACHED_GEOCODES: dict[str, Any] = {
5177
5202
  housenumber="13",
5178
5203
  country="USA",
5179
5204
  ),
5180
- "Levien Gym, New York, New York": SportsballGeocodeTuple(
5181
- city="New York",
5182
- state="NY",
5183
- postal="",
5184
- lat=40.80979,
5185
- lng=-73.961715,
5186
- housenumber="3030",
5187
- country="USA",
5188
- ),
5205
+ "Levien Gym, New York, New York": LEVIEN_GYM,
5189
5206
  "Belk Arena, Davidson, North Carolina": SportsballGeocodeTuple(
5190
5207
  city="Davidson",
5191
5208
  state="NC",
@@ -6129,15 +6146,7 @@ _CACHED_GEOCODES: dict[str, Any] = {
6129
6146
  housenumber="4400",
6130
6147
  country="USA",
6131
6148
  ),
6132
- "Jeff Farris Center, Conway, Arkansas": SportsballGeocodeTuple(
6133
- city="Conway",
6134
- state="AR",
6135
- postal="",
6136
- lat=35.081667,
6137
- lng=-92.459444,
6138
- housenumber="",
6139
- country="USA",
6140
- ),
6149
+ "Jeff Farris Center, Conway, Arkansas": FARRIS_CENTER,
6141
6150
  "TD Arena, Charleston, South Carolina": SportsballGeocodeTuple(
6142
6151
  city="Charleston",
6143
6152
  state="SC",
@@ -7487,6 +7496,186 @@ _CACHED_GEOCODES: dict[str, Any] = {
7487
7496
  country="USA",
7488
7497
  ),
7489
7498
  "Ross E. Templeton Center, Clinton, South Carolina": ROSS_E_TEMPLETON_CENTER,
7499
+ "PPG Paints Arena, Pittsburgh, Pennsylvania": SportsballGeocodeTuple(
7500
+ city="Pittsburgh",
7501
+ state="PA",
7502
+ postal="",
7503
+ lat=40.439444,
7504
+ lng=-79.989167,
7505
+ housenumber="1001",
7506
+ country="USA",
7507
+ ),
7508
+ "Levien Gymnasium, New York, New York": LEVIEN_GYM,
7509
+ "Simon Skjodt Assembly Hall, Bloomington, Indiana": SportsballGeocodeTuple(
7510
+ city="Bloomington",
7511
+ state="IN",
7512
+ postal="47408",
7513
+ lat=39.1808334,
7514
+ lng=-86.522222,
7515
+ housenumber="1001",
7516
+ country="USA",
7517
+ ),
7518
+ "Crisler Center, Ann Arbor, Michigan": CRISLER_CENTER,
7519
+ "Jersey Mike's Arena, New Brunswick, New Jersey": SportsballGeocodeTuple(
7520
+ city="New Brunswick",
7521
+ state="NJ",
7522
+ postal="08854",
7523
+ lat=40.525278,
7524
+ lng=-74.441111,
7525
+ housenumber="83",
7526
+ country="USA",
7527
+ ),
7528
+ "Fertitta Center, Houston, Texas": SportsballGeocodeTuple(
7529
+ city="Houston",
7530
+ state="TX",
7531
+ postal="77004",
7532
+ lat=29.724722,
7533
+ lng=-95.346944,
7534
+ housenumber="3875",
7535
+ country="USA",
7536
+ ),
7537
+ "UMPC Cooper Fieldhouse, Pittsburgh, Pennsylvania": SportsballGeocodeTuple(
7538
+ city="Pittsburgh",
7539
+ state="PA",
7540
+ postal="15282",
7541
+ lat=40.4374,
7542
+ lng=-79.9879,
7543
+ housenumber="600",
7544
+ country="USA",
7545
+ ),
7546
+ "Davey Whitney Complex, Alcorn State, Mississippi": SportsballGeocodeTuple(
7547
+ city="Alcorn State",
7548
+ state="MS",
7549
+ postal="",
7550
+ lat=31.873225,
7551
+ lng=-91.13318,
7552
+ housenumber="",
7553
+ country="USA",
7554
+ ),
7555
+ "John J. Lee Amphitheater, New Haven, Connecticut": SportsballGeocodeTuple(
7556
+ city="New Haven",
7557
+ state="CT",
7558
+ postal="06511",
7559
+ lat=41.313611,
7560
+ lng=-72.930556,
7561
+ housenumber="70",
7562
+ country="USA",
7563
+ ),
7564
+ "Hynes Athletic Center, New Rochelle, New York": HYNES_ATHELTIC_CENTER,
7565
+ "The Sandy and John Black Pavilion at Ole Miss, Oxford, Mississippi": OLE_MISS,
7566
+ "Moscow, Idaho": SportsballGeocodeTuple(
7567
+ city="Moscow",
7568
+ state="ID",
7569
+ postal="",
7570
+ lat=46.741667,
7571
+ lng=-117.0,
7572
+ housenumber="",
7573
+ country="USA",
7574
+ ),
7575
+ "Ocean Bank Convocation Center, Miami, Florida": SportsballGeocodeTuple(
7576
+ city="Miami",
7577
+ state="FL",
7578
+ postal="33199",
7579
+ lat=25.756667,
7580
+ lng=-80.379444,
7581
+ housenumber="11200",
7582
+ country="USA",
7583
+ ),
7584
+ "Island Federal Credit Union Arena, Stony Brook, New York": SportsballGeocodeTuple(
7585
+ city="Stony Brook",
7586
+ state="NY",
7587
+ postal="11790",
7588
+ lat=40.91741,
7589
+ lng=-73.125955,
7590
+ housenumber="100",
7591
+ country="USA",
7592
+ ),
7593
+ "Phoenix, Arizona": SportsballGeocodeTuple(
7594
+ city="Phoenix",
7595
+ state="AZ",
7596
+ postal="",
7597
+ lat=33.448333,
7598
+ lng=-112.073889,
7599
+ housenumber="",
7600
+ country="USA",
7601
+ ),
7602
+ "Evansville, Indiana": SportsballGeocodeTuple(
7603
+ city="Evansville",
7604
+ state="IN",
7605
+ postal="",
7606
+ lat=37.977222,
7607
+ lng=-87.550556,
7608
+ housenumber="",
7609
+ country="USA",
7610
+ ),
7611
+ "America First Event Center, Cedar City, Utah": SportsballGeocodeTuple(
7612
+ city="Cedar City",
7613
+ state="UT",
7614
+ postal="84720",
7615
+ lat=37.675556,
7616
+ lng=-113.073056,
7617
+ housenumber="351",
7618
+ country="USA",
7619
+ ),
7620
+ "St. Paul, Minnesota": SportsballGeocodeTuple(
7621
+ city="St. Paul",
7622
+ state="MN",
7623
+ postal="",
7624
+ lat=44.947778,
7625
+ lng=-93.103889,
7626
+ housenumber="",
7627
+ country="USA",
7628
+ ),
7629
+ "Jenny Craig Pavilion, San Diego, California": SportsballGeocodeTuple(
7630
+ city="San Diego",
7631
+ state="CA",
7632
+ postal="",
7633
+ lat=32.7745,
7634
+ lng=-117.1837,
7635
+ housenumber="5998",
7636
+ country="USA",
7637
+ ),
7638
+ "George M. Holmes Convocation Center, Boone, North Carolina": HOLMES_CENTER,
7639
+ "Farris Center, Conway, Arkansas": FARRIS_CENTER,
7640
+ "HTC Center, Conway, South Carolina": HTC_CENTER,
7641
+ "Atlanta, Georgia": SportsballGeocodeTuple(
7642
+ city="Atlanta",
7643
+ state="GA",
7644
+ postal="",
7645
+ lat=33.748889,
7646
+ lng=-84.39,
7647
+ housenumber="",
7648
+ country="USA",
7649
+ ),
7650
+ "UNF Arena, Jacksonville, Florida": SportsballGeocodeTuple(
7651
+ city="Jacksonville",
7652
+ state="FL",
7653
+ postal="32224",
7654
+ lat=30.2734,
7655
+ lng=-81.5079,
7656
+ housenumber="11852",
7657
+ country="USA",
7658
+ ),
7659
+ "Strahan Arena, San Marcos, Texas": SportsballGeocodeTuple(
7660
+ city="San Marcos",
7661
+ state="TX",
7662
+ postal="78666",
7663
+ lat=29.888611,
7664
+ lng=-97.932778,
7665
+ housenumber="601",
7666
+ country="USA",
7667
+ ),
7668
+ "Wellness and Events Center, Newark, New Jersey": SportsballGeocodeTuple(
7669
+ city="Newark",
7670
+ state="NJ",
7671
+ postal="07102",
7672
+ lat=40.7453,
7673
+ lng=-74.183,
7674
+ housenumber="100",
7675
+ country="USA",
7676
+ ),
7677
+ "Gersten Pavilion, Los Angeles, California": GERSTEN_PAVILION,
7678
+ "Rothman Center, Teaneck, New Jersey": BOGOTA_SAVINGS_BANK_CENTER,
7490
7679
  }
7491
7680
 
7492
7681
 
@@ -1,6 +1,6 @@
1
1
  """OddsPortal game model."""
2
2
 
3
- # pylint: disable=too-many-locals
3
+ # pylint: disable=too-many-locals,too-many-statements
4
4
  import datetime
5
5
  import json
6
6
  import urllib.parse
@@ -21,7 +21,7 @@ def _create_oddsportal_game_model(
21
21
  url: str,
22
22
  league: League,
23
23
  ) -> GameModel:
24
- response = session.get(url)
24
+ response = session.get(url, headers={"X-No-Wayback": "1"})
25
25
  response.raise_for_status()
26
26
 
27
27
  soup = BeautifulSoup(response.text, "html.parser")
@@ -76,17 +76,21 @@ def _create_oddsportal_game_model(
76
76
  if event_body["awayResult"] != "":
77
77
  away_points = float(event_body["awayResult"])
78
78
 
79
- return GameModel(
80
- dt=dt,
81
- week=None,
82
- game_number=None,
83
- venue=create_oddsportal_venue_model(
79
+ venue = None
80
+ if event_body["venue"] and event_body["venueTown"] and event_body["venueCountry"]:
81
+ venue = create_oddsportal_venue_model(
84
82
  session,
85
83
  dt,
86
84
  event_body["venue"],
87
85
  event_body["venueTown"],
88
86
  event_body["venueCountry"],
89
- ),
87
+ )
88
+
89
+ return GameModel(
90
+ dt=dt,
91
+ week=None,
92
+ game_number=None,
93
+ venue=venue,
90
94
  teams=[
91
95
  create_oddsportal_team_model(
92
96
  session,
@@ -1,5 +1,6 @@
1
1
  """Odds Portal league model."""
2
2
 
3
+ # pylint: disable=too-many-locals,too-many-branches,too-many-statements
3
4
  import http
4
5
  import json
5
6
  import logging
@@ -74,15 +75,16 @@ class OddsPortalLeagueModel(LeagueModel):
74
75
  raise exc
75
76
 
76
77
  def _find_previous(self, pbar: tqdm.tqdm) -> Iterator[GameModel]:
78
+ standard_suffix = self._path + "results/"
77
79
  seen_urls = set()
78
- queued_urls = {"https://www.oddsportal.com/" + self._path + "results/"}
80
+ queued_urls = {"https://www.oddsportal.com/" + standard_suffix}
79
81
  while queued_urls:
80
82
  url = queued_urls.pop()
81
83
  if url in seen_urls:
82
84
  continue
83
85
  seen_urls.add(url)
84
86
 
85
- if url.endswith("results/"):
87
+ if url.endswith(standard_suffix):
86
88
  with self.session.cache_disabled():
87
89
  response = self.session.get(url)
88
90
  else:
@@ -92,24 +94,55 @@ class OddsPortalLeagueModel(LeagueModel):
92
94
  soup = BeautifulSoup(response.text, "html.parser")
93
95
 
94
96
  # Find next URLs
95
- for a in soup.find_all("a", href=True):
96
- next_url = urllib.parse.urljoin(url, a.get("href"))
97
- if next_url.endswith("/results/"):
97
+ for option in soup.find_all("option"):
98
+ next_url = urllib.parse.urljoin(url, option.get("value"))
99
+ if next_url.endswith("/results/") and self._path[:-1] in next_url:
98
100
  queued_urls.add(next_url)
99
101
 
100
102
  # Paginate through results
101
103
  while True:
104
+ game_urls = set()
105
+
106
+ # Check the react tags
102
107
  tournament_component = soup.find("tournament-component")
103
- if not isinstance(tournament_component, Tag):
104
- raise ValueError("tournament_component is not a tag.")
105
- matches = json.loads(str(tournament_component[":sport-data"]))
106
- component = matches.get("tournamentGamesComponent", matches.get("d"))
107
- if component.get("total") == 0:
108
- break
109
- for match in component.get("rows", []):
108
+ if isinstance(tournament_component, Tag):
109
+ matches = json.loads(str(tournament_component[":sport-data"]))
110
+ component = matches.get(
111
+ "tournamentGamesComponent", matches.get("d")
112
+ )
113
+ if component.get("total") != 0:
114
+ game_urls = {
115
+ urllib.parse.urljoin(url, x["url"])
116
+ for x in component.get("rows", [])
117
+ }
118
+ if not game_urls:
119
+ for a in soup.find_all("a", href=True):
120
+ game_url = urllib.parse.urljoin(url, a.get("href"))
121
+ if (
122
+ game_url.endswith("results/")
123
+ or game_url.endswith("standings/")
124
+ or game_url.endswith(self._path)
125
+ or game_url.endswith("outrights/")
126
+ ):
127
+ continue
128
+ if self._path[:-1] in game_url:
129
+ game_urls.add(game_url)
130
+
131
+ for game_url in game_urls:
132
+ if "#" in game_url:
133
+ continue
134
+ if (
135
+ game_url.replace("results/", "") == url
136
+ or game_url.replace("results/", "") in queued_urls
137
+ ):
138
+ continue
139
+ if game_url.endswith("/archive/"):
140
+ continue
141
+ if len(game_url.split("/")) != 8:
142
+ continue
110
143
  game_model = create_oddsportal_game_model(
111
144
  self.session,
112
- urllib.parse.urljoin(url, match["url"]),
145
+ game_url,
113
146
  self.league,
114
147
  False,
115
148
  )
@@ -31,6 +31,7 @@ FAST_FAIL_DOMAINS = [
31
31
  "https://news.google.com/",
32
32
  "https://historical-forecast-api.open-meteo.com/",
33
33
  ]
34
+ X_NO_WAYBACK = "x-no-wayback"
34
35
 
35
36
 
36
37
  def _is_fast_fail_url(url: str | None) -> bool:
@@ -119,7 +120,10 @@ class ProxySession(requests_cache.CachedSession):
119
120
  response.request = prepared_request
120
121
 
121
122
  return response
122
- except wayback.exceptions.MementoPlaybackError: # pyright: ignore
123
+ except (
124
+ wayback.exceptions.MementoPlaybackError, # pyright: ignore
125
+ requests.exceptions.ChunkedEncodingError,
126
+ ): # pyright: ignore
123
127
  pass
124
128
  return None
125
129
 
@@ -127,6 +131,11 @@ class ProxySession(requests_cache.CachedSession):
127
131
  def _perform_timeout_send(self, request: requests.PreparedRequest, **kwargs) -> Any:
128
132
  key = self.cache.create_key(request)
129
133
 
134
+ no_wayback = False
135
+ if X_NO_WAYBACK in request.headers:
136
+ no_wayback = request.headers.get(X_NO_WAYBACK) == "1"
137
+ del request.headers[X_NO_WAYBACK]
138
+
130
139
  if not self.settings.disabled:
131
140
  # Check the cache
132
141
  cached_response = self.cache.get_response(key)
@@ -136,7 +145,7 @@ class ProxySession(requests_cache.CachedSession):
136
145
  logging.info("Request for %s not cached.", request.url)
137
146
 
138
147
  # Otherwise check the wayback machine
139
- if not _is_fast_fail_url(request.url):
148
+ if not _is_fast_fail_url(request.url) and no_wayback:
140
149
  response = self._wayback_machine_request(
141
150
  request.method, request.url, headers=request.headers
142
151
  )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: sportsball
3
- Version: 0.3.25
3
+ Version: 0.3.26
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