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