sportsball 0.3.33__tar.gz → 0.3.35__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 (216) hide show
  1. {sportsball-0.3.33/sportsball.egg-info → sportsball-0.3.35}/PKG-INFO +1 -1
  2. {sportsball-0.3.33 → sportsball-0.3.35}/setup.py +1 -1
  3. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/__init__.py +1 -1
  4. sportsball-0.3.35/sportsball/cache.py +5 -0
  5. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/afl/afltables/afl_afltables_game_model.py +1 -1
  6. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/afl/afltables/afl_afltables_league_model.py +18 -15
  7. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/afl/combined/afl_combined_league_model.py +22 -0
  8. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/aussportsbetting/aussportsbetting_game_model.py +1 -1
  9. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/combined/combined_game_model.py +1 -1
  10. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/combined/combined_league_model.py +11 -22
  11. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/espn/espn_game_model.py +1 -1
  12. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/game_model.py +1 -2
  13. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/google/google_address_model.py +8414 -4811
  14. sportsball-0.3.35/sportsball/data/nba/combined/nba_combined_league_model.py +911 -0
  15. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/nba/nba/nba_nba_game_model.py +1 -1
  16. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/nba/nba/nba_nba_team_model.py +6 -1
  17. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/oddsportal/decrypt.py +8 -1
  18. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/oddsportal/oddsportal_game_model.py +6 -3
  19. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/oddsportal/oddsportal_team_model.py +2 -0
  20. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/sportsdb/sportsdb_game_model.py +1 -1
  21. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/sportsreference/sportsreference_game_model.py +190 -35
  22. sportsball-0.3.35/sportsball/data/sportsreference/sportsreference_league_model.py +123 -0
  23. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/sportsreference/sportsreference_player_model.py +24 -2
  24. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/sportsreference/sportsreference_team_model.py +69 -12
  25. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/sportsreference/sportsreference_venue_model.py +3 -3
  26. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/team_model.py +2 -0
  27. sportsball-0.3.35/sportsball/data/wikipedia/wikipedia_venue_model.py +111 -0
  28. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/proxy_session.py +11 -6
  29. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/session.py +1 -1
  30. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/sportsball.py +0 -11
  31. {sportsball-0.3.33 → sportsball-0.3.35/sportsball.egg-info}/PKG-INFO +1 -1
  32. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball.egg-info/SOURCES.txt +1 -0
  33. {sportsball-0.3.33 → sportsball-0.3.35}/tests/data/afl/afltables/afl_afltables_league_model_test.py +9 -1
  34. {sportsball-0.3.33 → sportsball-0.3.35}/tests/data/combined/combined_game_model_test.py +1 -1
  35. {sportsball-0.3.33 → sportsball-0.3.35}/tests/data/game_model_test.py +1 -1
  36. sportsball-0.3.35/tests/data/oddsportal/decrypt_test.py +28 -0
  37. {sportsball-0.3.33 → sportsball-0.3.35}/tests/data/oddsportal/oddsportal_game_model_test.py +2 -2
  38. sportsball-0.3.35/tests/data/sportsreference/sportsreference_game_model_test.py +885 -0
  39. sportsball-0.3.35/tests/data/sportsreference/sportsreference_league_model_test.py +151 -0
  40. {sportsball-0.3.33 → sportsball-0.3.35}/tests/data/sportsreference/sportsreference_team_model_test.py +60 -0
  41. sportsball-0.3.33/sportsball/cache.py +0 -7
  42. sportsball-0.3.33/sportsball/data/nba/combined/nba_combined_league_model.py +0 -250
  43. sportsball-0.3.33/sportsball/data/sportsreference/sportsreference_league_model.py +0 -84
  44. sportsball-0.3.33/sportsball/data/wikipedia/wikipedia_venue_model.py +0 -39
  45. sportsball-0.3.33/tests/data/sportsreference/sportsreference_game_model_test.py +0 -97
  46. sportsball-0.3.33/tests/data/sportsreference/sportsreference_league_model_test.py +0 -16
  47. {sportsball-0.3.33 → sportsball-0.3.35}/LICENSE +0 -0
  48. {sportsball-0.3.33 → sportsball-0.3.35}/MANIFEST.in +0 -0
  49. {sportsball-0.3.33 → sportsball-0.3.35}/README.md +0 -0
  50. {sportsball-0.3.33 → sportsball-0.3.35}/requirements.txt +0 -0
  51. {sportsball-0.3.33 → sportsball-0.3.35}/setup.cfg +0 -0
  52. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/__main__.py +0 -0
  53. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/args.py +0 -0
  54. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/__init__.py +0 -0
  55. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/address_model.py +0 -0
  56. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/afl/__init__.py +0 -0
  57. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/afl/afltables/__init__.py +0 -0
  58. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/afl/afltables/afl_afltables_player_model.py +0 -0
  59. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/afl/afltables/afl_afltables_team_model.py +0 -0
  60. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/afl/afltables/afl_afltables_venue_model.py +0 -0
  61. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/afl/aussportsbetting/__init__.py +0 -0
  62. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/afl/aussportsbetting/afl_aussportsbetting_league_model.py +0 -0
  63. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/afl/combined/__init__.py +0 -0
  64. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/afl/espn/__init__.py +0 -0
  65. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/afl/espn/afl_espn_league_model.py +0 -0
  66. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/afl/oddsportal/__init__.py +0 -0
  67. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/afl/oddsportal/afl_oddsportal_league_model.py +0 -0
  68. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/aussportsbetting/__init__.py +0 -0
  69. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/aussportsbetting/aussportsbetting_bookie_model.py +0 -0
  70. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/aussportsbetting/aussportsbetting_league_model.py +0 -0
  71. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/aussportsbetting/aussportsbetting_odds_model.py +0 -0
  72. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/aussportsbetting/aussportsbetting_team_model.py +0 -0
  73. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/aussportsbetting/aussportsbetting_venue_model.py +0 -0
  74. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/bookie_model.py +0 -0
  75. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/combined/__init__.py +0 -0
  76. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/combined/combined_address_model.py +0 -0
  77. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/combined/combined_player_model.py +0 -0
  78. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/combined/combined_team_model.py +0 -0
  79. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/combined/combined_venue_model.py +0 -0
  80. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/combined/combined_weather_model.py +0 -0
  81. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/espn/__init__.py +0 -0
  82. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/espn/espn_bookie_model.py +0 -0
  83. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/espn/espn_league_model.py +0 -0
  84. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/espn/espn_odds_model.py +0 -0
  85. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/espn/espn_player_model.py +0 -0
  86. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/espn/espn_team_model.py +0 -0
  87. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/espn/espn_venue_model.py +0 -0
  88. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/field_type.py +0 -0
  89. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/google/__init__.py +0 -0
  90. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/google/google_news_model.py +0 -0
  91. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/league.py +0 -0
  92. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/league_model.py +0 -0
  93. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/model.py +0 -0
  94. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/nba/__init__.py +0 -0
  95. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/nba/combined/__init__.py +0 -0
  96. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/nba/espn/__init__.py +0 -0
  97. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/nba/espn/nba_espn_league_model.py +0 -0
  98. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/nba/nba/__init__.py +0 -0
  99. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/nba/nba/nba_nba_league_model.py +0 -0
  100. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/nba/nba/nba_nba_player_model.py +0 -0
  101. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/nba/oddsportal/__init__.py +0 -0
  102. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/nba/oddsportal/nba_oddsportal_league_model.py +0 -0
  103. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/nba/sportsdb/__init__.py +0 -0
  104. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/nba/sportsdb/nba_sportsdb_league_model.py +0 -0
  105. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/nba/sportsreference/__init__.py +0 -0
  106. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/nba/sportsreference/nba_sportsreference_league_model.py +0 -0
  107. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/ncaab/__init__.py +0 -0
  108. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/ncaab/combined/__init__.py +0 -0
  109. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/ncaab/combined/ncaab_combined_league_model.py +0 -0
  110. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/ncaab/espn/__init__.py +0 -0
  111. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/ncaab/espn/ncaab_espn_league_model.py +0 -0
  112. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/ncaab/oddsportal/__init__.py +0 -0
  113. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/ncaab/oddsportal/ncaab_oddsportal_league_model.py +0 -0
  114. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/ncaab/sportsreference/__init__.py +0 -0
  115. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/ncaab/sportsreference/ncaab_sportsreference_league_model.py +0 -0
  116. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/ncaaf/__init__.py +0 -0
  117. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/ncaaf/combined/__init__.py +0 -0
  118. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/ncaaf/combined/ncaaf_combined_league_model.py +0 -0
  119. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/ncaaf/espn/__init__.py +0 -0
  120. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/ncaaf/espn/ncaaf_espn_league_model.py +0 -0
  121. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/ncaaf/oddsportal/__init__.py +0 -0
  122. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/ncaaf/oddsportal/ncaaf_oddsportal_league_model.py +0 -0
  123. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/news_model.py +0 -0
  124. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/nfl/__init__.py +0 -0
  125. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/nfl/aussportsbetting/__init__.py +0 -0
  126. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/nfl/aussportsbetting/nfl_aussportsbetting_league_model.py +0 -0
  127. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/nfl/combined/__init__.py +0 -0
  128. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/nfl/combined/nfl_combined_league_model.py +0 -0
  129. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/nfl/espn/__init__.py +0 -0
  130. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/nfl/espn/nfl_espn_league_model.py +0 -0
  131. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/nfl/oddsportal/__init__.py +0 -0
  132. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/nfl/oddsportal/nfl_oddsportal_league_model.py +0 -0
  133. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/nfl/sportsdb/__init__.py +0 -0
  134. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/nfl/sportsdb/nfl_sportsdb_league_model.py +0 -0
  135. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/odds_model.py +0 -0
  136. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/oddsportal/__init__.py +0 -0
  137. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/oddsportal/oddsportal_bookie_model.py +0 -0
  138. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/oddsportal/oddsportal_league_model.py +0 -0
  139. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/oddsportal/oddsportal_odds_model.py +0 -0
  140. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/oddsportal/oddsportal_venue_model.py +0 -0
  141. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/player_model.py +0 -0
  142. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/season_type.py +0 -0
  143. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/social_model.py +0 -0
  144. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/sportsdb/__init__.py +0 -0
  145. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/sportsdb/sportsdb_league_model.py +0 -0
  146. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/sportsdb/sportsdb_team_model.py +0 -0
  147. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/sportsdb/sportsdb_venue_model.py +0 -0
  148. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/sportsreference/__init__.py +0 -0
  149. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/venue_model.py +0 -0
  150. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/weather/__init__.py +0 -0
  151. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/weather/gribstream/__init__.py +0 -0
  152. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/weather/gribstream/gribstream_weather_model.py +0 -0
  153. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/weather/multi_weather_model.py +0 -0
  154. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/weather/openmeteo/__init__.py +0 -0
  155. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/weather/openmeteo/openmeteo_weather_model.py +0 -0
  156. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/weather_model.py +0 -0
  157. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/wikipedia/__init__.py +0 -0
  158. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/x/__init__.py +0 -0
  159. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/data/x/x_social_model.py +0 -0
  160. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/logger.py +0 -0
  161. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/loglevel.py +0 -0
  162. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/vendor/__init__.py +0 -0
  163. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball/vendor/pygooglenews/__init__.py +0 -0
  164. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball.egg-info/dependency_links.txt +0 -0
  165. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball.egg-info/entry_points.txt +0 -0
  166. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball.egg-info/not-zip-safe +0 -0
  167. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball.egg-info/requires.txt +0 -0
  168. {sportsball-0.3.33 → sportsball-0.3.35}/sportsball.egg-info/top_level.txt +0 -0
  169. {sportsball-0.3.33 → sportsball-0.3.35}/tests/__init__.py +0 -0
  170. {sportsball-0.3.33 → sportsball-0.3.35}/tests/data/__init__.py +0 -0
  171. {sportsball-0.3.33 → sportsball-0.3.35}/tests/data/afl/__init__.py +0 -0
  172. {sportsball-0.3.33 → sportsball-0.3.35}/tests/data/afl/afltables/__init__.py +0 -0
  173. {sportsball-0.3.33 → sportsball-0.3.35}/tests/data/afl/afltables/afl_afltables_player_model_test.py +0 -0
  174. {sportsball-0.3.33 → sportsball-0.3.35}/tests/data/aussportsbetting/__init__.py +0 -0
  175. {sportsball-0.3.33 → sportsball-0.3.35}/tests/data/aussportsbetting/aussportsbetting_game_model_test.py +0 -0
  176. {sportsball-0.3.33 → sportsball-0.3.35}/tests/data/combined/__init__.py +0 -0
  177. {sportsball-0.3.33 → sportsball-0.3.35}/tests/data/combined/combined_player_model_test.py +0 -0
  178. {sportsball-0.3.33 → sportsball-0.3.35}/tests/data/espn/__init__.py +0 -0
  179. {sportsball-0.3.33 → sportsball-0.3.35}/tests/data/espn/espn_game_model_test.py +0 -0
  180. {sportsball-0.3.33 → sportsball-0.3.35}/tests/data/espn/espn_player_model_test.py +0 -0
  181. {sportsball-0.3.33 → sportsball-0.3.35}/tests/data/google/__init__.py +0 -0
  182. {sportsball-0.3.33 → sportsball-0.3.35}/tests/data/google/google_address_model_test.py +0 -0
  183. {sportsball-0.3.33 → sportsball-0.3.35}/tests/data/google/google_news_model_test.py +0 -0
  184. {sportsball-0.3.33 → sportsball-0.3.35}/tests/data/nba/__init__.py +0 -0
  185. {sportsball-0.3.33 → sportsball-0.3.35}/tests/data/nba/nba/__init__.py +0 -0
  186. {sportsball-0.3.33 → sportsball-0.3.35}/tests/data/nba/nba/nba_nba_game_model_test.py +0 -0
  187. {sportsball-0.3.33 → sportsball-0.3.35}/tests/data/nba/nba/nba_nba_league_model_test.py +0 -0
  188. {sportsball-0.3.33 → sportsball-0.3.35}/tests/data/nba/nba/nba_nba_player_model_test.py +0 -0
  189. {sportsball-0.3.33 → sportsball-0.3.35}/tests/data/nba/nba/nba_nba_team_model_test.py +0 -0
  190. {sportsball-0.3.33 → sportsball-0.3.35}/tests/data/nba/sportsdb/__init__.py +0 -0
  191. {sportsball-0.3.33 → sportsball-0.3.35}/tests/data/nba/sportsdb/nba_sportsdb_league_model_test.py +0 -0
  192. {sportsball-0.3.33 → sportsball-0.3.35}/tests/data/nba/sportsreference/__init__.py +0 -0
  193. {sportsball-0.3.33 → sportsball-0.3.35}/tests/data/nba/sportsreference/nba_sportsreference_league_model_test.py +0 -0
  194. {sportsball-0.3.33 → sportsball-0.3.35}/tests/data/ncaab/__init__.py +0 -0
  195. {sportsball-0.3.33 → sportsball-0.3.35}/tests/data/ncaab/sportsreference/__init__.py +0 -0
  196. {sportsball-0.3.33 → sportsball-0.3.35}/tests/data/ncaab/sportsreference/ncaab_sportsreference_league_model_test.py +0 -0
  197. {sportsball-0.3.33 → sportsball-0.3.35}/tests/data/nfl/__init__.py +0 -0
  198. {sportsball-0.3.33 → sportsball-0.3.35}/tests/data/nfl/sportsdb/__init__.py +0 -0
  199. {sportsball-0.3.33 → sportsball-0.3.35}/tests/data/nfl/sportsdb/nfl_sportsdb_league_model_test.py +0 -0
  200. {sportsball-0.3.33 → sportsball-0.3.35}/tests/data/oddsportal/__init__.py +0 -0
  201. {sportsball-0.3.33 → sportsball-0.3.35}/tests/data/oddsportal/oddsportal_league_model_test.py +0 -0
  202. {sportsball-0.3.33 → sportsball-0.3.35}/tests/data/player_model_test.py +0 -0
  203. {sportsball-0.3.33 → sportsball-0.3.35}/tests/data/social_model_test.py +0 -0
  204. {sportsball-0.3.33 → sportsball-0.3.35}/tests/data/sportsdb/__init__.py +0 -0
  205. {sportsball-0.3.33 → sportsball-0.3.35}/tests/data/sportsdb/sportsdb_game_model_test.py +0 -0
  206. {sportsball-0.3.33 → sportsball-0.3.35}/tests/data/sportsdb/sportsdb_league_model_test.py +0 -0
  207. {sportsball-0.3.33 → sportsball-0.3.35}/tests/data/sportsdb/sportsdb_team_model_test.py +0 -0
  208. {sportsball-0.3.33 → sportsball-0.3.35}/tests/data/sportsdb/sportsdb_venue_model_test.py +0 -0
  209. {sportsball-0.3.33 → sportsball-0.3.35}/tests/data/sportsreference/__init__.py +0 -0
  210. {sportsball-0.3.33 → sportsball-0.3.35}/tests/data/sportsreference/sportsreference_player_model_test.py +0 -0
  211. {sportsball-0.3.33 → sportsball-0.3.35}/tests/data/sportsreference/sportsreference_venue_model_test.py +0 -0
  212. {sportsball-0.3.33 → sportsball-0.3.35}/tests/data/team_model_test.py +0 -0
  213. {sportsball-0.3.33 → sportsball-0.3.35}/tests/data/x/__init__.py +0 -0
  214. {sportsball-0.3.33 → sportsball-0.3.35}/tests/data/x/x_social_model_test.py +0 -0
  215. {sportsball-0.3.33 → sportsball-0.3.35}/tests/proxy_session_test.py +0 -0
  216. {sportsball-0.3.33 → sportsball-0.3.35}/tests/sportsball_test.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: sportsball
3
- Version: 0.3.33
3
+ Version: 0.3.35
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.33',
29
+ version='0.3.35',
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.33"
3
+ __VERSION__ = "0.3.35"
@@ -0,0 +1,5 @@
1
+ """Caching utilities."""
2
+
3
+ from joblib import Memory # type: ignore
4
+
5
+ MEMORY = Memory(".sportsball_cache", verbose=0)
@@ -218,7 +218,7 @@ def _create_afl_afltables_game_model(
218
218
  ],
219
219
  end_dt=end_dt,
220
220
  attendance=attendance,
221
- league=league,
221
+ league=str(league),
222
222
  year=season_year,
223
223
  season_type=season_type,
224
224
  postponed=None,
@@ -22,6 +22,23 @@ from .afl_afltables_game_model import create_afl_afltables_game_model
22
22
  _SEASON_URL = "https://afltables.com/afl/seas/season_idx.html"
23
23
 
24
24
 
25
+ def _find_dt(td_text: str, season_url: str) -> datetime.datetime:
26
+ cleaned_text = (
27
+ td_text.split("Venue:")[0].split("Att:")[0].strip().split("(")[0].strip()
28
+ )
29
+ cleaned_text = " ".join(cleaned_text.split()[-3:])
30
+ try:
31
+ return parser.parse(cleaned_text)
32
+ except parser._parser.ParserError: # type: ignore
33
+ # Handle text like "Richmond  Thu 13-Mar-2025 Venue: M.C.G."
34
+ cleaned_text = cleaned_text.split()[-1]
35
+ try:
36
+ return parser.parse(cleaned_text)
37
+ except parser._parser.ParserError as exc: # type: ignore
38
+ logging.error("Failed to parse date in season URL: %s", season_url)
39
+ raise exc
40
+
41
+
25
42
  class AFLAFLTablesLeagueModel(LeagueModel):
26
43
  """AFL AFLTables implementation of the league model."""
27
44
 
@@ -60,21 +77,7 @@ class AFLAFLTablesLeagueModel(LeagueModel):
60
77
  for td in table.find_all("td"):
61
78
  td_text = td.get_text().strip()
62
79
  if "Venue:" in td_text:
63
- cleaned_text = (
64
- td_text.split("Venue:")[0]
65
- .split("Att:")[0]
66
- .strip()
67
- .split("(")[0]
68
- .strip()
69
- )
70
- cleaned_text = " ".join(cleaned_text.split()[-3:])
71
- try:
72
- current_dt = parser.parse(cleaned_text)
73
- except parser._parser.ParserError as exc: # type: ignore
74
- logging.error(
75
- "Failed to parse date in season URL: %s", season_url
76
- )
77
- raise exc
80
+ current_dt = _find_dt(td_text, season_url)
78
81
  for a in table.find_all("a", href=True):
79
82
  if a.get_text().strip().lower() == "match stats":
80
83
  url = urllib.parse.urljoin(season_url, a.get("href"))
@@ -138,6 +138,12 @@ BLACKTOWN = "blacktown"
138
138
  RIVERWAY = "riverway"
139
139
  NORWOOD = "norwood"
140
140
  SUMMIT = "summit"
141
+ ANGEL_STADIUM = "Angel Stadium of Anaheim"
142
+ THUNDERDOME_STADIUM = "Thunderdome Stadium"
143
+ SPOTLAND_STADIUM = "Spotland Stadium"
144
+ GIANTS_STADIUM = "Giants Stadium"
145
+ TIPOS_ARENA = "Ondrej Nepela Arena"
146
+ BAROSSA_PARK = "Barossa Park"
141
147
  AFL_VENUE_IDENTITY_MAP = {
142
148
  "brunswick_st": BRUNSWICK_ST,
143
149
  "victoria_park": VICTORIA_PARK,
@@ -189,6 +195,7 @@ AFL_VENUE_IDENTITY_MAP = {
189
195
  "riverway": RIVERWAY,
190
196
  "norwood": NORWOOD,
191
197
  "summit": SUMMIT,
198
+ # Aus Sports Betting
192
199
  "MCG": MCG,
193
200
  "SCG": SCG,
194
201
  "ENGIE Stadium": STADIUM_AUSTRALIA,
@@ -217,6 +224,21 @@ AFL_VENUE_IDENTITY_MAP = {
217
224
  "Blacktown Park": BLACKTOWN,
218
225
  # OddsPortal
219
226
  "Melbourne Cricket Ground": MCG,
227
+ "Angel Stadium of Anaheim": ANGEL_STADIUM,
228
+ "The Gabba": GABBA,
229
+ "Sydney Cricket Ground": SCG,
230
+ "Subiaco Oval": SUBIACO,
231
+ "Thunderdome Stadium": THUNDERDOME_STADIUM,
232
+ "University of Tasmania Stadium": YORK_PARK,
233
+ "Spotland Stadium": SPOTLAND_STADIUM,
234
+ "Engie Stadium": STADIUM_AUSTRALIA,
235
+ "Cazaly's Stadium": CAZALYS_STADIUM,
236
+ "Jiangwan Stadium": JIANGWAN,
237
+ "TIO Traeger Park": TRAEGER,
238
+ "Marrara Oval": MARRARA_OVAL,
239
+ "Giants Stadium": GIANTS_STADIUM,
240
+ "Ondrej Nepela Arena": TIPOS_ARENA,
241
+ "Barossa Park": BAROSSA_PARK,
220
242
  }
221
243
 
222
244
 
@@ -43,7 +43,7 @@ def _create_aussportsbetting_game_model(
43
43
  teams=[home_team_model, away_team_model], # pyright: ignore
44
44
  end_dt=None,
45
45
  attendance=None,
46
- league=league,
46
+ league=str(league),
47
47
  year=None,
48
48
  season_type=None,
49
49
  postponed=None,
@@ -112,7 +112,7 @@ def create_combined_game_model(
112
112
  teams=full_team_models,
113
113
  end_dt=end_dt,
114
114
  attendance=attendance,
115
- league=game_models[0].league,
115
+ league=str(game_models[0].league),
116
116
  year=year,
117
117
  season_type=season_type,
118
118
  postponed=postponed,
@@ -3,13 +3,11 @@
3
3
  # pylint: disable=raise-missing-from
4
4
  import logging
5
5
  import multiprocessing
6
- import traceback
7
- from multiprocessing import Pool
6
+ from concurrent.futures import ThreadPoolExecutor
8
7
  from typing import Any, Iterator
9
8
 
10
9
  import requests_cache
11
10
 
12
- from ...logger import setup_logger
13
11
  from ..game_model import GameModel
14
12
  from ..league import League
15
13
  from ..league_model import LeagueModel
@@ -17,13 +15,7 @@ from .combined_game_model import create_combined_game_model
17
15
 
18
16
 
19
17
  def _produce_league_games(league_model: LeagueModel) -> list[dict[str, Any]]:
20
- setup_logger()
21
- try:
22
- return [x.model_dump() for x in league_model.games]
23
- except Exception as exc:
24
- logging.error("Exception: %s", str(exc))
25
- logging.error(traceback.format_exc())
26
- raise ValueError(str(exc))
18
+ return [x.model_dump() for x in league_model.games]
27
19
 
28
20
 
29
21
  class CombinedLeagueModel(LeagueModel):
@@ -58,21 +50,18 @@ class CombinedLeagueModel(LeagueModel):
58
50
  team_identity_map = self.team_identity_map()
59
51
  for league_model in self._league_models:
60
52
  league_model.clear_session()
61
- with Pool(min(multiprocessing.cpu_count(), len(self._league_models))) as p:
53
+ with ThreadPoolExecutor(
54
+ min(multiprocessing.cpu_count(), len(self._league_models))
55
+ ) as p:
62
56
  # We want to terminate immediately if any of our runners runs into trouble.
63
- def _error_callback(exc: BaseException) -> None:
64
- p.terminate()
65
- raise ValueError(str(exc))
66
57
 
67
- results = [
68
- p.apply_async(
69
- _produce_league_games, args=(x,), error_callback=_error_callback
58
+ results = list(
59
+ p.map(
60
+ _produce_league_games,
61
+ self._league_models,
70
62
  )
71
- for x in self._league_models
72
- ]
73
- game_lists = [
74
- [GameModel.model_validate(y) for y in x.get()] for x in results
75
- ]
63
+ )
64
+ game_lists = [[GameModel.model_validate(y) for y in x] for x in results]
76
65
 
77
66
  for game_list in game_lists:
78
67
  for game_model in game_list:
@@ -140,7 +140,7 @@ def _create_espn_game_model(
140
140
  teams=teams,
141
141
  end_dt=end_dt,
142
142
  attendance=attendance,
143
- league=league,
143
+ league=str(league),
144
144
  year=year,
145
145
  season_type=season_type,
146
146
  postponed=None,
@@ -7,7 +7,6 @@ import pytz
7
7
  from pydantic import BaseModel, Field
8
8
 
9
9
  from .field_type import TYPE_KEY, FieldType
10
- from .league import League
11
10
  from .season_type import SeasonType
12
11
  from .team_model import TeamModel
13
12
  from .venue_model import VenueModel
@@ -54,7 +53,7 @@ class GameModel(BaseModel):
54
53
  ..., json_schema_extra={TYPE_KEY: FieldType.LOOKAHEAD}, alias=END_DT_COLUMN
55
54
  )
56
55
  attendance: int | None = Field(..., alias=GAME_ATTENDANCE_COLUMN)
57
- league: League = Field(..., alias=LEAGUE_COLUMN)
56
+ league: str = Field(..., alias=LEAGUE_COLUMN)
58
57
  year: int | None
59
58
  season_type: SeasonType | None
60
59
  postponed: bool | None = Field(