sportsball 0.3.37__tar.gz → 0.3.39__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 (218) hide show
  1. {sportsball-0.3.37/sportsball.egg-info → sportsball-0.3.39}/PKG-INFO +7 -1
  2. {sportsball-0.3.37 → sportsball-0.3.39}/README.md +5 -0
  3. {sportsball-0.3.37 → sportsball-0.3.39}/requirements.txt +1 -0
  4. {sportsball-0.3.37 → sportsball-0.3.39}/setup.py +1 -1
  5. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/__init__.py +1 -1
  6. sportsball-0.3.39/sportsball/data/afl/afl/afl_afl_game_model.py +40 -0
  7. sportsball-0.3.39/sportsball/data/afl/afl/afl_afl_league_model.py +87 -0
  8. sportsball-0.3.39/sportsball/data/afl/afl/afl_afl_player_model.py +22 -0
  9. sportsball-0.3.39/sportsball/data/afl/afl/afl_afl_team_model.py +41 -0
  10. sportsball-0.3.39/sportsball/data/afl/afl/afl_afl_venue_model.py +25 -0
  11. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/afl/afltables/afl_afltables_player_model.py +1 -1
  12. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/afl/combined/afl_combined_league_model.py +8 -0
  13. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/aussportsbetting/aussportsbetting_game_model.py +1 -1
  14. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/combined/combined_game_model.py +4 -2
  15. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/combined/combined_league_model.py +8 -0
  16. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/combined/combined_team_model.py +11 -1
  17. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/google/google_address_model.py +99 -27
  18. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/nba/combined/nba_combined_league_model.py +5 -0
  19. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/ncaab/combined/ncaab_combined_league_model.py +5 -0
  20. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/ncaaf/combined/ncaaf_combined_league_model.py +5 -0
  21. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/nfl/combined/nfl_combined_league_model.py +5 -0
  22. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/sportsreference/sportsreference_venue_model.py +1 -0
  23. sportsball-0.3.39/sportsball/playwright.py +20 -0
  24. {sportsball-0.3.37 → sportsball-0.3.39/sportsball.egg-info}/PKG-INFO +7 -1
  25. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball.egg-info/SOURCES.txt +7 -0
  26. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball.egg-info/requires.txt +1 -0
  27. {sportsball-0.3.37 → sportsball-0.3.39}/tests/data/combined/combined_game_model_test.py +1 -0
  28. sportsball-0.3.39/tests/data/x/__init__.py +0 -0
  29. {sportsball-0.3.37 → sportsball-0.3.39}/LICENSE +0 -0
  30. {sportsball-0.3.37 → sportsball-0.3.39}/MANIFEST.in +0 -0
  31. {sportsball-0.3.37 → sportsball-0.3.39}/setup.cfg +0 -0
  32. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/__main__.py +0 -0
  33. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/args.py +0 -0
  34. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/cache.py +0 -0
  35. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/__init__.py +0 -0
  36. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/address_model.py +0 -0
  37. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/afl/__init__.py +0 -0
  38. {sportsball-0.3.37/sportsball/data/afl/aussportsbetting → sportsball-0.3.39/sportsball/data/afl/afl}/__init__.py +0 -0
  39. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/afl/afltables/__init__.py +0 -0
  40. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/afl/afltables/afl_afltables_game_model.py +0 -0
  41. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/afl/afltables/afl_afltables_league_model.py +0 -0
  42. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/afl/afltables/afl_afltables_team_model.py +0 -0
  43. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/afl/afltables/afl_afltables_venue_model.py +0 -0
  44. {sportsball-0.3.37/sportsball/data/afl/combined → sportsball-0.3.39/sportsball/data/afl/aussportsbetting}/__init__.py +0 -0
  45. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/afl/aussportsbetting/afl_aussportsbetting_league_model.py +0 -0
  46. {sportsball-0.3.37/sportsball/data/afl/espn → sportsball-0.3.39/sportsball/data/afl/combined}/__init__.py +0 -0
  47. {sportsball-0.3.37/sportsball/data/afl/oddsportal → sportsball-0.3.39/sportsball/data/afl/espn}/__init__.py +0 -0
  48. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/afl/espn/afl_espn_league_model.py +0 -0
  49. {sportsball-0.3.37/sportsball/data/aussportsbetting → sportsball-0.3.39/sportsball/data/afl/oddsportal}/__init__.py +0 -0
  50. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/afl/oddsportal/afl_oddsportal_league_model.py +0 -0
  51. {sportsball-0.3.37/sportsball/data/combined → sportsball-0.3.39/sportsball/data/aussportsbetting}/__init__.py +0 -0
  52. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/aussportsbetting/aussportsbetting_bookie_model.py +0 -0
  53. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/aussportsbetting/aussportsbetting_league_model.py +0 -0
  54. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/aussportsbetting/aussportsbetting_odds_model.py +0 -0
  55. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/aussportsbetting/aussportsbetting_team_model.py +0 -0
  56. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/aussportsbetting/aussportsbetting_venue_model.py +0 -0
  57. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/bookie_model.py +0 -0
  58. {sportsball-0.3.37/sportsball/data/espn → sportsball-0.3.39/sportsball/data/combined}/__init__.py +0 -0
  59. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/combined/combined_address_model.py +0 -0
  60. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/combined/combined_player_model.py +0 -0
  61. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/combined/combined_venue_model.py +0 -0
  62. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/combined/combined_weather_model.py +0 -0
  63. {sportsball-0.3.37/sportsball/data/google → sportsball-0.3.39/sportsball/data/espn}/__init__.py +0 -0
  64. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/espn/espn_bookie_model.py +0 -0
  65. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/espn/espn_game_model.py +0 -0
  66. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/espn/espn_league_model.py +0 -0
  67. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/espn/espn_odds_model.py +0 -0
  68. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/espn/espn_player_model.py +0 -0
  69. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/espn/espn_team_model.py +0 -0
  70. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/espn/espn_venue_model.py +0 -0
  71. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/field_type.py +0 -0
  72. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/game_model.py +0 -0
  73. {sportsball-0.3.37/sportsball/data/nba/combined → sportsball-0.3.39/sportsball/data/google}/__init__.py +0 -0
  74. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/google/google_news_model.py +0 -0
  75. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/league.py +0 -0
  76. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/league_model.py +0 -0
  77. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/model.py +0 -0
  78. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/nba/__init__.py +0 -0
  79. {sportsball-0.3.37/sportsball/data/nba/espn → sportsball-0.3.39/sportsball/data/nba/combined}/__init__.py +0 -0
  80. {sportsball-0.3.37/sportsball/data/nba/nba → sportsball-0.3.39/sportsball/data/nba/espn}/__init__.py +0 -0
  81. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/nba/espn/nba_espn_league_model.py +0 -0
  82. {sportsball-0.3.37/sportsball/data/nba/oddsportal → sportsball-0.3.39/sportsball/data/nba/nba}/__init__.py +0 -0
  83. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/nba/nba/nba_nba_game_model.py +0 -0
  84. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/nba/nba/nba_nba_league_model.py +0 -0
  85. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/nba/nba/nba_nba_player_model.py +0 -0
  86. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/nba/nba/nba_nba_team_model.py +0 -0
  87. {sportsball-0.3.37/sportsball/data/nba/sportsdb → sportsball-0.3.39/sportsball/data/nba/oddsportal}/__init__.py +0 -0
  88. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/nba/oddsportal/nba_oddsportal_league_model.py +0 -0
  89. {sportsball-0.3.37/sportsball/data/nba/sportsreference → sportsball-0.3.39/sportsball/data/nba/sportsdb}/__init__.py +0 -0
  90. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/nba/sportsdb/nba_sportsdb_league_model.py +0 -0
  91. {sportsball-0.3.37/sportsball/data/ncaab/combined → sportsball-0.3.39/sportsball/data/nba/sportsreference}/__init__.py +0 -0
  92. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/nba/sportsreference/nba_sportsreference_league_model.py +0 -0
  93. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/ncaab/__init__.py +0 -0
  94. {sportsball-0.3.37/sportsball/data/ncaab/espn → sportsball-0.3.39/sportsball/data/ncaab/combined}/__init__.py +0 -0
  95. {sportsball-0.3.37/sportsball/data/ncaab/oddsportal → sportsball-0.3.39/sportsball/data/ncaab/espn}/__init__.py +0 -0
  96. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/ncaab/espn/ncaab_espn_league_model.py +0 -0
  97. {sportsball-0.3.37/sportsball/data/ncaab/sportsreference → sportsball-0.3.39/sportsball/data/ncaab/oddsportal}/__init__.py +0 -0
  98. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/ncaab/oddsportal/ncaab_oddsportal_league_model.py +0 -0
  99. {sportsball-0.3.37/sportsball/data/ncaaf/combined → sportsball-0.3.39/sportsball/data/ncaab/sportsreference}/__init__.py +0 -0
  100. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/ncaab/sportsreference/ncaab_sportsreference_league_model.py +0 -0
  101. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/ncaaf/__init__.py +0 -0
  102. {sportsball-0.3.37/sportsball/data/ncaaf/espn → sportsball-0.3.39/sportsball/data/ncaaf/combined}/__init__.py +0 -0
  103. {sportsball-0.3.37/sportsball/data/ncaaf/oddsportal → sportsball-0.3.39/sportsball/data/ncaaf/espn}/__init__.py +0 -0
  104. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/ncaaf/espn/ncaaf_espn_league_model.py +0 -0
  105. {sportsball-0.3.37/sportsball/data/nfl/aussportsbetting → sportsball-0.3.39/sportsball/data/ncaaf/oddsportal}/__init__.py +0 -0
  106. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/ncaaf/oddsportal/ncaaf_oddsportal_league_model.py +0 -0
  107. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/news_model.py +0 -0
  108. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/nfl/__init__.py +0 -0
  109. {sportsball-0.3.37/sportsball/data/nfl/combined → sportsball-0.3.39/sportsball/data/nfl/aussportsbetting}/__init__.py +0 -0
  110. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/nfl/aussportsbetting/nfl_aussportsbetting_league_model.py +0 -0
  111. {sportsball-0.3.37/sportsball/data/nfl/oddsportal → sportsball-0.3.39/sportsball/data/nfl/combined}/__init__.py +0 -0
  112. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/nfl/espn/__init__.py +0 -0
  113. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/nfl/espn/nfl_espn_league_model.py +0 -0
  114. {sportsball-0.3.37/sportsball/data/nfl/sportsdb → sportsball-0.3.39/sportsball/data/nfl/oddsportal}/__init__.py +0 -0
  115. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/nfl/oddsportal/nfl_oddsportal_league_model.py +0 -0
  116. {sportsball-0.3.37/sportsball/data/oddsportal → sportsball-0.3.39/sportsball/data/nfl/sportsdb}/__init__.py +0 -0
  117. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/nfl/sportsdb/nfl_sportsdb_league_model.py +0 -0
  118. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/odds_model.py +0 -0
  119. {sportsball-0.3.37/sportsball/data/sportsdb → sportsball-0.3.39/sportsball/data/oddsportal}/__init__.py +0 -0
  120. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/oddsportal/decrypt.py +0 -0
  121. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/oddsportal/oddsportal_bookie_model.py +0 -0
  122. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/oddsportal/oddsportal_game_model.py +0 -0
  123. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/oddsportal/oddsportal_league_model.py +0 -0
  124. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/oddsportal/oddsportal_odds_model.py +0 -0
  125. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/oddsportal/oddsportal_team_model.py +0 -0
  126. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/oddsportal/oddsportal_venue_model.py +0 -0
  127. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/player_model.py +0 -0
  128. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/season_type.py +0 -0
  129. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/social_model.py +0 -0
  130. {sportsball-0.3.37/sportsball/data/sportsreference → sportsball-0.3.39/sportsball/data/sportsdb}/__init__.py +0 -0
  131. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/sportsdb/sportsdb_game_model.py +0 -0
  132. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/sportsdb/sportsdb_league_model.py +0 -0
  133. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/sportsdb/sportsdb_team_model.py +0 -0
  134. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/sportsdb/sportsdb_venue_model.py +0 -0
  135. {sportsball-0.3.37/sportsball/data/weather → sportsball-0.3.39/sportsball/data/sportsreference}/__init__.py +0 -0
  136. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/sportsreference/sportsreference_game_model.py +0 -0
  137. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/sportsreference/sportsreference_league_model.py +0 -0
  138. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/sportsreference/sportsreference_player_model.py +0 -0
  139. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/sportsreference/sportsreference_team_model.py +0 -0
  140. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/team_model.py +0 -0
  141. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/venue_model.py +0 -0
  142. {sportsball-0.3.37/sportsball/data/weather/gribstream → sportsball-0.3.39/sportsball/data/weather}/__init__.py +0 -0
  143. {sportsball-0.3.37/sportsball/data/weather/openmeteo → sportsball-0.3.39/sportsball/data/weather/gribstream}/__init__.py +0 -0
  144. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/weather/gribstream/gribstream_weather_model.py +0 -0
  145. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/weather/multi_weather_model.py +0 -0
  146. {sportsball-0.3.37/sportsball/data/wikipedia → sportsball-0.3.39/sportsball/data/weather/openmeteo}/__init__.py +0 -0
  147. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/weather/openmeteo/openmeteo_weather_model.py +0 -0
  148. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/weather_model.py +0 -0
  149. {sportsball-0.3.37/sportsball/data/x → sportsball-0.3.39/sportsball/data/wikipedia}/__init__.py +0 -0
  150. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/wikipedia/wikipedia_venue_model.py +0 -0
  151. {sportsball-0.3.37/sportsball/vendor → sportsball-0.3.39/sportsball/data/x}/__init__.py +0 -0
  152. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/data/x/x_social_model.py +0 -0
  153. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/logger.py +0 -0
  154. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/loglevel.py +0 -0
  155. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/proxy_session.py +0 -0
  156. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/session.py +0 -0
  157. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/sportsball.py +0 -0
  158. {sportsball-0.3.37/tests → sportsball-0.3.39/sportsball/vendor}/__init__.py +0 -0
  159. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball/vendor/pygooglenews/__init__.py +0 -0
  160. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball.egg-info/dependency_links.txt +0 -0
  161. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball.egg-info/entry_points.txt +0 -0
  162. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball.egg-info/not-zip-safe +0 -0
  163. {sportsball-0.3.37 → sportsball-0.3.39}/sportsball.egg-info/top_level.txt +0 -0
  164. {sportsball-0.3.37/tests/data → sportsball-0.3.39/tests}/__init__.py +0 -0
  165. {sportsball-0.3.37/tests/data/afl → sportsball-0.3.39/tests/data}/__init__.py +0 -0
  166. {sportsball-0.3.37/tests/data/afl/afltables → sportsball-0.3.39/tests/data/afl}/__init__.py +0 -0
  167. {sportsball-0.3.37/tests/data/aussportsbetting → sportsball-0.3.39/tests/data/afl/afltables}/__init__.py +0 -0
  168. {sportsball-0.3.37 → sportsball-0.3.39}/tests/data/afl/afltables/afl_afltables_game_model_test.py +0 -0
  169. {sportsball-0.3.37 → sportsball-0.3.39}/tests/data/afl/afltables/afl_afltables_league_model_test.py +0 -0
  170. {sportsball-0.3.37 → sportsball-0.3.39}/tests/data/afl/afltables/afl_afltables_player_model_test.py +0 -0
  171. {sportsball-0.3.37/tests/data/combined → sportsball-0.3.39/tests/data/aussportsbetting}/__init__.py +0 -0
  172. {sportsball-0.3.37 → sportsball-0.3.39}/tests/data/aussportsbetting/aussportsbetting_game_model_test.py +0 -0
  173. {sportsball-0.3.37/tests/data/espn → sportsball-0.3.39/tests/data/combined}/__init__.py +0 -0
  174. {sportsball-0.3.37 → sportsball-0.3.39}/tests/data/combined/combined_player_model_test.py +0 -0
  175. {sportsball-0.3.37/tests/data/google → sportsball-0.3.39/tests/data/espn}/__init__.py +0 -0
  176. {sportsball-0.3.37 → sportsball-0.3.39}/tests/data/espn/espn_game_model_test.py +0 -0
  177. {sportsball-0.3.37 → sportsball-0.3.39}/tests/data/espn/espn_player_model_test.py +0 -0
  178. {sportsball-0.3.37 → sportsball-0.3.39}/tests/data/game_model_test.py +0 -0
  179. {sportsball-0.3.37/tests/data/nba → sportsball-0.3.39/tests/data/google}/__init__.py +0 -0
  180. {sportsball-0.3.37 → sportsball-0.3.39}/tests/data/google/google_address_model_test.py +0 -0
  181. {sportsball-0.3.37 → sportsball-0.3.39}/tests/data/google/google_news_model_test.py +0 -0
  182. {sportsball-0.3.37/tests/data/nba → sportsball-0.3.39/tests/data}/nba/__init__.py +0 -0
  183. {sportsball-0.3.37/tests/data/nba/sportsdb → sportsball-0.3.39/tests/data/nba/nba}/__init__.py +0 -0
  184. {sportsball-0.3.37 → sportsball-0.3.39}/tests/data/nba/nba/nba_nba_game_model_test.py +0 -0
  185. {sportsball-0.3.37 → sportsball-0.3.39}/tests/data/nba/nba/nba_nba_league_model_test.py +0 -0
  186. {sportsball-0.3.37 → sportsball-0.3.39}/tests/data/nba/nba/nba_nba_player_model_test.py +0 -0
  187. {sportsball-0.3.37 → sportsball-0.3.39}/tests/data/nba/nba/nba_nba_team_model_test.py +0 -0
  188. {sportsball-0.3.37/tests/data/nba/sportsreference → sportsball-0.3.39/tests/data/nba/sportsdb}/__init__.py +0 -0
  189. {sportsball-0.3.37 → sportsball-0.3.39}/tests/data/nba/sportsdb/nba_sportsdb_league_model_test.py +0 -0
  190. {sportsball-0.3.37/tests/data/ncaab → sportsball-0.3.39/tests/data/nba/sportsreference}/__init__.py +0 -0
  191. {sportsball-0.3.37 → sportsball-0.3.39}/tests/data/nba/sportsreference/nba_sportsreference_league_model_test.py +0 -0
  192. {sportsball-0.3.37/tests/data/ncaab/sportsreference → sportsball-0.3.39/tests/data/ncaab}/__init__.py +0 -0
  193. {sportsball-0.3.37/tests/data/nfl → sportsball-0.3.39/tests/data/ncaab/sportsreference}/__init__.py +0 -0
  194. {sportsball-0.3.37 → sportsball-0.3.39}/tests/data/ncaab/sportsreference/ncaab_sportsreference_league_model_test.py +0 -0
  195. {sportsball-0.3.37/tests/data/nfl/sportsdb → sportsball-0.3.39/tests/data/nfl}/__init__.py +0 -0
  196. {sportsball-0.3.37/tests/data/oddsportal → sportsball-0.3.39/tests/data/nfl/sportsdb}/__init__.py +0 -0
  197. {sportsball-0.3.37 → sportsball-0.3.39}/tests/data/nfl/sportsdb/nfl_sportsdb_league_model_test.py +0 -0
  198. {sportsball-0.3.37/tests/data/sportsdb → sportsball-0.3.39/tests/data/oddsportal}/__init__.py +0 -0
  199. {sportsball-0.3.37 → sportsball-0.3.39}/tests/data/oddsportal/decrypt_test.py +0 -0
  200. {sportsball-0.3.37 → sportsball-0.3.39}/tests/data/oddsportal/oddsportal_game_model_test.py +0 -0
  201. {sportsball-0.3.37 → sportsball-0.3.39}/tests/data/oddsportal/oddsportal_league_model_test.py +0 -0
  202. {sportsball-0.3.37 → sportsball-0.3.39}/tests/data/player_model_test.py +0 -0
  203. {sportsball-0.3.37 → sportsball-0.3.39}/tests/data/social_model_test.py +0 -0
  204. {sportsball-0.3.37/tests/data/sportsreference → sportsball-0.3.39/tests/data/sportsdb}/__init__.py +0 -0
  205. {sportsball-0.3.37 → sportsball-0.3.39}/tests/data/sportsdb/sportsdb_game_model_test.py +0 -0
  206. {sportsball-0.3.37 → sportsball-0.3.39}/tests/data/sportsdb/sportsdb_league_model_test.py +0 -0
  207. {sportsball-0.3.37 → sportsball-0.3.39}/tests/data/sportsdb/sportsdb_team_model_test.py +0 -0
  208. {sportsball-0.3.37 → sportsball-0.3.39}/tests/data/sportsdb/sportsdb_venue_model_test.py +0 -0
  209. {sportsball-0.3.37/tests/data/x → sportsball-0.3.39/tests/data/sportsreference}/__init__.py +0 -0
  210. {sportsball-0.3.37 → sportsball-0.3.39}/tests/data/sportsreference/sportsreference_game_model_test.py +0 -0
  211. {sportsball-0.3.37 → sportsball-0.3.39}/tests/data/sportsreference/sportsreference_league_model_test.py +0 -0
  212. {sportsball-0.3.37 → sportsball-0.3.39}/tests/data/sportsreference/sportsreference_player_model_test.py +0 -0
  213. {sportsball-0.3.37 → sportsball-0.3.39}/tests/data/sportsreference/sportsreference_team_model_test.py +0 -0
  214. {sportsball-0.3.37 → sportsball-0.3.39}/tests/data/sportsreference/sportsreference_venue_model_test.py +0 -0
  215. {sportsball-0.3.37 → sportsball-0.3.39}/tests/data/team_model_test.py +0 -0
  216. {sportsball-0.3.37 → sportsball-0.3.39}/tests/data/x/x_social_model_test.py +0 -0
  217. {sportsball-0.3.37 → sportsball-0.3.39}/tests/proxy_session_test.py +0 -0
  218. {sportsball-0.3.37 → sportsball-0.3.39}/tests/sportsball_test.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: sportsball
3
- Version: 0.3.37
3
+ Version: 0.3.39
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
@@ -43,6 +43,7 @@ Requires-Dist: wayback>=0.4.5
43
43
  Requires-Dist: cryptography>=44.0.0
44
44
  Requires-Dist: feedparser>=6.0.11
45
45
  Requires-Dist: dateparser>=1.2.0
46
+ Requires-Dist: playwright>=1.51.0
46
47
  Dynamic: author
47
48
  Dynamic: author-email
48
49
  Dynamic: classifier
@@ -101,6 +102,7 @@ Python 3.11.6:
101
102
  - [cryptography](https://cryptography.io/en/latest/)
102
103
  - [feedparser](https://github.com/kurtmckee/feedparser)
103
104
  - [dateparser](https://dateparser.readthedocs.io/en/latest/)
105
+ - [playwright](https://playwright.dev/)
104
106
 
105
107
  ## Raison D'être :thought_balloon:
106
108
 
@@ -264,6 +266,10 @@ This is a python package hosted on pypi, so to install simply run the following
264
266
 
265
267
  `pip install sportsball`
266
268
 
269
+ or install using this local repository:
270
+
271
+ `python setup.py install --old-and-unmanageable`
272
+
267
273
  ## Usage example :eyes:
268
274
 
269
275
  There are many different ways of using sportsball, but we generally recommend the CLI.
@@ -45,6 +45,7 @@ Python 3.11.6:
45
45
  - [cryptography](https://cryptography.io/en/latest/)
46
46
  - [feedparser](https://github.com/kurtmckee/feedparser)
47
47
  - [dateparser](https://dateparser.readthedocs.io/en/latest/)
48
+ - [playwright](https://playwright.dev/)
48
49
 
49
50
  ## Raison D'être :thought_balloon:
50
51
 
@@ -208,6 +209,10 @@ This is a python package hosted on pypi, so to install simply run the following
208
209
 
209
210
  `pip install sportsball`
210
211
 
212
+ or install using this local repository:
213
+
214
+ `python setup.py install --old-and-unmanageable`
215
+
211
216
  ## Usage example :eyes:
212
217
 
213
218
  There are many different ways of using sportsball, but we generally recommend the CLI.
@@ -30,3 +30,4 @@ wayback>=0.4.5
30
30
  cryptography>=44.0.0
31
31
  feedparser>=6.0.11
32
32
  dateparser>=1.2.0
33
+ playwright>=1.51.0
@@ -26,7 +26,7 @@ def install_requires() -> typing.List[str]:
26
26
 
27
27
  setup(
28
28
  name='sportsball',
29
- version='0.3.37',
29
+ version='0.3.39',
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.37"
3
+ __VERSION__ = "0.3.39"
@@ -0,0 +1,40 @@
1
+ """AFL AFL game model."""
2
+
3
+ # pylint: disable=too-many-statements,protected-access
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]]],
17
+ dt: datetime.datetime,
18
+ venue_name: str,
19
+ session: requests_cache.CachedSession,
20
+ ) -> GameModel:
21
+ """Create a game model from AFL Tables."""
22
+ venue_model = create_afl_afl_venue_model(venue_name, session, dt)
23
+ teams = [
24
+ create_afl_afl_team_model(x, players[count], session, dt)
25
+ for count, x in enumerate(team_names)
26
+ ]
27
+ return GameModel(
28
+ dt=dt,
29
+ week=None,
30
+ game_number=None,
31
+ venue=venue_model,
32
+ teams=teams,
33
+ end_dt=None,
34
+ attendance=None,
35
+ league=League.AFL,
36
+ year=datetime.datetime.today().year,
37
+ season_type=None,
38
+ postponed=None,
39
+ play_off=None,
40
+ )
@@ -0,0 +1,87 @@
1
+ """AFL AFL league model."""
2
+
3
+ # pylint: disable=too-many-statements,protected-access,too-many-locals
4
+ import datetime
5
+ import re
6
+ from typing import Iterator
7
+
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 ...league_model import LeagueModel
16
+ from .afl_afl_game_model import create_afl_afl_game_model
17
+
18
+
19
+ class AFLAFLLeagueModel(LeagueModel):
20
+ """AFL AFL implementation of the league model."""
21
+
22
+ def __init__(
23
+ self, session: requests_cache.CachedSession, position: int | None = None
24
+ ) -> None:
25
+ super().__init__(League.AFL, session)
26
+
27
+ @property
28
+ def games(self) -> Iterator[GameModel]:
29
+ # https://www.afl.com.au/matches/team-lineups
30
+ ensure_install()
31
+ with sync_playwright() as p:
32
+ browser = p.chromium.launch()
33
+ context = browser.new_context()
34
+ page = context.new_page()
35
+ page.goto(
36
+ "https://www.afl.com.au/matches/team-lineups", wait_until="networkidle"
37
+ )
38
+ soup = BeautifulSoup(page.content(), "html.parser")
39
+ for div in soup.find_all(
40
+ "div", {"class": re.compile(".*js-match-list-item.*")}
41
+ ):
42
+ team_names = []
43
+ for span in div.find_all(
44
+ "span", {"class": re.compile(".*team-lineups__team-name.*")}
45
+ ):
46
+ team_names.append(span.get_text().strip())
47
+ teams_players: list[list[tuple[str, str]]] = []
48
+ for div_team_players in div.find_all(
49
+ "div", {"class": re.compile(".*team-lineups__positions-players.*")}
50
+ ):
51
+ team_players: list[tuple[str, str]] = []
52
+ for a in div_team_players.find_all(
53
+ "a", {"class": re.compile(".*js-player-profile-link.*")}
54
+ ):
55
+ player_id = "afl:" + a.get("data-player-id")
56
+ player_number = None
57
+ for span_player_number in a.find_all(
58
+ "span",
59
+ {"class": re.compile(".*team-lineups__player-number.*")},
60
+ ):
61
+ player_number = (
62
+ span_player_number.get_text()
63
+ .strip()
64
+ .replace("[", "")
65
+ .replace("]", "")
66
+ )
67
+ if player_number is None:
68
+ raise ValueError("player_number is null")
69
+ team_players.append((player_id, player_number))
70
+ teams_players.append(team_players)
71
+ dt = None
72
+ for time in div.find_all(
73
+ "time", {"class": re.compile(".*match-list-alt__header-time.*")}
74
+ ):
75
+ dt = datetime.datetime.fromtimestamp(float(time.get("data-date")))
76
+ venue_name: str | None = None
77
+ for span in div.find_all(
78
+ "span", {"class": re.compile(".*match-list-alt__header-venue.*")}
79
+ ):
80
+ venue_name = span.get_text().strip()
81
+ if venue_name is None:
82
+ raise ValueError("venue_name is null")
83
+ if dt is None:
84
+ raise ValueError("dt is null")
85
+ yield create_afl_afl_game_model(
86
+ team_names, teams_players, dt, venue_name, self.session
87
+ )
@@ -0,0 +1,22 @@
1
+ """AFL AFL player model."""
2
+
3
+ from ...player_model import PlayerModel
4
+
5
+
6
+ def create_afl_afl_player_model(
7
+ identifier: str,
8
+ player_number: str,
9
+ ) -> PlayerModel:
10
+ """Create a player model from AFL AFL."""
11
+ return PlayerModel(
12
+ identifier=identifier,
13
+ jersey=player_number,
14
+ kicks=None,
15
+ fumbles=None,
16
+ fumbles_lost=None,
17
+ field_goals=None,
18
+ field_goals_attempted=None,
19
+ offensive_rebounds=None,
20
+ assists=None,
21
+ turnovers=None,
22
+ )
@@ -0,0 +1,41 @@
1
+ """AFL AFL team model."""
2
+
3
+ # pylint: disable=duplicate-code
4
+ import datetime
5
+
6
+ import requests_cache
7
+
8
+ from ...google.google_news_model import create_google_news_models
9
+ from ...league import League
10
+ from ...team_model import TeamModel
11
+ from .afl_afl_player_model import create_afl_afl_player_model
12
+
13
+
14
+ def create_afl_afl_team_model(
15
+ team_name: str,
16
+ players: list[tuple[str, str]],
17
+ session: requests_cache.CachedSession,
18
+ dt: datetime.datetime,
19
+ ) -> TeamModel:
20
+ """Create a team model from AFL AFL."""
21
+ player_models = [
22
+ create_afl_afl_player_model(identifier, player_number)
23
+ for identifier, player_number in players
24
+ ]
25
+ return TeamModel(
26
+ identifier=team_name,
27
+ name=team_name,
28
+ location=None,
29
+ players=player_models,
30
+ odds=[],
31
+ points=None,
32
+ ladder_rank=None,
33
+ kicks=None,
34
+ news=create_google_news_models(team_name, session, dt, League.AFL),
35
+ social=[],
36
+ field_goals=None,
37
+ field_goals_attempted=None,
38
+ offensive_rebounds=None,
39
+ assists=None,
40
+ turnovers=None,
41
+ )
@@ -0,0 +1,25 @@
1
+ """AFL AFL venue model."""
2
+
3
+ # pylint: disable=too-many-statements,protected-access
4
+ import datetime
5
+
6
+ import requests_cache
7
+
8
+ from ...google.google_address_model import create_google_address_model
9
+ from ...venue_model import VenueModel
10
+
11
+
12
+ def create_afl_afl_venue_model(
13
+ venue_name: str,
14
+ session: requests_cache.CachedSession,
15
+ dt: datetime.datetime,
16
+ ) -> VenueModel:
17
+ """Create a game model from AFL Tables."""
18
+ address_model = create_google_address_model(venue_name, session, dt)
19
+ return VenueModel(
20
+ identifier=venue_name,
21
+ name=venue_name,
22
+ address=address_model,
23
+ is_grass=None,
24
+ is_indoor=None,
25
+ )
@@ -1,6 +1,6 @@
1
1
  """AFL AFLTables player model."""
2
2
 
3
- # pylint: disable=line-too-long
3
+ # pylint: disable=line-too-long,duplicate-code
4
4
  import datetime
5
5
  import os
6
6
  from urllib.parse import urlparse
@@ -4,6 +4,7 @@ import requests_cache
4
4
 
5
5
  from ...combined.combined_league_model import CombinedLeagueModel
6
6
  from ...league import League
7
+ from ..afl.afl_afl_league_model import AFLAFLLeagueModel
7
8
  from ..afltables.afl_afltables_league_model import AFLAFLTablesLeagueModel
8
9
  from ..aussportsbetting.afl_aussportsbetting_league_model import \
9
10
  AFLAusSportsBettingLeagueModel
@@ -195,6 +196,7 @@ AFL_VENUE_IDENTITY_MAP = {
195
196
  "riverway": RIVERWAY,
196
197
  "norwood": NORWOOD,
197
198
  "summit": SUMMIT,
199
+ "barossa": BAROSSA_PARK,
198
200
  # Aus Sports Betting
199
201
  "MCG": MCG,
200
202
  "SCG": SCG,
@@ -240,6 +242,7 @@ AFL_VENUE_IDENTITY_MAP = {
240
242
  "Ondrej Nepela Arena": TIPOS_ARENA,
241
243
  "Barossa Park": BAROSSA_PARK,
242
244
  }
245
+ AFL_TEAM_IDENTITY_MAP = {}
243
246
 
244
247
 
245
248
  class AFLCombinedLeagueModel(CombinedLeagueModel):
@@ -254,6 +257,7 @@ class AFLCombinedLeagueModel(CombinedLeagueModel):
254
257
  AFLESPNLeagueModel(session, position=1),
255
258
  AFLAusSportsBettingLeagueModel(session, position=2),
256
259
  AFLOddsPortalLeagueModel(session, position=3),
260
+ AFLAFLLeagueModel(session, position=4),
257
261
  ],
258
262
  )
259
263
 
@@ -264,3 +268,7 @@ class AFLCombinedLeagueModel(CombinedLeagueModel):
264
268
  @classmethod
265
269
  def venue_identity_map(cls) -> dict[str, str]:
266
270
  return AFL_VENUE_IDENTITY_MAP
271
+
272
+ @classmethod
273
+ def player_identity_map(cls) -> dict[str, str]:
274
+ return AFL_TEAM_IDENTITY_MAP
@@ -1,6 +1,6 @@
1
1
  """Aussportsbetting game model."""
2
2
 
3
- # pylint: disable=too-many-arguments
3
+ # pylint: disable=too-many-arguments,duplicate-code
4
4
  import datetime
5
5
 
6
6
  import pytest_is_running
@@ -34,6 +34,7 @@ def _venue_models(
34
34
  def _team_models(
35
35
  game_models: list[GameModel],
36
36
  team_identity_map: dict[str, str],
37
+ player_identity_map: dict[str, str],
37
38
  ) -> list[TeamModel]:
38
39
  team_models: dict[str, list[TeamModel]] = {}
39
40
  for game_model in game_models:
@@ -50,7 +51,7 @@ def _team_models(
50
51
  team_model
51
52
  ]
52
53
  return [
53
- create_combined_team_model(v, k) # pyright: ignore
54
+ create_combined_team_model(v, k, player_identity_map) # pyright: ignore
54
55
  for k, v in team_models.items()
55
56
  ]
56
57
 
@@ -59,11 +60,12 @@ def create_combined_game_model(
59
60
  game_models: list[GameModel],
60
61
  venue_identity_map: dict[str, str],
61
62
  team_identity_map: dict[str, str],
63
+ player_identity_map: dict[str, str],
62
64
  session: requests.Session,
63
65
  ) -> GameModel:
64
66
  """Create a game model by combining many game models."""
65
67
  venue_models, full_venue_identity = _venue_models(game_models, venue_identity_map)
66
- full_team_models = _team_models(game_models, team_identity_map)
68
+ full_team_models = _team_models(game_models, team_identity_map, player_identity_map)
67
69
  attendance = None
68
70
  end_dt = None
69
71
  year = None
@@ -44,6 +44,13 @@ class CombinedLeagueModel(LeagueModel):
44
44
  "venue_identity_map not implemented on CombinedLeagueModel parent class."
45
45
  )
46
46
 
47
+ @classmethod
48
+ def player_identity_map(cls) -> dict[str, str]:
49
+ """A map to resolve the different player identities to a consistent identity."""
50
+ raise NotImplementedError(
51
+ "player_identity_map not implemented on CombinedLeagueModel parent class."
52
+ )
53
+
47
54
  @property
48
55
  def games(self) -> Iterator[GameModel]:
49
56
  games: dict[str, list[GameModel]] = {}
@@ -85,5 +92,6 @@ class CombinedLeagueModel(LeagueModel):
85
92
  game_models,
86
93
  self.venue_identity_map(),
87
94
  team_identity_map,
95
+ self.player_identity_map(),
88
96
  self.session,
89
97
  )
@@ -1,6 +1,8 @@
1
1
  """Combined team model."""
2
2
 
3
3
  # pylint: disable=too-many-locals
4
+ import logging
5
+
4
6
  from ..news_model import NewsModel
5
7
  from ..odds_model import OddsModel
6
8
  from ..player_model import PlayerModel
@@ -12,6 +14,7 @@ from .combined_player_model import create_combined_player_model
12
14
  def create_combined_team_model(
13
15
  team_models: list[TeamModel],
14
16
  identifier: str,
17
+ player_identity_map: dict[str, str],
15
18
  ) -> TeamModel:
16
19
  """Create a team model by combining many team models."""
17
20
  location = None
@@ -27,9 +30,16 @@ def create_combined_team_model(
27
30
  if team_model_location is not None:
28
31
  location = team_model_location
29
32
  for player_model in team_model.players:
33
+ player_id = player_model.identifier
34
+ if player_model.identifier not in player_identity_map:
35
+ logging.warning(
36
+ "Failed to find %s player identifier.", player_model.identifier
37
+ )
38
+ else:
39
+ player_id = player_identity_map[player_id]
30
40
  key = player_model.jersey
31
41
  if key is None:
32
- key = player_model.identifier
42
+ key = player_id
33
43
  players[key] = players.get(key, []) + [player_model]
34
44
  for odds_model in team_model.odds:
35
45
  key = f"{odds_model.bookie.identifier}-{odds_model.odds}"
@@ -2152,6 +2152,33 @@ WELLNESS_AND_EVENTS_CENTER = SportsballGeocodeTuple(
2152
2152
  housenumber="100",
2153
2153
  country="USA",
2154
2154
  )
2155
+ CIVIC_ARENA = SportsballGeocodeTuple(
2156
+ city="Pittsburgh",
2157
+ state="PA",
2158
+ postal="15219",
2159
+ lat=40.441667,
2160
+ lng=-79.99,
2161
+ housenumber="66",
2162
+ country="USA",
2163
+ )
2164
+ SIMMONS_BANK_ARENA = SportsballGeocodeTuple(
2165
+ city="North Little Rock",
2166
+ state="AR",
2167
+ postal="72114",
2168
+ lat=34.755111,
2169
+ lng=-92.264439,
2170
+ housenumber="1",
2171
+ country="USA",
2172
+ )
2173
+ BOK_CENTER = SportsballGeocodeTuple(
2174
+ city="Tulsa",
2175
+ state="OK",
2176
+ postal="",
2177
+ lat=36.152722,
2178
+ lng=-95.996333,
2179
+ housenumber="200",
2180
+ country="USA",
2181
+ )
2155
2182
  _CACHED_GEOCODES: dict[str, Any] = {
2156
2183
  "S.C.G. - Australia": SCG,
2157
2184
  "Victoria Park - Australia": SportsballGeocodeTuple(
@@ -6856,15 +6883,7 @@ _CACHED_GEOCODES: dict[str, Any] = {
6856
6883
  country="USA",
6857
6884
  ),
6858
6885
  "Footprint Center, Phoenix, Arizona": AMERICA_WEST_ARENA,
6859
- "Simmons Bank Arena, North Little Rock, Arkansas": SportsballGeocodeTuple(
6860
- city="North Little Rock",
6861
- state="AR",
6862
- postal="72114",
6863
- lat=34.755111,
6864
- lng=-92.264439,
6865
- housenumber="1",
6866
- country="USA",
6867
- ),
6886
+ "Simmons Bank Arena, North Little Rock, Arkansas": SIMMONS_BANK_ARENA,
6868
6887
  "FLA Live Arena, Sunrise, Florida": SportsballGeocodeTuple(
6869
6888
  city="Sunrise",
6870
6889
  state="FL",
@@ -8221,15 +8240,7 @@ _CACHED_GEOCODES: dict[str, Any] = {
8221
8240
  "Kaseya Center - Miami, Florida - United States": KASEYA_CENTER,
8222
8241
  "Frost Bank Center - San Antonio, Texas - United States": FROST_BANK_CENTER,
8223
8242
  "Moda Center - Portland, Oregon - United States": MODA_CENTER,
8224
- "BOK Center - Tulsa, Oklahoma - United States": SportsballGeocodeTuple(
8225
- city="Tulsa",
8226
- state="OK",
8227
- postal="",
8228
- lat=36.152722,
8229
- lng=-95.996333,
8230
- housenumber="200",
8231
- country="USA",
8232
- ),
8243
+ "BOK Center - Tulsa, Oklahoma - United States": BOK_CENTER,
8233
8244
  "Capital One Arena - Washington DC, USA - United States": CAPITAL_ONE_ARENA,
8234
8245
  "The Palace of Auburn Hills, Auburn Hills, MI, USA": THE_PALACE_OF_AUBURN_HILLS,
8235
8246
  "BMO Harris Bradley Center, Milwaukee, WI, USA": BRADLEY_CENTER,
@@ -10578,15 +10589,7 @@ _CACHED_GEOCODES: dict[str, Any] = {
10578
10589
  housenumber="260",
10579
10590
  country="USA",
10580
10591
  ),
10581
- "Pittsburgh Civic Arena, Pittsburgh, Pennsylvania": SportsballGeocodeTuple(
10582
- city="Pittsburgh",
10583
- state="PA",
10584
- postal="15219",
10585
- lat=40.441667,
10586
- lng=-79.99,
10587
- housenumber="66",
10588
- country="USA",
10589
- ),
10592
+ "Pittsburgh Civic Arena, Pittsburgh, Pennsylvania": CIVIC_ARENA,
10590
10593
  "Curtis Hixon Hall, Tampa, Florida": SportsballGeocodeTuple(
10591
10594
  city="Tampa",
10592
10595
  state="FL",
@@ -12079,6 +12082,75 @@ _CACHED_GEOCODES: dict[str, Any] = {
12079
12082
  housenumber="",
12080
12083
  country="USA",
12081
12084
  ),
12085
+ "Barossa Oval - Australia": BAROSSA_PARK,
12086
+ "Civic Arena, Pittsburgh, Pennsylvania": CIVIC_ARENA,
12087
+ "Verizon Arena, North Little Rock, Arkansas": SIMMONS_BANK_ARENA,
12088
+ "BB&T Center, Sunrise, Florida": SportsballGeocodeTuple(
12089
+ city="Sunrise",
12090
+ state="FL",
12091
+ postal="",
12092
+ lat=26.158333,
12093
+ lng=-80.325556,
12094
+ housenumber="1",
12095
+ country="USA",
12096
+ ),
12097
+ "BOK Center, Tulsa, Oklahoma": BOK_CENTER,
12098
+ "Alamodome, San Antonio, TX, USA": ALAMODOME,
12099
+ "KeyArena, Seattle, Washington": CLIMATE_PLEDGE_ARENA,
12100
+ "Naples, Florida": SportsballGeocodeTuple(
12101
+ city="Naples",
12102
+ state="FL",
12103
+ postal="",
12104
+ lat=26.136111,
12105
+ lng=-81.794444,
12106
+ housenumber="",
12107
+ country="USA",
12108
+ ),
12109
+ "Henrico Sports & Events Center, Henrico, Virginia": SportsballGeocodeTuple(
12110
+ city="Henrico",
12111
+ state="VA",
12112
+ postal="23059",
12113
+ lat=37.6771948,
12114
+ lng=-77.4528141,
12115
+ housenumber="1",
12116
+ country="USA",
12117
+ ),
12118
+ "College Park, Georgia": SportsballGeocodeTuple(
12119
+ city="College Park",
12120
+ state="GA",
12121
+ postal="",
12122
+ lat=33.6175,
12123
+ lng=-84.4675,
12124
+ housenumber="",
12125
+ country="USA",
12126
+ ),
12127
+ "Ralston, Nebraska": SportsballGeocodeTuple(
12128
+ city="Ralston",
12129
+ state="NB",
12130
+ postal="",
12131
+ lat=41.200556,
12132
+ lng=-96.035556,
12133
+ housenumber="",
12134
+ country="USA",
12135
+ ),
12136
+ "Bill Greehey Arena, San Antonio, Texas": SportsballGeocodeTuple(
12137
+ city="San Antonio",
12138
+ state="TX",
12139
+ postal="78228",
12140
+ lat=29.451858,
12141
+ lng=-98.5643022,
12142
+ housenumber="1",
12143
+ country="USA",
12144
+ ),
12145
+ "Hartsell Arena, Pensacola, Florida": SportsballGeocodeTuple(
12146
+ city="Pensacola",
12147
+ state="FL",
12148
+ postal="32504",
12149
+ lat=30.4793276,
12150
+ lng=-87.1995723,
12151
+ housenumber="",
12152
+ country="USA",
12153
+ ),
12082
12154
  }
12083
12155
 
12084
12156
 
@@ -884,6 +884,7 @@ NBA_VENUE_IDENTITY_MAP: dict[str, str] = {
884
884
  "24838": SPECTRUM_CENTER,
885
885
  "28619": KASEYA_CENTER,
886
886
  }
887
+ NBA_PLAYER_IDENTITY_MAP: dict[str, str] = {}
887
888
 
888
889
 
889
890
  class NBACombinedLeagueModel(CombinedLeagueModel):
@@ -909,3 +910,7 @@ class NBACombinedLeagueModel(CombinedLeagueModel):
909
910
  @classmethod
910
911
  def venue_identity_map(cls) -> dict[str, str]:
911
912
  return NBA_VENUE_IDENTITY_MAP
913
+
914
+ @classmethod
915
+ def player_identity_map(cls) -> dict[str, str]:
916
+ return NBA_PLAYER_IDENTITY_MAP
@@ -741,6 +741,7 @@ NCAAB_TEAM_IDENTITY_MAP: dict[str, str] = {
741
741
  "Wagner Seahawks Men's": WAGNER_SEAHAWKS,
742
742
  }
743
743
  NCAAB_VENUE_IDENTITY_MAP: dict[str, str] = {}
744
+ NCAAB_PLAYER_IDENTITY_MAP: dict[str, str] = {}
744
745
 
745
746
 
746
747
  class NCAABCombinedLeagueModel(CombinedLeagueModel):
@@ -764,3 +765,7 @@ class NCAABCombinedLeagueModel(CombinedLeagueModel):
764
765
  @classmethod
765
766
  def venue_identity_map(cls) -> dict[str, str]:
766
767
  return NCAAB_VENUE_IDENTITY_MAP
768
+
769
+ @classmethod
770
+ def player_identity_map(cls) -> dict[str, str]:
771
+ return NCAAB_PLAYER_IDENTITY_MAP
@@ -10,6 +10,7 @@ from ..oddsportal.ncaaf_oddsportal_league_model import \
10
10
 
11
11
  NCAAF_TEAM_IDENTITY_MAP: dict[str, str] = {}
12
12
  NCAAF_VENUE_IDENTITY_MAP: dict[str, str] = {}
13
+ NCAAF_PLAYER_IDENTITY_MAP: dict[str, str] = {}
13
14
 
14
15
 
15
16
  class NCAAFCombinedLeagueModel(CombinedLeagueModel):
@@ -32,3 +33,7 @@ class NCAAFCombinedLeagueModel(CombinedLeagueModel):
32
33
  @classmethod
33
34
  def venue_identity_map(cls) -> dict[str, str]:
34
35
  return NCAAF_VENUE_IDENTITY_MAP
36
+
37
+ @classmethod
38
+ def player_identity_map(cls) -> dict[str, str]:
39
+ return NCAAF_PLAYER_IDENTITY_MAP
@@ -370,6 +370,7 @@ NFL_VENUE_IDENTITY_MAP = {
370
370
  "17145": EMPOWER_FIELD,
371
371
  "30856": ATT_STADIUM,
372
372
  }
373
+ NFL_PLAYER_IDENTITY_MAP: dict[str, str] = {}
373
374
 
374
375
 
375
376
  class NFLCombinedLeagueModel(CombinedLeagueModel):
@@ -394,3 +395,7 @@ class NFLCombinedLeagueModel(CombinedLeagueModel):
394
395
  @classmethod
395
396
  def venue_identity_map(cls) -> dict[str, str]:
396
397
  return NFL_VENUE_IDENTITY_MAP
398
+
399
+ @classmethod
400
+ def player_identity_map(cls) -> dict[str, str]:
401
+ return NFL_PLAYER_IDENTITY_MAP
@@ -1,5 +1,6 @@
1
1
  """Sports Reference venue model."""
2
2
 
3
+ # pylint: disable=duplicate-code
3
4
  import datetime
4
5
 
5
6
  import pytest_is_running