sportsball 0.3.26__tar.gz → 0.3.28__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.26/sportsball.egg-info → sportsball-0.3.28}/PKG-INFO +1 -1
  2. {sportsball-0.3.26 → sportsball-0.3.28}/setup.py +1 -1
  3. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/__init__.py +1 -1
  4. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/afl/afltables/afl_afltables_league_model.py +13 -4
  5. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/afl/aussportsbetting/afl_aussportsbetting_league_model.py +4 -2
  6. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/afl/combined/afl_combined_league_model.py +4 -4
  7. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/afl/espn/afl_espn_league_model.py +4 -2
  8. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/afl/oddsportal/afl_oddsportal_league_model.py +4 -2
  9. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/aussportsbetting/aussportsbetting_league_model.py +8 -3
  10. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/espn/espn_league_model.py +7 -3
  11. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/google/google_address_model.py +212 -63
  12. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/league_model.py +7 -1
  13. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/nba/combined/nba_combined_league_model.py +6 -4
  14. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/nba/espn/nba_espn_league_model.py +4 -2
  15. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/nba/nba/nba_nba_league_model.py +5 -3
  16. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/nba/oddsportal/nba_oddsportal_league_model.py +4 -2
  17. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/nba/sportsdb/nba_sportsdb_league_model.py +4 -2
  18. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/nba/sportsreference/nba_sportsreference_league_model.py +7 -2
  19. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/ncaab/combined/ncaab_combined_league_model.py +5 -2
  20. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/ncaab/espn/ncaab_espn_league_model.py +4 -2
  21. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/ncaab/oddsportal/ncaab_oddsportal_league_model.py +4 -2
  22. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/ncaab/sportsreference/ncaab_sportsreference_league_model.py +7 -2
  23. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/ncaaf/combined/ncaaf_combined_league_model.py +2 -2
  24. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/ncaaf/espn/ncaaf_espn_league_model.py +4 -2
  25. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/ncaaf/oddsportal/ncaaf_oddsportal_league_model.py +4 -2
  26. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/nfl/aussportsbetting/nfl_aussportsbetting_league_model.py +4 -2
  27. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/nfl/combined/nfl_combined_league_model.py +5 -3
  28. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/nfl/espn/nfl_espn_league_model.py +4 -2
  29. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/nfl/oddsportal/nfl_oddsportal_league_model.py +4 -2
  30. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/nfl/sportsdb/nfl_sportsdb_league_model.py +4 -2
  31. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/oddsportal/oddsportal_game_model.py +15 -5
  32. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/oddsportal/oddsportal_league_model.py +4 -3
  33. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/oddsportal/oddsportal_team_model.py +11 -4
  34. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/sportsdb/sportsdb_league_model.py +7 -3
  35. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/sportsreference/sportsreference_league_model.py +7 -3
  36. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/weather/openmeteo/openmeteo_weather_model.py +5 -1
  37. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/proxy_session.py +1 -1
  38. {sportsball-0.3.26 → sportsball-0.3.28/sportsball.egg-info}/PKG-INFO +1 -1
  39. {sportsball-0.3.26 → sportsball-0.3.28}/tests/data/oddsportal/oddsportal_game_model_test.py +18 -0
  40. {sportsball-0.3.26 → sportsball-0.3.28}/LICENSE +0 -0
  41. {sportsball-0.3.26 → sportsball-0.3.28}/MANIFEST.in +0 -0
  42. {sportsball-0.3.26 → sportsball-0.3.28}/README.md +0 -0
  43. {sportsball-0.3.26 → sportsball-0.3.28}/requirements.txt +0 -0
  44. {sportsball-0.3.26 → sportsball-0.3.28}/setup.cfg +0 -0
  45. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/__main__.py +0 -0
  46. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/args.py +0 -0
  47. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/cache.py +0 -0
  48. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/__init__.py +0 -0
  49. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/address_model.py +0 -0
  50. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/afl/__init__.py +0 -0
  51. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/afl/afltables/__init__.py +0 -0
  52. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/afl/afltables/afl_afltables_game_model.py +0 -0
  53. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/afl/afltables/afl_afltables_player_model.py +0 -0
  54. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/afl/afltables/afl_afltables_team_model.py +0 -0
  55. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/afl/afltables/afl_afltables_venue_model.py +0 -0
  56. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/afl/aussportsbetting/__init__.py +0 -0
  57. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/afl/combined/__init__.py +0 -0
  58. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/afl/espn/__init__.py +0 -0
  59. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/afl/oddsportal/__init__.py +0 -0
  60. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/aussportsbetting/__init__.py +0 -0
  61. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/aussportsbetting/aussportsbetting_bookie_model.py +0 -0
  62. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/aussportsbetting/aussportsbetting_game_model.py +0 -0
  63. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/aussportsbetting/aussportsbetting_odds_model.py +0 -0
  64. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/aussportsbetting/aussportsbetting_team_model.py +0 -0
  65. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/aussportsbetting/aussportsbetting_venue_model.py +0 -0
  66. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/bookie_model.py +0 -0
  67. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/combined/__init__.py +0 -0
  68. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/combined/combined_address_model.py +0 -0
  69. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/combined/combined_game_model.py +0 -0
  70. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/combined/combined_league_model.py +0 -0
  71. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/combined/combined_player_model.py +0 -0
  72. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/combined/combined_team_model.py +0 -0
  73. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/combined/combined_venue_model.py +0 -0
  74. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/combined/combined_weather_model.py +0 -0
  75. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/espn/__init__.py +0 -0
  76. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/espn/espn_bookie_model.py +0 -0
  77. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/espn/espn_game_model.py +0 -0
  78. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/espn/espn_odds_model.py +0 -0
  79. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/espn/espn_player_model.py +0 -0
  80. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/espn/espn_team_model.py +0 -0
  81. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/espn/espn_venue_model.py +0 -0
  82. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/field_type.py +0 -0
  83. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/game_model.py +0 -0
  84. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/google/__init__.py +0 -0
  85. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/google/google_news_model.py +0 -0
  86. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/league.py +0 -0
  87. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/model.py +0 -0
  88. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/nba/__init__.py +0 -0
  89. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/nba/combined/__init__.py +0 -0
  90. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/nba/espn/__init__.py +0 -0
  91. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/nba/nba/__init__.py +0 -0
  92. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/nba/nba/nba_nba_game_model.py +0 -0
  93. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/nba/nba/nba_nba_player_model.py +0 -0
  94. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/nba/nba/nba_nba_team_model.py +0 -0
  95. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/nba/oddsportal/__init__.py +0 -0
  96. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/nba/sportsdb/__init__.py +0 -0
  97. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/nba/sportsreference/__init__.py +0 -0
  98. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/ncaab/__init__.py +0 -0
  99. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/ncaab/combined/__init__.py +0 -0
  100. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/ncaab/espn/__init__.py +0 -0
  101. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/ncaab/oddsportal/__init__.py +0 -0
  102. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/ncaab/sportsreference/__init__.py +0 -0
  103. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/ncaaf/__init__.py +0 -0
  104. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/ncaaf/combined/__init__.py +0 -0
  105. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/ncaaf/espn/__init__.py +0 -0
  106. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/ncaaf/oddsportal/__init__.py +0 -0
  107. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/news_model.py +0 -0
  108. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/nfl/__init__.py +0 -0
  109. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/nfl/aussportsbetting/__init__.py +0 -0
  110. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/nfl/combined/__init__.py +0 -0
  111. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/nfl/espn/__init__.py +0 -0
  112. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/nfl/oddsportal/__init__.py +0 -0
  113. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/nfl/sportsdb/__init__.py +0 -0
  114. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/odds_model.py +0 -0
  115. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/oddsportal/__init__.py +0 -0
  116. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/oddsportal/oddsportal_bookie_model.py +0 -0
  117. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/oddsportal/oddsportal_odds_model.py +0 -0
  118. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/oddsportal/oddsportal_venue_model.py +0 -0
  119. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/player_model.py +0 -0
  120. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/season_type.py +0 -0
  121. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/social_model.py +0 -0
  122. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/sportsdb/__init__.py +0 -0
  123. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/sportsdb/sportsdb_game_model.py +0 -0
  124. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/sportsdb/sportsdb_team_model.py +0 -0
  125. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/sportsdb/sportsdb_venue_model.py +0 -0
  126. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/sportsreference/__init__.py +0 -0
  127. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/sportsreference/sportsreference_game_model.py +0 -0
  128. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/sportsreference/sportsreference_player_model.py +0 -0
  129. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/sportsreference/sportsreference_team_model.py +0 -0
  130. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/sportsreference/sportsreference_venue_model.py +0 -0
  131. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/team_model.py +0 -0
  132. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/venue_model.py +0 -0
  133. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/weather/__init__.py +0 -0
  134. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/weather/gribstream/__init__.py +0 -0
  135. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/weather/gribstream/gribstream_weather_model.py +0 -0
  136. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/weather/multi_weather_model.py +0 -0
  137. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/weather/openmeteo/__init__.py +0 -0
  138. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/weather_model.py +0 -0
  139. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/wikipedia/__init__.py +0 -0
  140. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/wikipedia/wikipedia_venue_model.py +0 -0
  141. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/x/__init__.py +0 -0
  142. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/data/x/x_social_model.py +0 -0
  143. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/logger.py +0 -0
  144. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/loglevel.py +0 -0
  145. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/session.py +0 -0
  146. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/sportsball.py +0 -0
  147. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/vendor/__init__.py +0 -0
  148. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball/vendor/pygooglenews/__init__.py +0 -0
  149. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball.egg-info/SOURCES.txt +0 -0
  150. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball.egg-info/dependency_links.txt +0 -0
  151. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball.egg-info/entry_points.txt +0 -0
  152. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball.egg-info/not-zip-safe +0 -0
  153. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball.egg-info/requires.txt +0 -0
  154. {sportsball-0.3.26 → sportsball-0.3.28}/sportsball.egg-info/top_level.txt +0 -0
  155. {sportsball-0.3.26 → sportsball-0.3.28}/tests/__init__.py +0 -0
  156. {sportsball-0.3.26 → sportsball-0.3.28}/tests/data/__init__.py +0 -0
  157. {sportsball-0.3.26 → sportsball-0.3.28}/tests/data/afl/__init__.py +0 -0
  158. {sportsball-0.3.26 → sportsball-0.3.28}/tests/data/afl/afltables/__init__.py +0 -0
  159. {sportsball-0.3.26 → sportsball-0.3.28}/tests/data/afl/afltables/afl_afltables_league_model_test.py +0 -0
  160. {sportsball-0.3.26 → sportsball-0.3.28}/tests/data/afl/afltables/afl_afltables_player_model_test.py +0 -0
  161. {sportsball-0.3.26 → sportsball-0.3.28}/tests/data/aussportsbetting/__init__.py +0 -0
  162. {sportsball-0.3.26 → sportsball-0.3.28}/tests/data/aussportsbetting/aussportsbetting_game_model_test.py +0 -0
  163. {sportsball-0.3.26 → sportsball-0.3.28}/tests/data/combined/__init__.py +0 -0
  164. {sportsball-0.3.26 → sportsball-0.3.28}/tests/data/combined/combined_game_model_test.py +0 -0
  165. {sportsball-0.3.26 → sportsball-0.3.28}/tests/data/combined/combined_player_model_test.py +0 -0
  166. {sportsball-0.3.26 → sportsball-0.3.28}/tests/data/espn/__init__.py +0 -0
  167. {sportsball-0.3.26 → sportsball-0.3.28}/tests/data/espn/espn_game_model_test.py +0 -0
  168. {sportsball-0.3.26 → sportsball-0.3.28}/tests/data/espn/espn_player_model_test.py +0 -0
  169. {sportsball-0.3.26 → sportsball-0.3.28}/tests/data/game_model_test.py +0 -0
  170. {sportsball-0.3.26 → sportsball-0.3.28}/tests/data/google/__init__.py +0 -0
  171. {sportsball-0.3.26 → sportsball-0.3.28}/tests/data/google/google_address_model_test.py +0 -0
  172. {sportsball-0.3.26 → sportsball-0.3.28}/tests/data/google/google_news_model_test.py +0 -0
  173. {sportsball-0.3.26 → sportsball-0.3.28}/tests/data/nba/__init__.py +0 -0
  174. {sportsball-0.3.26 → sportsball-0.3.28}/tests/data/nba/nba/__init__.py +0 -0
  175. {sportsball-0.3.26 → sportsball-0.3.28}/tests/data/nba/nba/nba_nba_game_model_test.py +0 -0
  176. {sportsball-0.3.26 → sportsball-0.3.28}/tests/data/nba/nba/nba_nba_league_model_test.py +0 -0
  177. {sportsball-0.3.26 → sportsball-0.3.28}/tests/data/nba/nba/nba_nba_player_model_test.py +0 -0
  178. {sportsball-0.3.26 → sportsball-0.3.28}/tests/data/nba/nba/nba_nba_team_model_test.py +0 -0
  179. {sportsball-0.3.26 → sportsball-0.3.28}/tests/data/nba/sportsdb/__init__.py +0 -0
  180. {sportsball-0.3.26 → sportsball-0.3.28}/tests/data/nba/sportsdb/nba_sportsdb_league_model_test.py +0 -0
  181. {sportsball-0.3.26 → sportsball-0.3.28}/tests/data/nba/sportsreference/__init__.py +0 -0
  182. {sportsball-0.3.26 → sportsball-0.3.28}/tests/data/nba/sportsreference/nba_sportsreference_league_model_test.py +0 -0
  183. {sportsball-0.3.26 → sportsball-0.3.28}/tests/data/ncaab/__init__.py +0 -0
  184. {sportsball-0.3.26 → sportsball-0.3.28}/tests/data/ncaab/sportsreference/__init__.py +0 -0
  185. {sportsball-0.3.26 → sportsball-0.3.28}/tests/data/ncaab/sportsreference/ncaab_sportsreference_league_model_test.py +0 -0
  186. {sportsball-0.3.26 → sportsball-0.3.28}/tests/data/nfl/__init__.py +0 -0
  187. {sportsball-0.3.26 → sportsball-0.3.28}/tests/data/nfl/sportsdb/__init__.py +0 -0
  188. {sportsball-0.3.26 → sportsball-0.3.28}/tests/data/nfl/sportsdb/nfl_sportsdb_league_model_test.py +0 -0
  189. {sportsball-0.3.26 → sportsball-0.3.28}/tests/data/oddsportal/__init__.py +0 -0
  190. {sportsball-0.3.26 → sportsball-0.3.28}/tests/data/player_model_test.py +0 -0
  191. {sportsball-0.3.26 → sportsball-0.3.28}/tests/data/social_model_test.py +0 -0
  192. {sportsball-0.3.26 → sportsball-0.3.28}/tests/data/sportsdb/__init__.py +0 -0
  193. {sportsball-0.3.26 → sportsball-0.3.28}/tests/data/sportsdb/sportsdb_game_model_test.py +0 -0
  194. {sportsball-0.3.26 → sportsball-0.3.28}/tests/data/sportsdb/sportsdb_league_model_test.py +0 -0
  195. {sportsball-0.3.26 → sportsball-0.3.28}/tests/data/sportsdb/sportsdb_team_model_test.py +0 -0
  196. {sportsball-0.3.26 → sportsball-0.3.28}/tests/data/sportsdb/sportsdb_venue_model_test.py +0 -0
  197. {sportsball-0.3.26 → sportsball-0.3.28}/tests/data/sportsreference/__init__.py +0 -0
  198. {sportsball-0.3.26 → sportsball-0.3.28}/tests/data/sportsreference/sportsreference_game_model_test.py +0 -0
  199. {sportsball-0.3.26 → sportsball-0.3.28}/tests/data/sportsreference/sportsreference_league_model_test.py +0 -0
  200. {sportsball-0.3.26 → sportsball-0.3.28}/tests/data/sportsreference/sportsreference_player_model_test.py +0 -0
  201. {sportsball-0.3.26 → sportsball-0.3.28}/tests/data/sportsreference/sportsreference_team_model_test.py +0 -0
  202. {sportsball-0.3.26 → sportsball-0.3.28}/tests/data/sportsreference/sportsreference_venue_model_test.py +0 -0
  203. {sportsball-0.3.26 → sportsball-0.3.28}/tests/data/team_model_test.py +0 -0
  204. {sportsball-0.3.26 → sportsball-0.3.28}/tests/data/x/__init__.py +0 -0
  205. {sportsball-0.3.26 → sportsball-0.3.28}/tests/data/x/x_social_model_test.py +0 -0
  206. {sportsball-0.3.26 → sportsball-0.3.28}/tests/proxy_session_test.py +0 -0
  207. {sportsball-0.3.26 → sportsball-0.3.28}/tests/sportsball_test.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: sportsball
3
- Version: 0.3.26
3
+ Version: 0.3.28
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.26',
29
+ version='0.3.28',
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.26"
3
+ __VERSION__ = "0.3.28"
@@ -1,7 +1,8 @@
1
1
  """AFL AFLTables league model."""
2
2
 
3
- # pylint: disable=too-many-statements
3
+ # pylint: disable=too-many-statements,protected-access
4
4
  import datetime
5
+ import logging
5
6
  import os
6
7
  import urllib.parse
7
8
  from typing import Iterator
@@ -24,7 +25,9 @@ _SEASON_URL = "https://afltables.com/afl/seas/season_idx.html"
24
25
  class AFLAFLTablesLeagueModel(LeagueModel):
25
26
  """AFL AFLTables implementation of the league model."""
26
27
 
27
- def __init__(self, session: requests_cache.CachedSession) -> None:
28
+ def __init__(
29
+ self, session: requests_cache.CachedSession, position: int | None = None
30
+ ) -> None:
28
31
  super().__init__(League.AFL, session)
29
32
 
30
33
  def _produce_games(
@@ -59,7 +62,13 @@ class AFLAFLTablesLeagueModel(LeagueModel):
59
62
  if "Venue:" in td_text:
60
63
  cleaned_text = td_text.split("Venue:")[0].split("Att:")[0].strip()
61
64
  cleaned_text = " ".join(cleaned_text.split()[-3:])
62
- current_dt = parser.parse(cleaned_text)
65
+ try:
66
+ current_dt = parser.parse(cleaned_text)
67
+ except parser._parser.ParserError as exc: # type: ignore
68
+ logging.error(
69
+ "Failed to parse date in season URL: %s", season_url
70
+ )
71
+ raise exc
63
72
  for a in table.find_all("a", href=True):
64
73
  if a.get_text().strip().lower() == "match stats":
65
74
  url = urllib.parse.urljoin(season_url, a.get("href"))
@@ -132,7 +141,7 @@ class AFLAFLTablesLeagueModel(LeagueModel):
132
141
  def games(self) -> Iterator[GameModel]:
133
142
  response = self.session.get(_SEASON_URL)
134
143
  soup = BeautifulSoup(response.text, "html.parser")
135
- with tqdm.tqdm() as pbar:
144
+ with tqdm.tqdm(position=self.position) as pbar:
136
145
  for table in soup.find_all("table"):
137
146
  for tr in table.find_all("tr"):
138
147
  for td in tr.find_all("td"):
@@ -10,5 +10,7 @@ from ...league import League
10
10
  class AFLAusSportsBettingLeagueModel(AusSportsBettingLeagueModel):
11
11
  """AFL AusSportsBetting implementation of the league model."""
12
12
 
13
- def __init__(self, session: requests_cache.CachedSession) -> None:
14
- super().__init__(League.AFL, session)
13
+ def __init__(
14
+ self, session: requests_cache.CachedSession, position: int | None = None
15
+ ) -> None:
16
+ super().__init__(League.AFL, session, position=position)
@@ -210,10 +210,10 @@ class AFLCombinedLeagueModel(CombinedLeagueModel):
210
210
  session,
211
211
  League.AFL,
212
212
  [
213
- AFLAFLTablesLeagueModel(session),
214
- AFLESPNLeagueModel(session),
215
- AFLAusSportsBettingLeagueModel(session),
216
- AFLOddsPortalLeagueModel(session),
213
+ AFLAFLTablesLeagueModel(session, position=0),
214
+ AFLESPNLeagueModel(session, position=1),
215
+ AFLAusSportsBettingLeagueModel(session, position=2),
216
+ AFLOddsPortalLeagueModel(session, position=3),
217
217
  ],
218
218
  )
219
219
 
@@ -13,5 +13,7 @@ _SEASON_URL = "https://sports.core.api.espn.com/v2/sports/australian-football/le
13
13
  class AFLESPNLeagueModel(ESPNLeagueModel):
14
14
  """AFL ESPN implementation of the league model."""
15
15
 
16
- def __init__(self, session: requests_cache.CachedSession) -> None:
17
- super().__init__(_SEASON_URL, League.AFL, session)
16
+ def __init__(
17
+ self, session: requests_cache.CachedSession, position: int | None = None
18
+ ) -> None:
19
+ super().__init__(_SEASON_URL, League.AFL, session, position=position)
@@ -11,5 +11,7 @@ from ...oddsportal.oddsportal_league_model import OddsPortalLeagueModel
11
11
  class AFLOddsPortalLeagueModel(OddsPortalLeagueModel):
12
12
  """AFL OddsPortal implementation of the league model."""
13
13
 
14
- def __init__(self, session: requests_cache.CachedSession) -> None:
15
- super().__init__(League.AFL, session)
14
+ def __init__(
15
+ self, session: requests_cache.CachedSession, position: int | None = None
16
+ ) -> None:
17
+ super().__init__(League.AFL, session, position=position)
@@ -18,8 +18,13 @@ from .aussportsbetting_game_model import create_aussportsbetting_game_model
18
18
  class AusSportsBettingLeagueModel(LeagueModel):
19
19
  """AusSportsBetting implementation of the league model."""
20
20
 
21
- def __init__(self, league: League, session: requests_cache.CachedSession) -> None:
22
- super().__init__(league, session)
21
+ def __init__(
22
+ self,
23
+ league: League,
24
+ session: requests_cache.CachedSession,
25
+ position: int | None = None,
26
+ ) -> None:
27
+ super().__init__(league, session, position=position)
23
28
  match league:
24
29
  case League.AFL:
25
30
  self._spreadsheet_url = (
@@ -96,7 +101,7 @@ class AusSportsBettingLeagueModel(LeagueModel):
96
101
  ws = workbook.active
97
102
  if ws is None:
98
103
  raise ValueError("ws is null.")
99
- with tqdm.tqdm() as pbar:
104
+ with tqdm.tqdm(position=self.position) as pbar:
100
105
  for row in ws.iter_rows():
101
106
  game_model = self._row_to_game(row)
102
107
  if game_model is not None:
@@ -29,9 +29,13 @@ class ESPNLeagueModel(LeagueModel):
29
29
  """ESPN implementation of the league model."""
30
30
 
31
31
  def __init__(
32
- self, start_url: str, league: League, session: requests_cache.CachedSession
32
+ self,
33
+ start_url: str,
34
+ league: League,
35
+ session: requests_cache.CachedSession,
36
+ position: int | None = None,
33
37
  ) -> None:
34
- super().__init__(league, session)
38
+ super().__init__(league, session, position=position)
35
39
  self._start_url = start_url
36
40
 
37
41
  def _produce_games(
@@ -138,7 +142,7 @@ class ESPNLeagueModel(LeagueModel):
138
142
  @property
139
143
  def games(self) -> Iterator[GameModel]:
140
144
  page = 1
141
- with tqdm.tqdm() as pbar:
145
+ with tqdm.tqdm(position=self.position) as pbar:
142
146
  while True:
143
147
  if page == 1:
144
148
  with self.session.cache_disabled():
@@ -1378,6 +1378,69 @@ BOGOTA_SAVINGS_BANK_CENTER = SportsballGeocodeTuple(
1378
1378
  housenumber="",
1379
1379
  country="USA",
1380
1380
  )
1381
+ CORBETT_SPORTS_CENTER = SportsballGeocodeTuple(
1382
+ city="Greensboro",
1383
+ state="NC",
1384
+ postal="27411",
1385
+ lat=36.076783,
1386
+ lng=-79.768849,
1387
+ housenumber="1601",
1388
+ country="USA",
1389
+ )
1390
+ EA_DIDDLE_ARENA = SportsballGeocodeTuple(
1391
+ city="Bowling Green",
1392
+ state="KY",
1393
+ postal="42101",
1394
+ lat=36.985833,
1395
+ lng=-86.4575,
1396
+ housenumber="1526",
1397
+ country="USA",
1398
+ )
1399
+ JMA_WIRELESS_DOME = SportsballGeocodeTuple(
1400
+ city="Syracuse",
1401
+ state="NY",
1402
+ postal="13244",
1403
+ lat=43.036111,
1404
+ lng=-76.136389,
1405
+ housenumber="900",
1406
+ country="USA",
1407
+ )
1408
+ AG_SPANOS_CENTER = SportsballGeocodeTuple(
1409
+ city="Stockton",
1410
+ state="CA",
1411
+ postal="95211",
1412
+ lat=37.976669,
1413
+ lng=-121.315095,
1414
+ housenumber="1178",
1415
+ country="USA",
1416
+ )
1417
+ WAR_MEMORIAL_GYMNASIUM = SportsballGeocodeTuple(
1418
+ city="San Francisco",
1419
+ state="CA",
1420
+ postal="94118",
1421
+ lat=37.776944,
1422
+ lng=-122.449444,
1423
+ housenumber="2335",
1424
+ country="USA",
1425
+ )
1426
+ HENDERSON_CENTER = SportsballGeocodeTuple(
1427
+ city="Huntington",
1428
+ state="WV",
1429
+ postal="25755",
1430
+ lat=38.424517,
1431
+ lng=-82.425211,
1432
+ housenumber="",
1433
+ country="USA",
1434
+ )
1435
+ TED_CONSTANT_CONVOCATION_CENTER = SportsballGeocodeTuple(
1436
+ city="Norfolk",
1437
+ state="VA",
1438
+ postal="",
1439
+ lat=36.884169,
1440
+ lng=-76.301231,
1441
+ housenumber="4320",
1442
+ country="USA",
1443
+ )
1381
1444
  _CACHED_GEOCODES: dict[str, Any] = {
1382
1445
  "S.C.G. - Australia": SCG,
1383
1446
  "Victoria Park - Australia": SportsballGeocodeTuple(
@@ -2297,15 +2360,7 @@ _CACHED_GEOCODES: dict[str, Any] = {
2297
2360
  housenumber="1972",
2298
2361
  country="USA",
2299
2362
  ),
2300
- "JMA Wireless Dome - Syracuse - NY - 13244": SportsballGeocodeTuple(
2301
- city="Syracuse",
2302
- state="NY",
2303
- postal="13244",
2304
- lat=43.036111,
2305
- lng=-76.136389,
2306
- housenumber="900",
2307
- country="USA",
2308
- ),
2363
+ "JMA Wireless Dome - Syracuse - NY - 13244": JMA_WIRELESS_DOME,
2309
2364
  "Davis Wade Stadium - Starkville - MS - 39762": SportsballGeocodeTuple(
2310
2365
  city="Starkville",
2311
2366
  state="MS",
@@ -3465,15 +3520,7 @@ _CACHED_GEOCODES: dict[str, Any] = {
3465
3520
  housenumber="1000",
3466
3521
  country="USA",
3467
3522
  ),
3468
- "Ted Constant Convocation Ctr., Norfolk, Virginia": SportsballGeocodeTuple(
3469
- city="Norfolk",
3470
- state="VA",
3471
- postal="",
3472
- lat=36.884169,
3473
- lng=-76.301231,
3474
- housenumber="4320",
3475
- country="USA",
3476
- ),
3523
+ "Ted Constant Convocation Ctr., Norfolk, Virginia": TED_CONSTANT_CONVOCATION_CENTER,
3477
3524
  "Yanitelli Center, Jersey City, New Jersey": SportsballGeocodeTuple(
3478
3525
  city="Jersey City",
3479
3526
  state="NJ",
@@ -3657,15 +3704,7 @@ _CACHED_GEOCODES: dict[str, Any] = {
3657
3704
  housenumber="111",
3658
3705
  country="USA",
3659
3706
  ),
3660
- "Ellis Corbett Sports Center, Greensboro, North Carolina": SportsballGeocodeTuple(
3661
- city="Greensboro",
3662
- state="NC",
3663
- postal="27411",
3664
- lat=36.076783,
3665
- lng=-79.768849,
3666
- housenumber="1601",
3667
- country="USA",
3668
- ),
3707
+ "Ellis Corbett Sports Center, Greensboro, North Carolina": CORBETT_SPORTS_CENTER,
3669
3708
  "Trask Coliseum, Wilmington, North Carolina": SportsballGeocodeTuple(
3670
3709
  city="Wilmington",
3671
3710
  state="NC",
@@ -4950,15 +4989,7 @@ _CACHED_GEOCODES: dict[str, Any] = {
4950
4989
  housenumber="18",
4951
4990
  country="USA",
4952
4991
  ),
4953
- "Henderson Center, Huntington, West Virginia": SportsballGeocodeTuple(
4954
- city="Huntington",
4955
- state="WV",
4956
- postal="25755",
4957
- lat=38.424517,
4958
- lng=-82.425211,
4959
- housenumber="",
4960
- country="USA",
4961
- ),
4992
+ "Henderson Center, Huntington, West Virginia": HENDERSON_CENTER,
4962
4993
  "Costello Athletic Center, Lowell, Massachusetts": SportsballGeocodeTuple(
4963
4994
  city="Lowell",
4964
4995
  state="MA",
@@ -5094,15 +5125,7 @@ _CACHED_GEOCODES: dict[str, Any] = {
5094
5125
  housenumber="1",
5095
5126
  country="USA",
5096
5127
  ),
5097
- "E.A. Diddle Arena, Bowling Green, Kentucky": SportsballGeocodeTuple(
5098
- city="Bowling Green",
5099
- state="KY",
5100
- postal="42101",
5101
- lat=36.985833,
5102
- lng=-86.4575,
5103
- housenumber="1526",
5104
- country="USA",
5105
- ),
5128
+ "E.A. Diddle Arena, Bowling Green, Kentucky": EA_DIDDLE_ARENA,
5106
5129
  "Don Haskins Center, El Paso, Texas": SportsballGeocodeTuple(
5107
5130
  city="El Paso",
5108
5131
  state="TX",
@@ -5130,15 +5153,7 @@ _CACHED_GEOCODES: dict[str, Any] = {
5130
5153
  housenumber="1",
5131
5154
  country="USA",
5132
5155
  ),
5133
- "A.G. Spanos Center, Stockton, California": SportsballGeocodeTuple(
5134
- city="Stockton",
5135
- state="CA",
5136
- postal="95211",
5137
- lat=37.976669,
5138
- lng=-121.315095,
5139
- housenumber="1178",
5140
- country="USA",
5141
- ),
5156
+ "A.G. Spanos Center, Stockton, California": AG_SPANOS_CENTER,
5142
5157
  "Leavey Center, Santa Clara, California": SportsballGeocodeTuple(
5143
5158
  city="Santa Clara",
5144
5159
  state="CA",
@@ -5684,15 +5699,7 @@ _CACHED_GEOCODES: dict[str, Any] = {
5684
5699
  country="USA",
5685
5700
  ),
5686
5701
  "John F. Savage Hall, Toledo, Ohio": SAVAGE_ARENA,
5687
- "War Memorial at The Sobrato Center, San Francisco, California": SportsballGeocodeTuple(
5688
- city="San Francisco",
5689
- state="CA",
5690
- postal="94118",
5691
- lat=37.776944,
5692
- lng=-122.449444,
5693
- housenumber="2335",
5694
- country="USA",
5695
- ),
5702
+ "War Memorial at The Sobrato Center, San Francisco, California": WAR_MEMORIAL_GYMNASIUM,
5696
5703
  "The Jungle, Indianapolis, Indiana": SportsballGeocodeTuple(
5697
5704
  city="Indianapolis",
5698
5705
  state="IN",
@@ -7676,6 +7683,148 @@ _CACHED_GEOCODES: dict[str, Any] = {
7676
7683
  ),
7677
7684
  "Gersten Pavilion, Los Angeles, California": GERSTEN_PAVILION,
7678
7685
  "Rothman Center, Teaneck, New Jersey": BOGOTA_SAVINGS_BANK_CENTER,
7686
+ "Corbett Sports Center, Greensboro, North Carolina": CORBETT_SPORTS_CENTER,
7687
+ "Easton, Massachusetts": SportsballGeocodeTuple(
7688
+ city="Easton",
7689
+ state="MA",
7690
+ postal="",
7691
+ lat=42.024444,
7692
+ lng=-71.129167,
7693
+ housenumber="",
7694
+ country="USA",
7695
+ ),
7696
+ "University Credit Union Center, Davis, California": SportsballGeocodeTuple(
7697
+ city="Davis",
7698
+ state="CA",
7699
+ postal="95616",
7700
+ lat=38.541667,
7701
+ lng=-121.759444,
7702
+ housenumber="1",
7703
+ country="USA",
7704
+ ),
7705
+ "Buccaneer Field House, Charleston, South Carolina": SportsballGeocodeTuple(
7706
+ city="Charleston",
7707
+ state="SC",
7708
+ postal="29406",
7709
+ lat=32.980822,
7710
+ lng=-80.067125,
7711
+ housenumber="9200",
7712
+ country="USA",
7713
+ ),
7714
+ "Credit Union 1 Arena, Chicago, Illinois": SportsballGeocodeTuple(
7715
+ city="Chicago",
7716
+ state="IL",
7717
+ postal="60607",
7718
+ lat=41.874722,
7719
+ lng=-87.656111,
7720
+ housenumber="525",
7721
+ country="USA",
7722
+ ),
7723
+ "E. A. Diddle Arena, Bowling Green, Kentucky": EA_DIDDLE_ARENA,
7724
+ "JMA Wireless Dome, Syracuse, New York": JMA_WIRELESS_DOME,
7725
+ "Truist Arena, Highland Heights, Kentucky": SportsballGeocodeTuple(
7726
+ city="Highland Heights",
7727
+ state="KT",
7728
+ postal="41099",
7729
+ lat=39.032273,
7730
+ lng=-84.458864,
7731
+ housenumber="500",
7732
+ country="USA",
7733
+ ),
7734
+ "Kress Events Center, Green Bay, Wisconsin": SportsballGeocodeTuple(
7735
+ city="Green Bay",
7736
+ state="WI",
7737
+ postal="",
7738
+ lat=44.530069,
7739
+ lng=-87.915967,
7740
+ housenumber="",
7741
+ country="USA",
7742
+ ),
7743
+ "OceanFirst Bank Center, West Long Branch, New Jersey": SportsballGeocodeTuple(
7744
+ city="West Long Branch",
7745
+ state="NJ",
7746
+ postal="07764",
7747
+ lat=40.279475,
7748
+ lng=-74.007583,
7749
+ housenumber="400",
7750
+ country="USA",
7751
+ ),
7752
+ "Alex G. Spanos Center, Stockton, California": AG_SPANOS_CENTER,
7753
+ "War Memorial Gymnasium, San Francisco, California": WAR_MEMORIAL_GYMNASIUM,
7754
+ "First National Bank Arena, Jonesboro, Arkansas": SportsballGeocodeTuple(
7755
+ city="Jonesboro",
7756
+ state="AR",
7757
+ postal="72401",
7758
+ lat=35.845422,
7759
+ lng=-90.670319,
7760
+ housenumber="217",
7761
+ country="USA",
7762
+ ),
7763
+ "Frost Arena, Brookings, South Dakota": SportsballGeocodeTuple(
7764
+ city="Brookings",
7765
+ state="SD",
7766
+ postal="57007",
7767
+ lat=44.317984,
7768
+ lng=-96.779058,
7769
+ housenumber="1165",
7770
+ country="USA",
7771
+ ),
7772
+ "Louisville, Kentucky": SportsballGeocodeTuple(
7773
+ city="Louisville",
7774
+ state="KT",
7775
+ postal="",
7776
+ lat=38.256111,
7777
+ lng=-85.751389,
7778
+ housenumber="",
7779
+ country="USA",
7780
+ ),
7781
+ "Saint Charles, Missouri": SportsballGeocodeTuple(
7782
+ city="Saint Charles",
7783
+ state="MO",
7784
+ postal="",
7785
+ lat=38.789,
7786
+ lng=-90.514,
7787
+ housenumber="",
7788
+ country="USA",
7789
+ ),
7790
+ "Cam Henderson Center, Huntington, West Virginia": HENDERSON_CENTER,
7791
+ "Ted Constant Convocaation Center, Norfolk, Virginia": TED_CONSTANT_CONVOCATION_CENTER,
7792
+ "Brooklyn, New York": SportsballGeocodeTuple(
7793
+ city="Brooklyn",
7794
+ state="NY",
7795
+ postal="",
7796
+ lat=40.65,
7797
+ lng=-73.95,
7798
+ housenumber="",
7799
+ country="USA",
7800
+ ),
7801
+ "Chicago, Illinois": SportsballGeocodeTuple(
7802
+ city="Chicago",
7803
+ state="IL",
7804
+ postal="",
7805
+ lat=41.881944,
7806
+ lng=-87.627778,
7807
+ housenumber="",
7808
+ country="USA",
7809
+ ),
7810
+ "Alabama A&M Events Center, Huntsville, Alabama": SportsballGeocodeTuple(
7811
+ city="Huntsville",
7812
+ state="AL",
7813
+ postal="35810",
7814
+ lat=34.781139,
7815
+ lng=-86.580528,
7816
+ housenumber="",
7817
+ country="USA",
7818
+ ),
7819
+ "Vadalabene Center, Edwardsville, Illinois": SportsballGeocodeTuple(
7820
+ city="Edwardsville",
7821
+ state="IL",
7822
+ postal="",
7823
+ lat=38.795989,
7824
+ lng=-89.999883,
7825
+ housenumber="35",
7826
+ country="USA",
7827
+ ),
7679
7828
  }
7680
7829
 
7681
7830
 
@@ -32,10 +32,16 @@ class LeagueModel(Model):
32
32
 
33
33
  _df: pd.DataFrame | None
34
34
 
35
- def __init__(self, league: League, session: requests_cache.CachedSession) -> None:
35
+ def __init__(
36
+ self,
37
+ league: League,
38
+ session: requests_cache.CachedSession,
39
+ position: int | None = None,
40
+ ) -> None:
36
41
  super().__init__(session)
37
42
  self._league = league
38
43
  self._df = None
44
+ self.position = position
39
45
 
40
46
  @property
41
47
  def games(self) -> Iterator[GameModel]:
@@ -6,6 +6,7 @@ from ...combined.combined_league_model import CombinedLeagueModel
6
6
  from ...league import League
7
7
  from ..espn.nba_espn_league_model import NBAESPNLeagueModel
8
8
  from ..nba.nba_nba_league_model import NBANBALeagueModel
9
+ from ..oddsportal.nba_oddsportal_league_model import NBAOddsPortalLeagueModel
9
10
  from ..sportsdb.nba_sportsdb_league_model import NBASportsDBLeagueModel
10
11
  from ..sportsreference.nba_sportsreference_league_model import \
11
12
  NBASportsReferenceLeagueModel
@@ -232,10 +233,11 @@ class NBACombinedLeagueModel(CombinedLeagueModel):
232
233
  session,
233
234
  League.NBA,
234
235
  [
235
- NBANBALeagueModel(session),
236
- NBAESPNLeagueModel(session),
237
- NBASportsDBLeagueModel(session),
238
- NBASportsReferenceLeagueModel(session),
236
+ NBANBALeagueModel(session, position=0),
237
+ NBAESPNLeagueModel(session, position=1),
238
+ NBASportsDBLeagueModel(session, position=2),
239
+ NBASportsReferenceLeagueModel(session, position=3),
240
+ NBAOddsPortalLeagueModel(session, position=4),
239
241
  ],
240
242
  )
241
243
 
@@ -13,5 +13,7 @@ _SEASON_URL = (
13
13
  class NBAESPNLeagueModel(ESPNLeagueModel):
14
14
  """NBA ESPN implementation of the league model."""
15
15
 
16
- def __init__(self, session: requests_cache.CachedSession) -> None:
17
- super().__init__(_SEASON_URL, League.NBA, session)
16
+ def __init__(
17
+ self, session: requests_cache.CachedSession, position: int | None = None
18
+ ) -> None:
19
+ super().__init__(_SEASON_URL, League.NBA, session, position=position)
@@ -67,8 +67,10 @@ class NBANBALeagueModel(LeagueModel):
67
67
  start: datetime.datetime
68
68
  games: int
69
69
 
70
- def __init__(self, session: requests_cache.CachedSession) -> None:
71
- super().__init__(League.NBA, session)
70
+ def __init__(
71
+ self, session: requests_cache.CachedSession, position: int | None = None
72
+ ) -> None:
73
+ super().__init__(League.NBA, session, position=position)
72
74
  self._league_id = "00"
73
75
  NBAHTTP.set_session(session)
74
76
 
@@ -111,7 +113,7 @@ class NBANBALeagueModel(LeagueModel):
111
113
  to_date = datetime.datetime.today().date()
112
114
  seasons: dict[str, NBANBALeagueModel._SeasonInfo] = {}
113
115
  first_call = False
114
- with tqdm.tqdm() as pbar:
116
+ with tqdm.tqdm(position=self.position) as pbar:
115
117
  while True:
116
118
  next_date = to_date - relativedelta(years=1)
117
119
  if not first_call:
@@ -11,5 +11,7 @@ from ...oddsportal.oddsportal_league_model import OddsPortalLeagueModel
11
11
  class NBAOddsPortalLeagueModel(OddsPortalLeagueModel):
12
12
  """NBA OddsPortal implementation of the league model."""
13
13
 
14
- def __init__(self, session: requests_cache.CachedSession) -> None:
15
- super().__init__(League.NBA, session)
14
+ def __init__(
15
+ self, session: requests_cache.CachedSession, position: int | None = None
16
+ ) -> None:
17
+ super().__init__(League.NBA, session, position=position)
@@ -9,5 +9,7 @@ from ...sportsdb.sportsdb_league_model import SportsDBLeagueModel
9
9
  class NBASportsDBLeagueModel(SportsDBLeagueModel):
10
10
  """NBA SportsDB implementation of the league model."""
11
11
 
12
- def __init__(self, session: requests_cache.CachedSession) -> None:
13
- super().__init__(session, "4387", League.NBA)
12
+ def __init__(
13
+ self, session: requests_cache.CachedSession, position: int | None = None
14
+ ) -> None:
15
+ super().__init__(session, "4387", League.NBA, position=position)
@@ -12,7 +12,12 @@ from ...sportsreference.sportsreference_league_model import \
12
12
  class NBASportsReferenceLeagueModel(SportsReferenceLeagueModel):
13
13
  """NBA Sports Reference implementation of the league model."""
14
14
 
15
- def __init__(self, session: requests_cache.CachedSession) -> None:
15
+ def __init__(
16
+ self, session: requests_cache.CachedSession, position: int | None = None
17
+ ) -> None:
16
18
  super().__init__(
17
- session, League.NBA, "https://www.basketball-reference.com/boxscores/"
19
+ session,
20
+ League.NBA,
21
+ "https://www.basketball-reference.com/boxscores/",
22
+ position=position,
18
23
  )
@@ -5,6 +5,8 @@ import requests_cache
5
5
  from ...combined.combined_league_model import CombinedLeagueModel
6
6
  from ...league import League
7
7
  from ..espn.ncaab_espn_league_model import NCAABESPNLeagueModel
8
+ from ..oddsportal.ncaab_oddsportal_league_model import \
9
+ NCAABOddsPortalLeagueModel
8
10
  from ..sportsreference.ncaab_sportsreference_league_model import \
9
11
  NCAABSportsReferenceLeagueModel
10
12
 
@@ -749,8 +751,9 @@ class NCAABCombinedLeagueModel(CombinedLeagueModel):
749
751
  session,
750
752
  League.NCAAB,
751
753
  [
752
- NCAABSportsReferenceLeagueModel(session),
753
- NCAABESPNLeagueModel(session),
754
+ NCAABSportsReferenceLeagueModel(session, position=0),
755
+ NCAABESPNLeagueModel(session, position=1),
756
+ NCAABOddsPortalLeagueModel(session, position=2),
754
757
  ],
755
758
  )
756
759
 
@@ -12,5 +12,7 @@ _SEASON_URL = "http://sports.core.api.espn.com/v2/sports/basketball/leagues/mens
12
12
  class NCAABESPNLeagueModel(ESPNLeagueModel):
13
13
  """NCAAB ESPN implementation of the league model."""
14
14
 
15
- def __init__(self, session: requests_cache.CachedSession) -> None:
16
- super().__init__(_SEASON_URL, League.NCAAB, session)
15
+ def __init__(
16
+ self, session: requests_cache.CachedSession, position: int | None = None
17
+ ) -> None:
18
+ super().__init__(_SEASON_URL, League.NCAAB, session, position=position)
@@ -11,5 +11,7 @@ from ...oddsportal.oddsportal_league_model import OddsPortalLeagueModel
11
11
  class NCAABOddsPortalLeagueModel(OddsPortalLeagueModel):
12
12
  """NCAAB OddsPortal implementation of the league model."""
13
13
 
14
- def __init__(self, session: requests_cache.CachedSession) -> None:
15
- super().__init__(League.NCAAB, session)
14
+ def __init__(
15
+ self, session: requests_cache.CachedSession, position: int | None = None
16
+ ) -> None:
17
+ super().__init__(League.NCAAB, session, position=position)