sportsball 0.3.115__tar.gz → 0.3.117__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 (223) hide show
  1. {sportsball-0.3.115/sportsball.egg-info → sportsball-0.3.117}/PKG-INFO +1 -1
  2. {sportsball-0.3.115 → sportsball-0.3.117}/setup.py +1 -1
  3. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/__init__.py +1 -1
  4. sportsball-0.3.117/sportsball/data/afl/afl/afl_afl_bookie_model.py +8 -0
  5. sportsball-0.3.117/sportsball/data/afl/afl/afl_afl_game_model.py +75 -0
  6. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/afl/afl/afl_afl_league_model.py +12 -7
  7. sportsball-0.3.117/sportsball/data/afl/afl/afl_afl_odds_model.py +14 -0
  8. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/afl/afl/afl_afl_team_model.py +7 -2
  9. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/afl/combined/afl_combined_league_model.py +6 -0
  10. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/aussportsbetting/aussportsbetting_odds_model.py +1 -1
  11. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/espn/espn_odds_model.py +1 -1
  12. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/google/google_address_model.py +11 -9
  13. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/odds_model.py +2 -0
  14. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/oddsportal/oddsportal_odds_model.py +1 -1
  15. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/sportsreference/sportsreference_league_model.py +2 -0
  16. {sportsball-0.3.115 → sportsball-0.3.117/sportsball.egg-info}/PKG-INFO +1 -1
  17. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball.egg-info/SOURCES.txt +2 -0
  18. {sportsball-0.3.115 → sportsball-0.3.117}/tests/data/afl/afl/afl_afl_league_model_test.py +1 -1
  19. sportsball-0.3.115/sportsball/data/afl/afl/afl_afl_game_model.py +0 -41
  20. {sportsball-0.3.115 → sportsball-0.3.117}/LICENSE +0 -0
  21. {sportsball-0.3.115 → sportsball-0.3.117}/MANIFEST.in +0 -0
  22. {sportsball-0.3.115 → sportsball-0.3.117}/README.md +0 -0
  23. {sportsball-0.3.115 → sportsball-0.3.117}/requirements.txt +0 -0
  24. {sportsball-0.3.115 → sportsball-0.3.117}/setup.cfg +0 -0
  25. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/__main__.py +0 -0
  26. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/args.py +0 -0
  27. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/cache.py +0 -0
  28. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/__init__.py +0 -0
  29. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/address_model.py +0 -0
  30. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/afl/__init__.py +0 -0
  31. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/afl/afl/__init__.py +0 -0
  32. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/afl/afl/afl_afl_player_model.py +0 -0
  33. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/afl/afl/afl_afl_venue_model.py +0 -0
  34. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/afl/afltables/__init__.py +0 -0
  35. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/afl/afltables/afl_afltables_game_model.py +0 -0
  36. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/afl/afltables/afl_afltables_league_model.py +0 -0
  37. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/afl/afltables/afl_afltables_player_model.py +0 -0
  38. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/afl/afltables/afl_afltables_team_model.py +0 -0
  39. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/afl/afltables/afl_afltables_venue_model.py +0 -0
  40. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/afl/aussportsbetting/__init__.py +0 -0
  41. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/afl/aussportsbetting/afl_aussportsbetting_league_model.py +0 -0
  42. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/afl/combined/__init__.py +0 -0
  43. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/afl/espn/__init__.py +0 -0
  44. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/afl/espn/afl_espn_league_model.py +0 -0
  45. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/afl/oddsportal/__init__.py +0 -0
  46. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/afl/oddsportal/afl_oddsportal_league_model.py +0 -0
  47. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/aussportsbetting/__init__.py +0 -0
  48. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/aussportsbetting/aussportsbetting_bookie_model.py +0 -0
  49. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/aussportsbetting/aussportsbetting_game_model.py +0 -0
  50. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/aussportsbetting/aussportsbetting_league_model.py +0 -0
  51. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/aussportsbetting/aussportsbetting_team_model.py +0 -0
  52. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/aussportsbetting/aussportsbetting_venue_model.py +0 -0
  53. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/bookie_model.py +0 -0
  54. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/combined/__init__.py +0 -0
  55. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/combined/combined_address_model.py +0 -0
  56. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/combined/combined_game_model.py +0 -0
  57. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/combined/combined_league_model.py +0 -0
  58. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/combined/combined_player_model.py +0 -0
  59. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/combined/combined_team_model.py +0 -0
  60. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/combined/combined_venue_model.py +0 -0
  61. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/combined/combined_weather_model.py +0 -0
  62. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/combined/null_check.py +0 -0
  63. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/espn/__init__.py +0 -0
  64. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/espn/espn_bookie_model.py +0 -0
  65. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/espn/espn_game_model.py +0 -0
  66. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/espn/espn_league_model.py +0 -0
  67. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/espn/espn_player_model.py +0 -0
  68. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/espn/espn_team_model.py +0 -0
  69. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/espn/espn_venue_model.py +0 -0
  70. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/field_type.py +0 -0
  71. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/game_model.py +0 -0
  72. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/google/__init__.py +0 -0
  73. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/google/google_news_model.py +0 -0
  74. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/league.py +0 -0
  75. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/league_model.py +0 -0
  76. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/model.py +0 -0
  77. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/nba/__init__.py +0 -0
  78. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/nba/combined/__init__.py +0 -0
  79. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/nba/combined/nba_combined_league_model.py +0 -0
  80. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/nba/espn/__init__.py +0 -0
  81. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/nba/espn/nba_espn_league_model.py +0 -0
  82. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/nba/nba/__init__.py +0 -0
  83. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/nba/nba/nba_nba_game_model.py +0 -0
  84. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/nba/nba/nba_nba_league_model.py +0 -0
  85. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/nba/nba/nba_nba_team_model.py +0 -0
  86. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/nba/oddsportal/__init__.py +0 -0
  87. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/nba/oddsportal/nba_oddsportal_league_model.py +0 -0
  88. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/nba/sportsdb/__init__.py +0 -0
  89. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/nba/sportsdb/nba_sportsdb_league_model.py +0 -0
  90. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/nba/sportsreference/__init__.py +0 -0
  91. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/nba/sportsreference/nba_sportsreference_league_model.py +0 -0
  92. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/ncaab/__init__.py +0 -0
  93. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/ncaab/combined/__init__.py +0 -0
  94. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/ncaab/combined/ncaab_combined_league_model.py +0 -0
  95. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/ncaab/espn/__init__.py +0 -0
  96. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/ncaab/espn/ncaab_espn_league_model.py +0 -0
  97. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/ncaab/oddsportal/__init__.py +0 -0
  98. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/ncaab/oddsportal/ncaab_oddsportal_league_model.py +0 -0
  99. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/ncaab/sportsreference/__init__.py +0 -0
  100. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/ncaab/sportsreference/ncaab_sportsreference_league_model.py +0 -0
  101. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/ncaaf/__init__.py +0 -0
  102. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/ncaaf/combined/__init__.py +0 -0
  103. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/ncaaf/combined/ncaaf_combined_league_model.py +0 -0
  104. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/ncaaf/espn/__init__.py +0 -0
  105. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/ncaaf/espn/ncaaf_espn_league_model.py +0 -0
  106. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/ncaaf/oddsportal/__init__.py +0 -0
  107. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/ncaaf/oddsportal/ncaaf_oddsportal_league_model.py +0 -0
  108. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/news_model.py +0 -0
  109. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/nfl/__init__.py +0 -0
  110. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/nfl/aussportsbetting/__init__.py +0 -0
  111. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/nfl/aussportsbetting/nfl_aussportsbetting_league_model.py +0 -0
  112. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/nfl/combined/__init__.py +0 -0
  113. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/nfl/combined/nfl_combined_league_model.py +0 -0
  114. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/nfl/espn/__init__.py +0 -0
  115. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/nfl/espn/nfl_espn_league_model.py +0 -0
  116. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/nfl/oddsportal/__init__.py +0 -0
  117. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/nfl/oddsportal/nfl_oddsportal_league_model.py +0 -0
  118. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/nfl/sportsdb/__init__.py +0 -0
  119. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/nfl/sportsdb/nfl_sportsdb_league_model.py +0 -0
  120. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/oddsportal/__init__.py +0 -0
  121. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/oddsportal/decrypt.py +0 -0
  122. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/oddsportal/oddsportal_bookie_model.py +0 -0
  123. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/oddsportal/oddsportal_game_model.py +0 -0
  124. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/oddsportal/oddsportal_league_model.py +0 -0
  125. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/oddsportal/oddsportal_team_model.py +0 -0
  126. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/oddsportal/oddsportal_venue_model.py +0 -0
  127. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/player_model.py +0 -0
  128. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/season_type.py +0 -0
  129. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/social_model.py +0 -0
  130. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/sportsdb/__init__.py +0 -0
  131. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/sportsdb/sportsdb_game_model.py +0 -0
  132. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/sportsdb/sportsdb_league_model.py +0 -0
  133. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/sportsdb/sportsdb_team_model.py +0 -0
  134. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/sportsdb/sportsdb_venue_model.py +0 -0
  135. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/sportsreference/__init__.py +0 -0
  136. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/sportsreference/sportsreference_game_model.py +0 -0
  137. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/sportsreference/sportsreference_player_model.py +0 -0
  138. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/sportsreference/sportsreference_team_model.py +0 -0
  139. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/sportsreference/sportsreference_venue_model.py +0 -0
  140. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/team_model.py +0 -0
  141. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/venue_model.py +0 -0
  142. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/weather/__init__.py +0 -0
  143. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/weather/gribstream/__init__.py +0 -0
  144. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/weather/gribstream/gribstream_weather_model.py +0 -0
  145. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/weather/multi_weather_model.py +0 -0
  146. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/weather/openmeteo/__init__.py +0 -0
  147. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/weather/openmeteo/openmeteo_weather_model.py +0 -0
  148. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/weather_model.py +0 -0
  149. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/wikipedia/__init__.py +0 -0
  150. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/wikipedia/wikipedia_venue_model.py +0 -0
  151. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/x/__init__.py +0 -0
  152. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/data/x/x_social_model.py +0 -0
  153. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/logger.py +0 -0
  154. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/loglevel.py +0 -0
  155. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/playwright.py +0 -0
  156. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/proxy_session.py +0 -0
  157. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/session.py +0 -0
  158. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/sportsball.py +0 -0
  159. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/vendor/__init__.py +0 -0
  160. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball/vendor/pygooglenews/__init__.py +0 -0
  161. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball.egg-info/dependency_links.txt +0 -0
  162. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball.egg-info/entry_points.txt +0 -0
  163. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball.egg-info/not-zip-safe +0 -0
  164. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball.egg-info/requires.txt +0 -0
  165. {sportsball-0.3.115 → sportsball-0.3.117}/sportsball.egg-info/top_level.txt +0 -0
  166. {sportsball-0.3.115 → sportsball-0.3.117}/tests/__init__.py +0 -0
  167. {sportsball-0.3.115 → sportsball-0.3.117}/tests/data/__init__.py +0 -0
  168. {sportsball-0.3.115 → sportsball-0.3.117}/tests/data/afl/__init__.py +0 -0
  169. {sportsball-0.3.115 → sportsball-0.3.117}/tests/data/afl/afl/__init__.py +0 -0
  170. {sportsball-0.3.115 → sportsball-0.3.117}/tests/data/afl/afltables/__init__.py +0 -0
  171. {sportsball-0.3.115 → sportsball-0.3.117}/tests/data/afl/afltables/afl_afltables_game_model_test.py +0 -0
  172. {sportsball-0.3.115 → sportsball-0.3.117}/tests/data/afl/afltables/afl_afltables_league_model_test.py +0 -0
  173. {sportsball-0.3.115 → sportsball-0.3.117}/tests/data/afl/afltables/afl_afltables_player_model_test.py +0 -0
  174. {sportsball-0.3.115 → sportsball-0.3.117}/tests/data/aussportsbetting/__init__.py +0 -0
  175. {sportsball-0.3.115 → sportsball-0.3.117}/tests/data/aussportsbetting/aussportsbetting_game_model_test.py +0 -0
  176. {sportsball-0.3.115 → sportsball-0.3.117}/tests/data/combined/__init__.py +0 -0
  177. {sportsball-0.3.115 → sportsball-0.3.117}/tests/data/combined/combined_game_model_test.py +0 -0
  178. {sportsball-0.3.115 → sportsball-0.3.117}/tests/data/combined/combined_player_model_test.py +0 -0
  179. {sportsball-0.3.115 → sportsball-0.3.117}/tests/data/combined/combined_team_model_test.py +0 -0
  180. {sportsball-0.3.115 → sportsball-0.3.117}/tests/data/espn/__init__.py +0 -0
  181. {sportsball-0.3.115 → sportsball-0.3.117}/tests/data/espn/espn_game_model_test.py +0 -0
  182. {sportsball-0.3.115 → sportsball-0.3.117}/tests/data/espn/espn_player_model_test.py +0 -0
  183. {sportsball-0.3.115 → sportsball-0.3.117}/tests/data/game_model_test.py +0 -0
  184. {sportsball-0.3.115 → sportsball-0.3.117}/tests/data/google/__init__.py +0 -0
  185. {sportsball-0.3.115 → sportsball-0.3.117}/tests/data/google/google_address_model_test.py +0 -0
  186. {sportsball-0.3.115 → sportsball-0.3.117}/tests/data/google/google_news_model_test.py +0 -0
  187. {sportsball-0.3.115 → sportsball-0.3.117}/tests/data/nba/__init__.py +0 -0
  188. {sportsball-0.3.115 → sportsball-0.3.117}/tests/data/nba/nba/__init__.py +0 -0
  189. {sportsball-0.3.115 → sportsball-0.3.117}/tests/data/nba/nba/nba_nba_game_model_test.py +0 -0
  190. {sportsball-0.3.115 → sportsball-0.3.117}/tests/data/nba/nba/nba_nba_league_model_test.py +0 -0
  191. {sportsball-0.3.115 → sportsball-0.3.117}/tests/data/nba/nba/nba_nba_team_model_test.py +0 -0
  192. {sportsball-0.3.115 → sportsball-0.3.117}/tests/data/nba/sportsdb/__init__.py +0 -0
  193. {sportsball-0.3.115 → sportsball-0.3.117}/tests/data/nba/sportsdb/nba_sportsdb_league_model_test.py +0 -0
  194. {sportsball-0.3.115 → sportsball-0.3.117}/tests/data/nba/sportsreference/__init__.py +0 -0
  195. {sportsball-0.3.115 → sportsball-0.3.117}/tests/data/nba/sportsreference/nba_sportsreference_league_model_test.py +0 -0
  196. {sportsball-0.3.115 → sportsball-0.3.117}/tests/data/ncaab/__init__.py +0 -0
  197. {sportsball-0.3.115 → sportsball-0.3.117}/tests/data/ncaab/sportsreference/__init__.py +0 -0
  198. {sportsball-0.3.115 → sportsball-0.3.117}/tests/data/ncaab/sportsreference/ncaab_sportsreference_league_model_test.py +0 -0
  199. {sportsball-0.3.115 → sportsball-0.3.117}/tests/data/nfl/__init__.py +0 -0
  200. {sportsball-0.3.115 → sportsball-0.3.117}/tests/data/nfl/sportsdb/__init__.py +0 -0
  201. {sportsball-0.3.115 → sportsball-0.3.117}/tests/data/nfl/sportsdb/nfl_sportsdb_league_model_test.py +0 -0
  202. {sportsball-0.3.115 → sportsball-0.3.117}/tests/data/oddsportal/__init__.py +0 -0
  203. {sportsball-0.3.115 → sportsball-0.3.117}/tests/data/oddsportal/decrypt_test.py +0 -0
  204. {sportsball-0.3.115 → sportsball-0.3.117}/tests/data/oddsportal/oddsportal_game_model_test.py +0 -0
  205. {sportsball-0.3.115 → sportsball-0.3.117}/tests/data/oddsportal/oddsportal_league_model_test.py +0 -0
  206. {sportsball-0.3.115 → sportsball-0.3.117}/tests/data/player_model_test.py +0 -0
  207. {sportsball-0.3.115 → sportsball-0.3.117}/tests/data/social_model_test.py +0 -0
  208. {sportsball-0.3.115 → sportsball-0.3.117}/tests/data/sportsdb/__init__.py +0 -0
  209. {sportsball-0.3.115 → sportsball-0.3.117}/tests/data/sportsdb/sportsdb_game_model_test.py +0 -0
  210. {sportsball-0.3.115 → sportsball-0.3.117}/tests/data/sportsdb/sportsdb_league_model_test.py +0 -0
  211. {sportsball-0.3.115 → sportsball-0.3.117}/tests/data/sportsdb/sportsdb_team_model_test.py +0 -0
  212. {sportsball-0.3.115 → sportsball-0.3.117}/tests/data/sportsdb/sportsdb_venue_model_test.py +0 -0
  213. {sportsball-0.3.115 → sportsball-0.3.117}/tests/data/sportsreference/__init__.py +0 -0
  214. {sportsball-0.3.115 → sportsball-0.3.117}/tests/data/sportsreference/sportsreference_game_model_test.py +0 -0
  215. {sportsball-0.3.115 → sportsball-0.3.117}/tests/data/sportsreference/sportsreference_league_model_test.py +0 -0
  216. {sportsball-0.3.115 → sportsball-0.3.117}/tests/data/sportsreference/sportsreference_player_model_test.py +0 -0
  217. {sportsball-0.3.115 → sportsball-0.3.117}/tests/data/sportsreference/sportsreference_team_model_test.py +0 -0
  218. {sportsball-0.3.115 → sportsball-0.3.117}/tests/data/sportsreference/sportsreference_venue_model_test.py +0 -0
  219. {sportsball-0.3.115 → sportsball-0.3.117}/tests/data/team_model_test.py +0 -0
  220. {sportsball-0.3.115 → sportsball-0.3.117}/tests/data/x/__init__.py +0 -0
  221. {sportsball-0.3.115 → sportsball-0.3.117}/tests/data/x/x_social_model_test.py +0 -0
  222. {sportsball-0.3.115 → sportsball-0.3.117}/tests/proxy_session_test.py +0 -0
  223. {sportsball-0.3.115 → sportsball-0.3.117}/tests/sportsball_test.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: sportsball
3
- Version: 0.3.115
3
+ Version: 0.3.117
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.115',
29
+ version='0.3.117',
30
30
  description='A library for pulling in and normalising sports stats.',
31
31
  long_description=long_description,
32
32
  long_description_content_type='text/markdown',
@@ -4,4 +4,4 @@
4
4
  import cchardet # type: ignore
5
5
  import lxml # noqa: ignore
6
6
 
7
- __VERSION__ = "0.3.115"
7
+ __VERSION__ = "0.3.117"
@@ -0,0 +1,8 @@
1
+ """AFL AFL bookie model."""
2
+
3
+ from ...bookie_model import BookieModel
4
+
5
+
6
+ def create_afl_afl_bookie_model() -> BookieModel:
7
+ """Create bookie model from AFL.com."""
8
+ return BookieModel(identifier="sportsbet", name="sportsbet")
@@ -0,0 +1,75 @@
1
+ """AFL AFL game model."""
2
+
3
+ # pylint: disable=too-many-statements,protected-access,too-many-arguments,bare-except
4
+ import datetime
5
+ import logging
6
+
7
+ import pytest_is_running
8
+ import requests_cache
9
+ from bs4 import BeautifulSoup
10
+ from playwright.sync_api import sync_playwright
11
+
12
+ from ....playwright import ensure_install
13
+ from ...game_model import GameModel
14
+ from ...league import League
15
+ from .afl_afl_team_model import create_afl_afl_team_model
16
+ from .afl_afl_venue_model import create_afl_afl_venue_model
17
+
18
+
19
+ def _extract_odds(html: str) -> list[float]:
20
+ odds = []
21
+ soup = BeautifulSoup(html, "lxml")
22
+ for span in soup.find_all("span", {"class": "betting-button__money"}):
23
+ odds.append(float(span.get_text().strip().replace("$", "")))
24
+ return odds
25
+
26
+
27
+ def create_afl_afl_game_model(
28
+ team_names: list[str],
29
+ players: list[list[tuple[str, str, str, str]]],
30
+ dt: datetime.datetime,
31
+ venue_name: str,
32
+ session: requests_cache.CachedSession,
33
+ ladder: list[str],
34
+ url: str | None,
35
+ ) -> GameModel:
36
+ """Create a game model from AFL Tables."""
37
+ odds = []
38
+ if url is not None and not pytest_is_running.is_running():
39
+ ensure_install()
40
+ with sync_playwright() as p:
41
+ browser = p.chromium.launch()
42
+ context = browser.new_context()
43
+ page = context.new_page()
44
+ try:
45
+ page.goto(url, wait_until="networkidle")
46
+ except: # noqa: E722
47
+ logging.warning("Ladder URL timed out.")
48
+ odds = _extract_odds(page.content())
49
+
50
+ venue_model = create_afl_afl_venue_model(venue_name, session, dt)
51
+ teams = [
52
+ create_afl_afl_team_model(
53
+ x,
54
+ players[count],
55
+ session,
56
+ dt,
57
+ ladder,
58
+ odds[count] if count < len(odds) else None,
59
+ )
60
+ for count, x in enumerate(team_names)
61
+ ]
62
+ return GameModel(
63
+ dt=dt,
64
+ week=None,
65
+ game_number=None,
66
+ venue=venue_model,
67
+ teams=teams,
68
+ end_dt=None,
69
+ attendance=None,
70
+ league=League.AFL,
71
+ year=datetime.datetime.today().year,
72
+ season_type=None,
73
+ postponed=None,
74
+ play_off=None,
75
+ )
@@ -1,9 +1,10 @@
1
1
  """AFL AFL league model."""
2
2
 
3
- # pylint: disable=too-many-statements,protected-access,too-many-locals,bare-except,too-many-branches
3
+ # pylint: disable=too-many-statements,protected-access,too-many-locals,bare-except,too-many-branches,duplicate-code
4
4
  import datetime
5
5
  import logging
6
6
  import re
7
+ import urllib.parse
7
8
  from typing import Iterator
8
9
 
9
10
  import requests_cache
@@ -19,7 +20,7 @@ from .afl_afl_game_model import create_afl_afl_game_model
19
20
 
20
21
 
21
22
  def _parse_game_info(
22
- html: str, session: requests_cache.CachedSession, ladder: list[str]
23
+ html: str, session: requests_cache.CachedSession, ladder: list[str], html_url: str
23
24
  ) -> Iterator[GameModel]:
24
25
  soup = BeautifulSoup(html, "lxml")
25
26
  for div in soup.find_all("div", {"class": re.compile(".*js-match-list-item.*")}):
@@ -88,8 +89,13 @@ def _parse_game_info(
88
89
  raise ValueError("venue_name is null")
89
90
  if dt is None:
90
91
  raise ValueError("dt is null")
92
+ url = None
93
+ for a in div.find_all(
94
+ "a", {"class": re.compile(".*match-list-alt__header-mc-link.*")}
95
+ ):
96
+ url = urllib.parse.urljoin(html_url, a.get("href"))
91
97
  yield create_afl_afl_game_model(
92
- team_names, teams_players, dt, venue_name, session, ladder
98
+ team_names, teams_players, dt, venue_name, session, ladder, url
93
99
  )
94
100
 
95
101
 
@@ -139,7 +145,6 @@ class AFLAFLLeagueModel(LeagueModel):
139
145
  browser = p.chromium.launch()
140
146
  context = browser.new_context()
141
147
  page = context.new_page()
142
- page.goto(
143
- "https://www.afl.com.au/matches/team-lineups", wait_until="networkidle"
144
- )
145
- yield from _parse_game_info(page.content(), self.session, ladder)
148
+ url = "https://www.afl.com.au/matches/team-lineups"
149
+ page.goto(url, wait_until="networkidle")
150
+ yield from _parse_game_info(page.content(), self.session, ladder, url)
@@ -0,0 +1,14 @@
1
+ """AFL AFL odds model."""
2
+
3
+ import datetime
4
+
5
+ from ...team_model import OddsModel
6
+ from .afl_afl_bookie_model import create_afl_afl_bookie_model
7
+
8
+
9
+ def create_afl_afl_odds_model(odds: float) -> OddsModel:
10
+ """Create an odds model based off aus sports betting."""
11
+ bookie = create_afl_afl_bookie_model()
12
+ return OddsModel(
13
+ odds=odds, bookie=bookie, dt=datetime.datetime.now(), canonical=True
14
+ ) # pyright: ignore
@@ -1,6 +1,6 @@
1
1
  """AFL AFL team model."""
2
2
 
3
- # pylint: disable=duplicate-code
3
+ # pylint: disable=duplicate-code,too-many-arguments
4
4
  import datetime
5
5
 
6
6
  import requests_cache
@@ -8,6 +8,7 @@ import requests_cache
8
8
  from ...google.google_news_model import create_google_news_models
9
9
  from ...league import League
10
10
  from ...team_model import TeamModel
11
+ from .afl_afl_odds_model import create_afl_afl_odds_model
11
12
  from .afl_afl_player_model import create_afl_afl_player_model
12
13
 
13
14
 
@@ -17,6 +18,7 @@ def create_afl_afl_team_model(
17
18
  session: requests_cache.CachedSession,
18
19
  dt: datetime.datetime,
19
20
  ladder: list[str],
21
+ odds: float | None,
20
22
  ) -> TeamModel:
21
23
  """Create a team model from AFL AFL."""
22
24
  player_models = [
@@ -25,12 +27,15 @@ def create_afl_afl_team_model(
25
27
  )
26
28
  for identifier, player_number, first_name, second_name in players
27
29
  ]
30
+ odds_models = []
31
+ if odds is not None:
32
+ odds_models.append(create_afl_afl_odds_model(odds))
28
33
  return TeamModel(
29
34
  identifier=team_name,
30
35
  name=team_name,
31
36
  location=None,
32
37
  players=player_models,
33
- odds=[],
38
+ odds=odds_models,
34
39
  points=None,
35
40
  ladder_rank=ladder.index(team_name) + 1,
36
41
  kicks=None,
@@ -91,6 +91,12 @@ AFL_TEAM_IDENTITY_MAP = {
91
91
  # AFL
92
92
  "GWS GIANTS": GWS,
93
93
  "Gold Coast SUNS": GOLDCOAST,
94
+ "Kuwarna": ADELAIDE,
95
+ "Yartapuulti": PORT_ADELAIDE,
96
+ "Walyalup": FREMANTLE,
97
+ "Narrm": MELBOURNE,
98
+ "Waalitj Marawar": WESTCOAST,
99
+ "Euro-Yroke": STKILDA,
94
100
  }
95
101
  BRUNSWICK_ST = "brunswick_st"
96
102
  VICTORIA_PARK = "victoria_park"
@@ -9,4 +9,4 @@ from .aussportsbetting_bookie_model import create_aussportsbetting_bookie_model
9
9
  def create_aussportsbetting_odds_model(odds: float) -> OddsModel:
10
10
  """Create an odds model based off aus sports betting."""
11
11
  bookie = create_aussportsbetting_bookie_model()
12
- return OddsModel(odds=odds, bookie=bookie, dt=None) # pyright: ignore
12
+ return OddsModel(odds=odds, bookie=bookie, dt=None, canonical=True) # pyright: ignore
@@ -18,4 +18,4 @@ def create_espn_odds_model(odds: dict[str, Any], bookie: BookieModel) -> OddsMod
18
18
  odds_val = (float(moneyline) / 100.0) + 1.0
19
19
  elif moneyline < 0:
20
20
  odds_val = (100.0 / float(abs(moneyline))) + 1.0
21
- return OddsModel(odds=odds_val, bookie=bookie, dt=None)
21
+ return OddsModel(odds=odds_val, bookie=bookie, dt=None, canonical=False)
@@ -2602,6 +2602,15 @@ VIEJAS_ARENA = SportsballGeocodeTuple(
2602
2602
  housenumber="5500",
2603
2603
  country="USA",
2604
2604
  )
2605
+ OMNI_COLISEUM = SportsballGeocodeTuple(
2606
+ city="Atlanta",
2607
+ state="GA",
2608
+ postal="30303",
2609
+ lat=33.7575,
2610
+ lng=-84.396667,
2611
+ housenumber="100",
2612
+ country="USA",
2613
+ )
2605
2614
  _CACHED_GEOCODES: dict[str, Any] = {
2606
2615
  "S.C.G. - Australia": SCG,
2607
2616
  "Victoria Park - Australia": SportsballGeocodeTuple(
@@ -7228,15 +7237,7 @@ _CACHED_GEOCODES: dict[str, Any] = {
7228
7237
  housenumber="1800",
7229
7238
  country="USA",
7230
7239
  ),
7231
- "Omni Coliseum": SportsballGeocodeTuple(
7232
- city="Atlanta",
7233
- state="GA",
7234
- postal="30303",
7235
- lat=33.7575,
7236
- lng=-84.396667,
7237
- housenumber="100",
7238
- country="USA",
7239
- ),
7240
+ "Omni Coliseum": OMNI_COLISEUM,
7240
7241
  "Great Western Forum": THE_FORUM,
7241
7242
  "The Palace of Auburn Hills - Auburn Hills, MI - USA": THE_PALACE_OF_AUBURN_HILLS,
7242
7243
  "America West Arena": AMERICA_WEST_ARENA,
@@ -13862,6 +13863,7 @@ _CACHED_GEOCODES: dict[str, Any] = {
13862
13863
  country="USA",
13863
13864
  ),
13864
13865
  "Cox Arena, San Diego, California": VIEJAS_ARENA,
13866
+ "The Omni, Atlanta, Georgia": OMNI_COLISEUM,
13865
13867
  }
13866
13868
 
13867
13869
 
@@ -11,6 +11,7 @@ from .field_type import TYPE_KEY, FieldType
11
11
  DT_COLUMN: Literal["dt"] = "dt"
12
12
  ODDS_ODDS_COLUMN: Literal["odds"] = "odds"
13
13
  ODDS_BOOKIE_COLUMN: Literal["bookie"] = "bookie"
14
+ ODDS_CANONICAL_COLUMN: Literal["canonical"] = "canonical"
14
15
 
15
16
 
16
17
  class OddsModel(BaseModel):
@@ -24,3 +25,4 @@ class OddsModel(BaseModel):
24
25
  ...,
25
26
  alias=DT_COLUMN,
26
27
  )
28
+ canonical: bool = Field(..., alias=ODDS_CANONICAL_COLUMN)
@@ -13,4 +13,4 @@ def create_oddsportal_odds_model(
13
13
  ) -> OddsModel:
14
14
  """Create an odds model based off aus sports betting."""
15
15
  bookie = create_oddsportal_bookie_model(bookie_name, bookie_id)
16
- return OddsModel(odds=odds, bookie=bookie, dt=dt) # pyright: ignore
16
+ return OddsModel(odds=odds, bookie=bookie, dt=dt, canonical=False) # pyright: ignore
@@ -39,6 +39,8 @@ BAD_URLS = {
39
39
  "https://www.sports-reference.com/cbb/boxscores/2009-11-14-san-diego_w.html",
40
40
  "https://www.sports-reference.com/cbb/boxscores/2009-04-03-texas-el-paso.html",
41
41
  "https://www.sports-reference.com/cbb/boxscores/2009-04-01-texas-el-paso.html",
42
+ "https://www.sports-reference.com/cbb/boxscores/2009-03-15-florida-state.html",
43
+ "https://www.sports-reference.com/cbb/boxscores/2009-03-15-purdue.html",
42
44
  }
43
45
 
44
46
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: sportsball
3
- Version: 0.3.115
3
+ Version: 0.3.117
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
@@ -38,8 +38,10 @@ sportsball/data/venue_model.py
38
38
  sportsball/data/weather_model.py
39
39
  sportsball/data/afl/__init__.py
40
40
  sportsball/data/afl/afl/__init__.py
41
+ sportsball/data/afl/afl/afl_afl_bookie_model.py
41
42
  sportsball/data/afl/afl/afl_afl_game_model.py
42
43
  sportsball/data/afl/afl/afl_afl_league_model.py
44
+ sportsball/data/afl/afl/afl_afl_odds_model.py
43
45
  sportsball/data/afl/afl/afl_afl_player_model.py
44
46
  sportsball/data/afl/afl/afl_afl_team_model.py
45
47
  sportsball/data/afl/afl/afl_afl_venue_model.py
@@ -34,7 +34,7 @@ class TestAFLAFLLeagueModel(unittest.TestCase):
34
34
  "Geelong Cats",
35
35
  "Hawthorn",
36
36
  "West Coast Eagles",
37
- ]))
37
+ ], "https://www.afl.com.au/matches/team-lineups"))
38
38
  first_game = game_models[0]
39
39
  self.assertEqual(len(first_game.teams), 2)
40
40
  for team in first_game.teams:
@@ -1,41 +0,0 @@
1
- """AFL AFL game model."""
2
-
3
- # pylint: disable=too-many-statements,protected-access,too-many-arguments
4
- import datetime
5
-
6
- import requests_cache
7
-
8
- from ...game_model import GameModel
9
- from ...league import League
10
- from .afl_afl_team_model import create_afl_afl_team_model
11
- from .afl_afl_venue_model import create_afl_afl_venue_model
12
-
13
-
14
- def create_afl_afl_game_model(
15
- team_names: list[str],
16
- players: list[list[tuple[str, str, str, str]]],
17
- dt: datetime.datetime,
18
- venue_name: str,
19
- session: requests_cache.CachedSession,
20
- ladder: list[str],
21
- ) -> GameModel:
22
- """Create a game model from AFL Tables."""
23
- venue_model = create_afl_afl_venue_model(venue_name, session, dt)
24
- teams = [
25
- create_afl_afl_team_model(x, players[count], session, dt, ladder)
26
- for count, x in enumerate(team_names)
27
- ]
28
- return GameModel(
29
- dt=dt,
30
- week=None,
31
- game_number=None,
32
- venue=venue_model,
33
- teams=teams,
34
- end_dt=None,
35
- attendance=None,
36
- league=League.AFL,
37
- year=datetime.datetime.today().year,
38
- season_type=None,
39
- postponed=None,
40
- play_off=None,
41
- )
File without changes
File without changes
File without changes
File without changes