sportsball 0.3.42__tar.gz → 0.3.44__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 (219) hide show
  1. {sportsball-0.3.42/sportsball.egg-info → sportsball-0.3.44}/PKG-INFO +1 -1
  2. {sportsball-0.3.42 → sportsball-0.3.44}/setup.py +1 -1
  3. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/__init__.py +1 -1
  4. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/afl/afl/afl_afl_game_model.py +1 -1
  5. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/afl/afl/afl_afl_league_model.py +8 -4
  6. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/afl/afl/afl_afl_player_model.py +2 -0
  7. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/afl/afl/afl_afl_team_model.py +5 -3
  8. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/afl/afltables/afl_afltables_game_model.py +14 -4
  9. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/afl/afltables/afl_afltables_player_model.py +13 -6
  10. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/afl/afltables/afl_afltables_team_model.py +7 -5
  11. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/afl/combined/afl_combined_league_model.py +13 -2
  12. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/combined/combined_game_model.py +7 -3
  13. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/combined/combined_league_model.py +2 -0
  14. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/combined/combined_player_model.py +7 -0
  15. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/combined/combined_team_model.py +14 -10
  16. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/espn/espn_player_model.py +5 -0
  17. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/google/google_address_model.py +125 -18
  18. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/nba/nba/nba_nba_team_model.py +1 -7
  19. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/player_model.py +1 -0
  20. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/sportsreference/sportsreference_player_model.py +1 -0
  21. {sportsball-0.3.42 → sportsball-0.3.44/sportsball.egg-info}/PKG-INFO +1 -1
  22. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball.egg-info/SOURCES.txt +0 -2
  23. {sportsball-0.3.42 → sportsball-0.3.44}/tests/data/afl/afltables/afl_afltables_player_model_test.py +1 -0
  24. {sportsball-0.3.42 → sportsball-0.3.44}/tests/data/combined/combined_game_model_test.py +2 -0
  25. {sportsball-0.3.42 → sportsball-0.3.44}/tests/data/combined/combined_player_model_test.py +1 -0
  26. sportsball-0.3.44/tests/data/espn/espn_player_model_test.py +52 -0
  27. {sportsball-0.3.42 → sportsball-0.3.44}/tests/data/player_model_test.py +1 -0
  28. sportsball-0.3.42/sportsball/data/nba/nba/nba_nba_player_model.py +0 -64
  29. sportsball-0.3.42/tests/data/espn/espn_player_model_test.py +0 -29
  30. sportsball-0.3.42/tests/data/nba/nba/nba_nba_player_model_test.py +0 -30
  31. {sportsball-0.3.42 → sportsball-0.3.44}/LICENSE +0 -0
  32. {sportsball-0.3.42 → sportsball-0.3.44}/MANIFEST.in +0 -0
  33. {sportsball-0.3.42 → sportsball-0.3.44}/README.md +0 -0
  34. {sportsball-0.3.42 → sportsball-0.3.44}/requirements.txt +0 -0
  35. {sportsball-0.3.42 → sportsball-0.3.44}/setup.cfg +0 -0
  36. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/__main__.py +0 -0
  37. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/args.py +0 -0
  38. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/cache.py +0 -0
  39. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/__init__.py +0 -0
  40. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/address_model.py +0 -0
  41. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/afl/__init__.py +0 -0
  42. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/afl/afl/__init__.py +0 -0
  43. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/afl/afl/afl_afl_venue_model.py +0 -0
  44. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/afl/afltables/__init__.py +0 -0
  45. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/afl/afltables/afl_afltables_league_model.py +0 -0
  46. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/afl/afltables/afl_afltables_venue_model.py +0 -0
  47. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/afl/aussportsbetting/__init__.py +0 -0
  48. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/afl/aussportsbetting/afl_aussportsbetting_league_model.py +0 -0
  49. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/afl/combined/__init__.py +0 -0
  50. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/afl/espn/__init__.py +0 -0
  51. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/afl/espn/afl_espn_league_model.py +0 -0
  52. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/afl/oddsportal/__init__.py +0 -0
  53. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/afl/oddsportal/afl_oddsportal_league_model.py +0 -0
  54. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/aussportsbetting/__init__.py +0 -0
  55. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/aussportsbetting/aussportsbetting_bookie_model.py +0 -0
  56. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/aussportsbetting/aussportsbetting_game_model.py +0 -0
  57. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/aussportsbetting/aussportsbetting_league_model.py +0 -0
  58. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/aussportsbetting/aussportsbetting_odds_model.py +0 -0
  59. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/aussportsbetting/aussportsbetting_team_model.py +0 -0
  60. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/aussportsbetting/aussportsbetting_venue_model.py +0 -0
  61. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/bookie_model.py +0 -0
  62. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/combined/__init__.py +0 -0
  63. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/combined/combined_address_model.py +0 -0
  64. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/combined/combined_venue_model.py +0 -0
  65. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/combined/combined_weather_model.py +0 -0
  66. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/espn/__init__.py +0 -0
  67. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/espn/espn_bookie_model.py +0 -0
  68. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/espn/espn_game_model.py +0 -0
  69. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/espn/espn_league_model.py +0 -0
  70. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/espn/espn_odds_model.py +0 -0
  71. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/espn/espn_team_model.py +0 -0
  72. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/espn/espn_venue_model.py +0 -0
  73. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/field_type.py +0 -0
  74. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/game_model.py +0 -0
  75. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/google/__init__.py +0 -0
  76. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/google/google_news_model.py +0 -0
  77. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/league.py +0 -0
  78. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/league_model.py +0 -0
  79. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/model.py +0 -0
  80. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/nba/__init__.py +0 -0
  81. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/nba/combined/__init__.py +0 -0
  82. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/nba/combined/nba_combined_league_model.py +0 -0
  83. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/nba/espn/__init__.py +0 -0
  84. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/nba/espn/nba_espn_league_model.py +0 -0
  85. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/nba/nba/__init__.py +0 -0
  86. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/nba/nba/nba_nba_game_model.py +0 -0
  87. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/nba/nba/nba_nba_league_model.py +0 -0
  88. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/nba/oddsportal/__init__.py +0 -0
  89. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/nba/oddsportal/nba_oddsportal_league_model.py +0 -0
  90. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/nba/sportsdb/__init__.py +0 -0
  91. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/nba/sportsdb/nba_sportsdb_league_model.py +0 -0
  92. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/nba/sportsreference/__init__.py +0 -0
  93. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/nba/sportsreference/nba_sportsreference_league_model.py +0 -0
  94. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/ncaab/__init__.py +0 -0
  95. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/ncaab/combined/__init__.py +0 -0
  96. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/ncaab/combined/ncaab_combined_league_model.py +0 -0
  97. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/ncaab/espn/__init__.py +0 -0
  98. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/ncaab/espn/ncaab_espn_league_model.py +0 -0
  99. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/ncaab/oddsportal/__init__.py +0 -0
  100. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/ncaab/oddsportal/ncaab_oddsportal_league_model.py +0 -0
  101. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/ncaab/sportsreference/__init__.py +0 -0
  102. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/ncaab/sportsreference/ncaab_sportsreference_league_model.py +0 -0
  103. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/ncaaf/__init__.py +0 -0
  104. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/ncaaf/combined/__init__.py +0 -0
  105. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/ncaaf/combined/ncaaf_combined_league_model.py +0 -0
  106. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/ncaaf/espn/__init__.py +0 -0
  107. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/ncaaf/espn/ncaaf_espn_league_model.py +0 -0
  108. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/ncaaf/oddsportal/__init__.py +0 -0
  109. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/ncaaf/oddsportal/ncaaf_oddsportal_league_model.py +0 -0
  110. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/news_model.py +0 -0
  111. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/nfl/__init__.py +0 -0
  112. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/nfl/aussportsbetting/__init__.py +0 -0
  113. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/nfl/aussportsbetting/nfl_aussportsbetting_league_model.py +0 -0
  114. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/nfl/combined/__init__.py +0 -0
  115. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/nfl/combined/nfl_combined_league_model.py +0 -0
  116. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/nfl/espn/__init__.py +0 -0
  117. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/nfl/espn/nfl_espn_league_model.py +0 -0
  118. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/nfl/oddsportal/__init__.py +0 -0
  119. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/nfl/oddsportal/nfl_oddsportal_league_model.py +0 -0
  120. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/nfl/sportsdb/__init__.py +0 -0
  121. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/nfl/sportsdb/nfl_sportsdb_league_model.py +0 -0
  122. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/odds_model.py +0 -0
  123. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/oddsportal/__init__.py +0 -0
  124. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/oddsportal/decrypt.py +0 -0
  125. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/oddsportal/oddsportal_bookie_model.py +0 -0
  126. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/oddsportal/oddsportal_game_model.py +0 -0
  127. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/oddsportal/oddsportal_league_model.py +0 -0
  128. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/oddsportal/oddsportal_odds_model.py +0 -0
  129. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/oddsportal/oddsportal_team_model.py +0 -0
  130. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/oddsportal/oddsportal_venue_model.py +0 -0
  131. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/season_type.py +0 -0
  132. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/social_model.py +0 -0
  133. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/sportsdb/__init__.py +0 -0
  134. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/sportsdb/sportsdb_game_model.py +0 -0
  135. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/sportsdb/sportsdb_league_model.py +0 -0
  136. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/sportsdb/sportsdb_team_model.py +0 -0
  137. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/sportsdb/sportsdb_venue_model.py +0 -0
  138. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/sportsreference/__init__.py +0 -0
  139. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/sportsreference/sportsreference_game_model.py +0 -0
  140. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/sportsreference/sportsreference_league_model.py +0 -0
  141. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/sportsreference/sportsreference_team_model.py +0 -0
  142. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/sportsreference/sportsreference_venue_model.py +0 -0
  143. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/team_model.py +0 -0
  144. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/venue_model.py +0 -0
  145. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/weather/__init__.py +0 -0
  146. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/weather/gribstream/__init__.py +0 -0
  147. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/weather/gribstream/gribstream_weather_model.py +0 -0
  148. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/weather/multi_weather_model.py +0 -0
  149. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/weather/openmeteo/__init__.py +0 -0
  150. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/weather/openmeteo/openmeteo_weather_model.py +0 -0
  151. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/weather_model.py +0 -0
  152. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/wikipedia/__init__.py +0 -0
  153. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/wikipedia/wikipedia_venue_model.py +0 -0
  154. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/x/__init__.py +0 -0
  155. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/data/x/x_social_model.py +0 -0
  156. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/logger.py +0 -0
  157. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/loglevel.py +0 -0
  158. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/playwright.py +0 -0
  159. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/proxy_session.py +0 -0
  160. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/session.py +0 -0
  161. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/sportsball.py +0 -0
  162. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/vendor/__init__.py +0 -0
  163. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball/vendor/pygooglenews/__init__.py +0 -0
  164. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball.egg-info/dependency_links.txt +0 -0
  165. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball.egg-info/entry_points.txt +0 -0
  166. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball.egg-info/not-zip-safe +0 -0
  167. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball.egg-info/requires.txt +0 -0
  168. {sportsball-0.3.42 → sportsball-0.3.44}/sportsball.egg-info/top_level.txt +0 -0
  169. {sportsball-0.3.42 → sportsball-0.3.44}/tests/__init__.py +0 -0
  170. {sportsball-0.3.42 → sportsball-0.3.44}/tests/data/__init__.py +0 -0
  171. {sportsball-0.3.42 → sportsball-0.3.44}/tests/data/afl/__init__.py +0 -0
  172. {sportsball-0.3.42 → sportsball-0.3.44}/tests/data/afl/afltables/__init__.py +0 -0
  173. {sportsball-0.3.42 → sportsball-0.3.44}/tests/data/afl/afltables/afl_afltables_game_model_test.py +0 -0
  174. {sportsball-0.3.42 → sportsball-0.3.44}/tests/data/afl/afltables/afl_afltables_league_model_test.py +0 -0
  175. {sportsball-0.3.42 → sportsball-0.3.44}/tests/data/aussportsbetting/__init__.py +0 -0
  176. {sportsball-0.3.42 → sportsball-0.3.44}/tests/data/aussportsbetting/aussportsbetting_game_model_test.py +0 -0
  177. {sportsball-0.3.42 → sportsball-0.3.44}/tests/data/combined/__init__.py +0 -0
  178. {sportsball-0.3.42 → sportsball-0.3.44}/tests/data/espn/__init__.py +0 -0
  179. {sportsball-0.3.42 → sportsball-0.3.44}/tests/data/espn/espn_game_model_test.py +0 -0
  180. {sportsball-0.3.42 → sportsball-0.3.44}/tests/data/game_model_test.py +0 -0
  181. {sportsball-0.3.42 → sportsball-0.3.44}/tests/data/google/__init__.py +0 -0
  182. {sportsball-0.3.42 → sportsball-0.3.44}/tests/data/google/google_address_model_test.py +0 -0
  183. {sportsball-0.3.42 → sportsball-0.3.44}/tests/data/google/google_news_model_test.py +0 -0
  184. {sportsball-0.3.42 → sportsball-0.3.44}/tests/data/nba/__init__.py +0 -0
  185. {sportsball-0.3.42 → sportsball-0.3.44}/tests/data/nba/nba/__init__.py +0 -0
  186. {sportsball-0.3.42 → sportsball-0.3.44}/tests/data/nba/nba/nba_nba_game_model_test.py +0 -0
  187. {sportsball-0.3.42 → sportsball-0.3.44}/tests/data/nba/nba/nba_nba_league_model_test.py +0 -0
  188. {sportsball-0.3.42 → sportsball-0.3.44}/tests/data/nba/nba/nba_nba_team_model_test.py +0 -0
  189. {sportsball-0.3.42 → sportsball-0.3.44}/tests/data/nba/sportsdb/__init__.py +0 -0
  190. {sportsball-0.3.42 → sportsball-0.3.44}/tests/data/nba/sportsdb/nba_sportsdb_league_model_test.py +0 -0
  191. {sportsball-0.3.42 → sportsball-0.3.44}/tests/data/nba/sportsreference/__init__.py +0 -0
  192. {sportsball-0.3.42 → sportsball-0.3.44}/tests/data/nba/sportsreference/nba_sportsreference_league_model_test.py +0 -0
  193. {sportsball-0.3.42 → sportsball-0.3.44}/tests/data/ncaab/__init__.py +0 -0
  194. {sportsball-0.3.42 → sportsball-0.3.44}/tests/data/ncaab/sportsreference/__init__.py +0 -0
  195. {sportsball-0.3.42 → sportsball-0.3.44}/tests/data/ncaab/sportsreference/ncaab_sportsreference_league_model_test.py +0 -0
  196. {sportsball-0.3.42 → sportsball-0.3.44}/tests/data/nfl/__init__.py +0 -0
  197. {sportsball-0.3.42 → sportsball-0.3.44}/tests/data/nfl/sportsdb/__init__.py +0 -0
  198. {sportsball-0.3.42 → sportsball-0.3.44}/tests/data/nfl/sportsdb/nfl_sportsdb_league_model_test.py +0 -0
  199. {sportsball-0.3.42 → sportsball-0.3.44}/tests/data/oddsportal/__init__.py +0 -0
  200. {sportsball-0.3.42 → sportsball-0.3.44}/tests/data/oddsportal/decrypt_test.py +0 -0
  201. {sportsball-0.3.42 → sportsball-0.3.44}/tests/data/oddsportal/oddsportal_game_model_test.py +0 -0
  202. {sportsball-0.3.42 → sportsball-0.3.44}/tests/data/oddsportal/oddsportal_league_model_test.py +0 -0
  203. {sportsball-0.3.42 → sportsball-0.3.44}/tests/data/social_model_test.py +0 -0
  204. {sportsball-0.3.42 → sportsball-0.3.44}/tests/data/sportsdb/__init__.py +0 -0
  205. {sportsball-0.3.42 → sportsball-0.3.44}/tests/data/sportsdb/sportsdb_game_model_test.py +0 -0
  206. {sportsball-0.3.42 → sportsball-0.3.44}/tests/data/sportsdb/sportsdb_league_model_test.py +0 -0
  207. {sportsball-0.3.42 → sportsball-0.3.44}/tests/data/sportsdb/sportsdb_team_model_test.py +0 -0
  208. {sportsball-0.3.42 → sportsball-0.3.44}/tests/data/sportsdb/sportsdb_venue_model_test.py +0 -0
  209. {sportsball-0.3.42 → sportsball-0.3.44}/tests/data/sportsreference/__init__.py +0 -0
  210. {sportsball-0.3.42 → sportsball-0.3.44}/tests/data/sportsreference/sportsreference_game_model_test.py +0 -0
  211. {sportsball-0.3.42 → sportsball-0.3.44}/tests/data/sportsreference/sportsreference_league_model_test.py +0 -0
  212. {sportsball-0.3.42 → sportsball-0.3.44}/tests/data/sportsreference/sportsreference_player_model_test.py +0 -0
  213. {sportsball-0.3.42 → sportsball-0.3.44}/tests/data/sportsreference/sportsreference_team_model_test.py +0 -0
  214. {sportsball-0.3.42 → sportsball-0.3.44}/tests/data/sportsreference/sportsreference_venue_model_test.py +0 -0
  215. {sportsball-0.3.42 → sportsball-0.3.44}/tests/data/team_model_test.py +0 -0
  216. {sportsball-0.3.42 → sportsball-0.3.44}/tests/data/x/__init__.py +0 -0
  217. {sportsball-0.3.42 → sportsball-0.3.44}/tests/data/x/x_social_model_test.py +0 -0
  218. {sportsball-0.3.42 → sportsball-0.3.44}/tests/proxy_session_test.py +0 -0
  219. {sportsball-0.3.42 → sportsball-0.3.44}/tests/sportsball_test.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: sportsball
3
- Version: 0.3.42
3
+ Version: 0.3.44
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.42',
29
+ version='0.3.44',
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.42"
3
+ __VERSION__ = "0.3.44"
@@ -13,7 +13,7 @@ from .afl_afl_venue_model import create_afl_afl_venue_model
13
13
 
14
14
  def create_afl_afl_game_model(
15
15
  team_names: list[str],
16
- players: list[list[tuple[str, str]]],
16
+ players: list[list[tuple[str, str, str, str]]],
17
17
  dt: datetime.datetime,
18
18
  venue_name: str,
19
19
  session: requests_cache.CachedSession,
@@ -44,15 +44,17 @@ class AFLAFLLeagueModel(LeagueModel):
44
44
  "span", {"class": re.compile(".*team-lineups__team-name.*")}
45
45
  ):
46
46
  team_names.append(span.get_text().strip())
47
- teams_players: list[list[tuple[str, str]]] = []
47
+ teams_players: list[list[tuple[str, str, str, str]]] = []
48
48
  for div_team_players in div.find_all(
49
49
  "div", {"class": re.compile(".*team-lineups__positions-players.*")}
50
50
  ):
51
- team_players: list[tuple[str, str]] = []
51
+ team_players: list[tuple[str, str, str, str]] = []
52
52
  for a in div_team_players.find_all(
53
53
  "a", {"class": re.compile(".*js-player-profile-link.*")}
54
54
  ):
55
55
  player_id = "afl:" + a.get("data-player-id")
56
+ first_name = a.get("data-first-name")
57
+ second_name = a.get("data-surname")
56
58
  player_number = None
57
59
  for span_player_number in a.find_all(
58
60
  "span",
@@ -66,7 +68,9 @@ class AFLAFLLeagueModel(LeagueModel):
66
68
  )
67
69
  if player_number is None:
68
70
  raise ValueError("player_number is null")
69
- team_players.append((player_id, player_number))
71
+ team_players.append(
72
+ (player_id, player_number, first_name, second_name)
73
+ )
70
74
  teams_players.append(team_players)
71
75
  dt = None
72
76
  for time in div.find_all(
@@ -79,7 +83,7 @@ class AFLAFLLeagueModel(LeagueModel):
79
83
  for span in div.find_all(
80
84
  "span", {"class": re.compile(".*match-list-alt__header-venue.*")}
81
85
  ):
82
- venue_name = span.get_text().strip()
86
+ venue_name = span.get_text().strip().replace(",", "")
83
87
  if venue_name is None:
84
88
  raise ValueError("venue_name is null")
85
89
  if dt is None:
@@ -6,6 +6,7 @@ from ...player_model import PlayerModel
6
6
  def create_afl_afl_player_model(
7
7
  identifier: str,
8
8
  player_number: str,
9
+ name: str,
9
10
  ) -> PlayerModel:
10
11
  """Create a player model from AFL AFL."""
11
12
  return PlayerModel(
@@ -19,4 +20,5 @@ def create_afl_afl_player_model(
19
20
  offensive_rebounds=None,
20
21
  assists=None,
21
22
  turnovers=None,
23
+ name=name,
22
24
  )
@@ -13,14 +13,16 @@ from .afl_afl_player_model import create_afl_afl_player_model
13
13
 
14
14
  def create_afl_afl_team_model(
15
15
  team_name: str,
16
- players: list[tuple[str, str]],
16
+ players: list[tuple[str, str, str, str]],
17
17
  session: requests_cache.CachedSession,
18
18
  dt: datetime.datetime,
19
19
  ) -> TeamModel:
20
20
  """Create a team model from AFL AFL."""
21
21
  player_models = [
22
- create_afl_afl_player_model(identifier, player_number)
23
- for identifier, player_number in players
22
+ create_afl_afl_player_model(
23
+ identifier, player_number, " ".join([first_name, second_name])
24
+ )
25
+ for identifier, player_number, first_name, second_name in players
24
26
  ]
25
27
  return TeamModel(
26
28
  identifier=team_name,
@@ -152,7 +152,7 @@ def _create_afl_afltables_game_model(
152
152
 
153
153
  def _find_teams_metadata(
154
154
  soup: BeautifulSoup, team_infos: list[tuple[str, str, int]]
155
- ) -> list[tuple[str, list[tuple[str, str, int | None]], int]]:
155
+ ) -> list[tuple[str, list[tuple[str, str, int | None, str]], int]]:
156
156
  def _is_correct_table(table: Tag, name: str) -> bool:
157
157
  for th in table.find_all("th"):
158
158
  header_text = th.get_text().strip()
@@ -160,8 +160,8 @@ def _create_afl_afltables_game_model(
160
160
  return True
161
161
  return False
162
162
 
163
- def _find_players(table: Tag) -> list[tuple[str, str, int | None]]:
164
- players: list[tuple[str, str, int | None]] = []
163
+ def _find_players(table: Tag) -> list[tuple[str, str, int | None, str]]:
164
+ players: list[tuple[str, str, int | None, str]] = []
165
165
  for tr in table.find_all("tr"):
166
166
  player_row = False
167
167
  player_url = None
@@ -172,10 +172,18 @@ def _create_afl_afltables_game_model(
172
172
  player_row = True
173
173
  if player_row and player_url is not None:
174
174
  jersey = None
175
+ name = None
175
176
  kicks = None
176
177
  for count, td in enumerate(tr.find_all("td")):
177
178
  if count == 0:
178
179
  jersey = td.get_text().strip()
180
+ elif count == 1:
181
+ name = " ".join(
182
+ [
183
+ x.strip()
184
+ for x in reversed(td.get_text().strip().split(","))
185
+ ]
186
+ )
179
187
  elif count == 2:
180
188
  kicks_text = td.get_text().strip()
181
189
  if kicks_text:
@@ -183,8 +191,10 @@ def _create_afl_afltables_game_model(
183
191
 
184
192
  if jersey is None:
185
193
  raise ValueError("jersey is null.")
194
+ if name is None:
195
+ raise ValueError("name is null")
186
196
 
187
- players.append((player_url, jersey, kicks))
197
+ players.append((player_url, jersey, kicks, name))
188
198
  return players
189
199
 
190
200
  team_metadata = []
@@ -1,6 +1,6 @@
1
1
  """AFL AFLTables player model."""
2
2
 
3
- # pylint: disable=line-too-long,duplicate-code
3
+ # pylint: disable=line-too-long,duplicate-code,too-many-arguments
4
4
  import datetime
5
5
  import os
6
6
  from urllib.parse import urlparse
@@ -13,7 +13,7 @@ from ...player_model import PlayerModel
13
13
 
14
14
 
15
15
  def _create_afl_afltables_player_model(
16
- player_url: str, jersey: str, kicks: int | None
16
+ player_url: str, jersey: str, kicks: int | None, name: str
17
17
  ) -> PlayerModel:
18
18
  o = urlparse(player_url)
19
19
  last_component = o.path.split("/")[-1]
@@ -30,14 +30,15 @@ def _create_afl_afltables_player_model(
30
30
  offensive_rebounds=None,
31
31
  assists=None,
32
32
  turnovers=None,
33
+ name=name,
33
34
  )
34
35
 
35
36
 
36
37
  @MEMORY.cache
37
38
  def _cached_create_afl_afltables_player_model(
38
- player_url: str, jersey: str, kicks: int | None
39
+ player_url: str, jersey: str, kicks: int | None, name: str
39
40
  ) -> PlayerModel:
40
- return _create_afl_afltables_player_model(player_url, jersey, kicks)
41
+ return _create_afl_afltables_player_model(player_url, jersey, kicks, name)
41
42
 
42
43
 
43
44
  def create_afl_afltables_player_model(
@@ -46,12 +47,18 @@ def create_afl_afltables_player_model(
46
47
  kicks: int | None,
47
48
  dt: datetime.datetime,
48
49
  session: requests_cache.CachedSession,
50
+ name: str,
49
51
  ) -> PlayerModel:
50
52
  """Create a player model from AFL Tables."""
51
53
  if (
52
54
  not pytest_is_running.is_running()
53
55
  and dt < datetime.datetime.now() - datetime.timedelta(days=7)
54
56
  ):
55
- return _cached_create_afl_afltables_player_model(player_url, jersey, kicks) # pyright: ignore
57
+ return _cached_create_afl_afltables_player_model(
58
+ player_url,
59
+ jersey,
60
+ kicks,
61
+ name, # pyright: ignore
62
+ )
56
63
  with session.cache_disabled():
57
- return _create_afl_afltables_player_model(player_url, jersey, kicks)
64
+ return _create_afl_afltables_player_model(player_url, jersey, kicks, name)
@@ -44,7 +44,7 @@ _TEAM_NAME_MAP = {
44
44
 
45
45
  def _create_afl_afltables_team_model(
46
46
  team_url: str,
47
- players: list[tuple[str, str, int | None]],
47
+ players: list[tuple[str, str, int | None, str]],
48
48
  points: float,
49
49
  session: requests_cache.CachedSession,
50
50
  last_ladder_ranks: dict[str, int] | None,
@@ -71,8 +71,10 @@ def _create_afl_afltables_team_model(
71
71
  identifier=identifier,
72
72
  name=name,
73
73
  players=[ # pyright: ignore
74
- create_afl_afltables_player_model(player_url, jersey, kicks, dt, session)
75
- for player_url, jersey, kicks in players
74
+ create_afl_afltables_player_model(
75
+ player_url, jersey, kicks, dt, session, name
76
+ )
77
+ for player_url, jersey, kicks, name in players
76
78
  ],
77
79
  odds=[],
78
80
  points=points,
@@ -87,7 +89,7 @@ def _create_afl_afltables_team_model(
87
89
  @MEMORY.cache(ignore=["session"])
88
90
  def _cached_create_afl_afltables_team_model(
89
91
  team_url: str,
90
- players: list[tuple[str, str, int | None]],
92
+ players: list[tuple[str, str, int | None, str]],
91
93
  points: float,
92
94
  session: requests_cache.CachedSession,
93
95
  last_ladder_ranks: dict[str, int] | None,
@@ -101,7 +103,7 @@ def _cached_create_afl_afltables_team_model(
101
103
 
102
104
  def create_afl_afltables_team_model(
103
105
  team_url: str,
104
- players: list[tuple[str, str, int | None]],
106
+ players: list[tuple[str, str, int | None, str]],
105
107
  points: float,
106
108
  session: requests_cache.CachedSession,
107
109
  last_ladder_ranks: dict[str, int] | None,
@@ -242,7 +242,18 @@ AFL_VENUE_IDENTITY_MAP = {
242
242
  "Ondrej Nepela Arena": TIPOS_ARENA,
243
243
  "Barossa Park": BAROSSA_PARK,
244
244
  }
245
- AFL_TEAM_IDENTITY_MAP = {}
245
+ RYAN_LESTER = "afl:CD_I291548"
246
+ JACK_PAYNE = "afl:CD_I1002347"
247
+ DAYNE_ZORKO = "afl:CD_I261224"
248
+ JAMES_WORPEL = "James_Worpel"
249
+ JOSH_WEDDLE = "Josh_Weddle"
250
+ AFL_PLAYER_IDENTITY_MAP = {
251
+ "afl:CD_I291548": RYAN_LESTER,
252
+ "afl:CD_I1002347": JACK_PAYNE,
253
+ "afl:CD_I261224": DAYNE_ZORKO,
254
+ "James_Worpel": JAMES_WORPEL,
255
+ "Josh_Weddle": JOSH_WEDDLE,
256
+ }
246
257
 
247
258
 
248
259
  class AFLCombinedLeagueModel(CombinedLeagueModel):
@@ -271,4 +282,4 @@ class AFLCombinedLeagueModel(CombinedLeagueModel):
271
282
 
272
283
  @classmethod
273
284
  def player_identity_map(cls) -> dict[str, str]:
274
- return AFL_TEAM_IDENTITY_MAP
285
+ return AFL_PLAYER_IDENTITY_MAP
@@ -1,6 +1,6 @@
1
1
  """Combined game model."""
2
2
 
3
- # pylint: disable=too-many-locals,line-too-long
3
+ # pylint: disable=too-many-locals,line-too-long,too-many-arguments
4
4
  import logging
5
5
 
6
6
  import requests
@@ -35,6 +35,7 @@ def _team_models(
35
35
  game_models: list[GameModel],
36
36
  team_identity_map: dict[str, str],
37
37
  player_identity_map: dict[str, str],
38
+ names: dict[str, str],
38
39
  ) -> list[TeamModel]:
39
40
  team_models: dict[str, list[TeamModel]] = {}
40
41
  for game_model in game_models:
@@ -51,7 +52,7 @@ def _team_models(
51
52
  team_model
52
53
  ]
53
54
  return [
54
- create_combined_team_model(v, k, player_identity_map) # pyright: ignore
55
+ create_combined_team_model(v, k, player_identity_map, names) # pyright: ignore
55
56
  for k, v in team_models.items()
56
57
  ]
57
58
 
@@ -62,10 +63,13 @@ def create_combined_game_model(
62
63
  team_identity_map: dict[str, str],
63
64
  player_identity_map: dict[str, str],
64
65
  session: requests.Session,
66
+ names: dict[str, str],
65
67
  ) -> GameModel:
66
68
  """Create a game model by combining many game models."""
67
69
  venue_models, full_venue_identity = _venue_models(game_models, venue_identity_map)
68
- full_team_models = _team_models(game_models, team_identity_map, player_identity_map)
70
+ full_team_models = _team_models(
71
+ game_models, team_identity_map, player_identity_map, names
72
+ )
69
73
  attendance = None
70
74
  end_dt = None
71
75
  year = None
@@ -87,6 +87,7 @@ class CombinedLeagueModel(LeagueModel):
87
87
  game_components = sorted(game_components)
88
88
  key = "-".join(game_components)
89
89
  games[key] = games.get(key, []) + [game_model]
90
+ names: dict[str, str] = {}
90
91
  for game_models in games.values():
91
92
  yield create_combined_game_model( # type: ignore
92
93
  game_models,
@@ -94,4 +95,5 @@ class CombinedLeagueModel(LeagueModel):
94
95
  team_identity_map,
95
96
  self.player_identity_map(),
96
97
  self.session,
98
+ names,
97
99
  )
@@ -17,6 +17,7 @@ def create_combined_player_model(
17
17
  offensive_rebounds = None
18
18
  assists = None
19
19
  turnovers = None
20
+ name = None
20
21
  for player_model in player_models:
21
22
  player_model_jersey = player_model.jersey
22
23
  if player_model_jersey is not None:
@@ -45,6 +46,11 @@ def create_combined_player_model(
45
46
  player_model_turnovers = player_model.turnovers
46
47
  if player_model_turnovers is not None:
47
48
  turnovers = player_model_turnovers
49
+ player_model_name = player_model.name
50
+ if player_model_name is not None:
51
+ name = player_model_name
52
+ if name is None:
53
+ raise ValueError("name is null.")
48
54
  return PlayerModel(
49
55
  identifier=identifier,
50
56
  jersey=jersey,
@@ -56,4 +62,5 @@ def create_combined_player_model(
56
62
  offensive_rebounds=offensive_rebounds,
57
63
  assists=assists,
58
64
  turnovers=turnovers,
65
+ name=name,
59
66
  )
@@ -1,7 +1,8 @@
1
1
  """Combined team model."""
2
2
 
3
3
  # pylint: disable=too-many-locals
4
- import logging
4
+ import re
5
+ import unicodedata
5
6
 
6
7
  from ..news_model import NewsModel
7
8
  from ..odds_model import OddsModel
@@ -10,11 +11,14 @@ from ..social_model import SocialModel
10
11
  from ..team_model import TeamModel
11
12
  from .combined_player_model import create_combined_player_model
12
13
 
14
+ REGEX = re.compile("[^a-zA-Z]")
15
+
13
16
 
14
17
  def create_combined_team_model(
15
18
  team_models: list[TeamModel],
16
19
  identifier: str,
17
20
  player_identity_map: dict[str, str],
21
+ names: dict[str, str],
18
22
  ) -> TeamModel:
19
23
  """Create a team model by combining many team models."""
20
24
  location = None
@@ -31,16 +35,16 @@ def create_combined_team_model(
31
35
  location = team_model_location
32
36
  for player_model in team_model.players:
33
37
  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:
38
+ player_name_key = REGEX.sub(
39
+ "", unicodedata.normalize("NFC", player_model.name).lower()
40
+ )
41
+ if player_model.identifier in player_identity_map:
39
42
  player_id = player_identity_map[player_id]
40
- key = player_model.jersey
41
- if key is None:
42
- key = player_id
43
- players[key] = players.get(key, []) + [player_model]
43
+ elif player_name_key in names:
44
+ player_id = names[player_name_key]
45
+ else:
46
+ names[player_name_key] = player_id
47
+ players[player_id] = players.get(player_id, []) + [player_model]
44
48
  for odds_model in team_model.odds:
45
49
  key = f"{odds_model.bookie.identifier}-{odds_model.odds}"
46
50
  odds[key] = odds.get(key, []) + [odds_model]
@@ -29,6 +29,10 @@ def _create_espn_player_model(
29
29
  fumbles = stat["value"]
30
30
  if stat["name"] == "fumblesLost":
31
31
  fumbles_lost = stat["value"]
32
+ athlete_response = session.get(player["athlete"]["$ref"])
33
+ athlete_response.raise_for_status()
34
+ athlete_dict = athlete_response.json()
35
+ name = athlete_dict["fullName"]
32
36
  return PlayerModel(
33
37
  identifier=identifier,
34
38
  jersey=jersey,
@@ -40,6 +44,7 @@ def _create_espn_player_model(
40
44
  offensive_rebounds=None,
41
45
  assists=None,
42
46
  turnovers=None,
47
+ name=name,
43
48
  )
44
49
 
45
50
 
@@ -2179,6 +2179,24 @@ BOK_CENTER = SportsballGeocodeTuple(
2179
2179
  housenumber="200",
2180
2180
  country="USA",
2181
2181
  )
2182
+ LEGACY_CENTER = SportsballGeocodeTuple(
2183
+ city="Lake Charles",
2184
+ state="LA",
2185
+ postal="70607",
2186
+ lat=30.1755,
2187
+ lng=-93.2095,
2188
+ housenumber="",
2189
+ country="USA",
2190
+ )
2191
+ EXTRAMILE_ARENA = SportsballGeocodeTuple(
2192
+ city="Boise",
2193
+ state="ID",
2194
+ postal="",
2195
+ lat=43.6035,
2196
+ lng=-116.199,
2197
+ housenumber="1401",
2198
+ country="USA",
2199
+ )
2182
2200
  _CACHED_GEOCODES: dict[str, Any] = {
2183
2201
  "S.C.G. - Australia": SCG,
2184
2202
  "Victoria Park - Australia": SportsballGeocodeTuple(
@@ -5164,15 +5182,7 @@ _CACHED_GEOCODES: dict[str, Any] = {
5164
5182
  housenumber="1333",
5165
5183
  country="USA",
5166
5184
  ),
5167
- "ExtraMile Arena, Boise, Idaho": SportsballGeocodeTuple(
5168
- city="Boise",
5169
- state="ID",
5170
- postal="",
5171
- lat=43.6035,
5172
- lng=-116.199,
5173
- housenumber="1401",
5174
- country="USA",
5175
- ),
5185
+ "ExtraMile Arena, Boise, Idaho": EXTRAMILE_ARENA,
5176
5186
  "Marriott Center, Provo, Utah": SportsballGeocodeTuple(
5177
5187
  city="Provo",
5178
5188
  state="UT",
@@ -6050,15 +6060,7 @@ _CACHED_GEOCODES: dict[str, Any] = {
6050
6060
  housenumber="1",
6051
6061
  country="USA",
6052
6062
  ),
6053
- "The Legacy Center, Lake Charles, Louisiana": SportsballGeocodeTuple(
6054
- city="Lake Charles",
6055
- state="LA",
6056
- postal="70607",
6057
- lat=30.1755,
6058
- lng=-93.2095,
6059
- housenumber="",
6060
- country="USA",
6061
- ),
6063
+ "The Legacy Center, Lake Charles, Louisiana": LEGACY_CENTER,
6062
6064
  "Watsco Center, Coral Gables, Florida": WATSO_CENTER,
6063
6065
  "Peter W. Stott Center, Portland, Oregon": SportsballGeocodeTuple(
6064
6066
  city="Portland",
@@ -12160,6 +12162,111 @@ _CACHED_GEOCODES: dict[str, Any] = {
12160
12162
  housenumber="9000",
12161
12163
  country="USA",
12162
12164
  ),
12165
+ "Titan Field House, Melbourne, Florida": SportsballGeocodeTuple(
12166
+ city="Melbourne",
12167
+ state="FL",
12168
+ postal="3865",
12169
+ lat=28.16992,
12170
+ lng=-80.66588,
12171
+ housenumber="32935",
12172
+ country="USA",
12173
+ ),
12174
+ "H&HP Complex, Lake Charles, Louisiana": LEGACY_CENTER,
12175
+ "Bill Harris Arena, Birmingham, Alabama": SportsballGeocodeTuple(
12176
+ city="Birmingham",
12177
+ state="AL",
12178
+ postal="35208",
12179
+ lat=33.495,
12180
+ lng=-86.874,
12181
+ housenumber="2331",
12182
+ country="USA",
12183
+ ),
12184
+ "Rochester, New York": SportsballGeocodeTuple(
12185
+ city="Rochester",
12186
+ state="NY",
12187
+ postal="",
12188
+ lat=43.165556,
12189
+ lng=-77.616111,
12190
+ housenumber="",
12191
+ country="USA",
12192
+ ),
12193
+ "North Little Rock, Arkansas": SportsballGeocodeTuple(
12194
+ city="North Little Rock",
12195
+ state="AR",
12196
+ postal="",
12197
+ lat=34.780833,
12198
+ lng=-92.256944,
12199
+ housenumber="",
12200
+ country="USA",
12201
+ ),
12202
+ "Taco Bell Arena, Boise, Idaho": EXTRAMILE_ARENA,
12203
+ "Kent, Washington": SportsballGeocodeTuple(
12204
+ city="Kent",
12205
+ state="WA",
12206
+ postal="",
12207
+ lat=47.382778,
12208
+ lng=-122.226944,
12209
+ housenumber="",
12210
+ country="USA",
12211
+ ),
12212
+ "Magness Arena, Denver, Colorado": SportsballGeocodeTuple(
12213
+ city="Denver",
12214
+ state="CO",
12215
+ postal="",
12216
+ lat=39.682106,
12217
+ lng=-104.961592,
12218
+ housenumber="2240",
12219
+ country="USA",
12220
+ ),
12221
+ "ESPN Wide World of Sports, Orlando, Florida": ESPN_WIDE_WORLD_OF_SPORTS_COMPLEX,
12222
+ "Scotiabank Arena, Toronto": SCOTIABANK_ARENA,
12223
+ "Chaparral Center, Midland, Texas": SportsballGeocodeTuple(
12224
+ city="Midland",
12225
+ state="TX",
12226
+ postal="",
12227
+ lat=32.028,
12228
+ lng=-102.103,
12229
+ housenumber="2240",
12230
+ country="USA",
12231
+ ),
12232
+ "U.S. Bank Stadium, Minneapolis, Minnesota": US_BANK_STADIUM,
12233
+ "Honda Center, Anaheim, California": SportsballGeocodeTuple(
12234
+ city="Anaheim",
12235
+ state="CA",
12236
+ postal="",
12237
+ lat=33.807778,
12238
+ lng=-117.876667,
12239
+ housenumber="2695",
12240
+ country="USA",
12241
+ ),
12242
+ "NJIT Wellness and Events Center, Newark, New Jersey": WELLNESS_AND_EVENTS_CENTER,
12243
+ "McGrath-Phillips Arena, Chicago, Illinois": SportsballGeocodeTuple(
12244
+ city="Chicago",
12245
+ state="IL",
12246
+ postal="60604",
12247
+ lat=41.923901,
12248
+ lng=-87.653167,
12249
+ housenumber="2323",
12250
+ country="USA",
12251
+ ),
12252
+ "Nationwide Arena, Columbus, Ohio": SportsballGeocodeTuple(
12253
+ city="Columbus",
12254
+ state="OH",
12255
+ postal="",
12256
+ lat=39.969283,
12257
+ lng=-83.006111,
12258
+ housenumber="200",
12259
+ country="USA",
12260
+ ),
12261
+ "Jacksonville Veteran's Memorial Arena, Jacksonville, Florida": SportsballGeocodeTuple(
12262
+ city="Jacksonville",
12263
+ state="FL",
12264
+ postal="32202",
12265
+ lat=30.325769,
12266
+ lng=-81.645069,
12267
+ housenumber="300",
12268
+ country="USA",
12269
+ ),
12163
12270
  }
12164
12271
 
12165
12272
 
@@ -25,10 +25,6 @@ def _create_nba_nba_team_model(
25
25
  ) -> TeamModel | None:
26
26
  """Create a team model from NBA API."""
27
27
  suffix = "_A" if home else "_B"
28
- # game_rotation = gamerotation.GameRotation(game_id=row["GAME_ID"])
29
- # player_dict = {}
30
- # for _, gr_row in game_rotation.get_data_frames()[int(home)].iterrows():
31
- # player_dict[gr_row["PERSON_ID"]] = gr_row
32
28
  identifier = row["TEAM_ID" + suffix]
33
29
  if identifier is None:
34
30
  return None
@@ -41,9 +37,7 @@ def _create_nba_nba_team_model(
41
37
  return TeamModel(
42
38
  identifier=str(identifier),
43
39
  name=name,
44
- players=[ # type: ignore
45
- # create_nba_nba_player_model(v, player_index) for v in player_dict.values()
46
- ],
40
+ players=[],
47
41
  odds=[],
48
42
  points=float(row["PTS" + suffix]),
49
43
  ladder_rank=None,
@@ -66,3 +66,4 @@ class PlayerModel(BaseModel):
66
66
  json_schema_extra={TYPE_KEY: FieldType.LOOKAHEAD},
67
67
  alias=TURNOVERS_COLUMN,
68
68
  )
69
+ name: str
@@ -77,6 +77,7 @@ def _create_sportsreference_player_model(
77
77
  offensive_rebounds=offensive_rebounds.get(name),
78
78
  assists=assists.get(name),
79
79
  turnovers=turnovers.get(name),
80
+ name=name,
80
81
  )
81
82
 
82
83
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: sportsball
3
- Version: 0.3.42
3
+ Version: 0.3.44
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
@@ -91,7 +91,6 @@ sportsball/data/nba/espn/nba_espn_league_model.py
91
91
  sportsball/data/nba/nba/__init__.py
92
92
  sportsball/data/nba/nba/nba_nba_game_model.py
93
93
  sportsball/data/nba/nba/nba_nba_league_model.py
94
- sportsball/data/nba/nba/nba_nba_player_model.py
95
94
  sportsball/data/nba/nba/nba_nba_team_model.py
96
95
  sportsball/data/nba/oddsportal/__init__.py
97
96
  sportsball/data/nba/oddsportal/nba_oddsportal_league_model.py
@@ -185,7 +184,6 @@ tests/data/nba/__init__.py
185
184
  tests/data/nba/nba/__init__.py
186
185
  tests/data/nba/nba/nba_nba_game_model_test.py
187
186
  tests/data/nba/nba/nba_nba_league_model_test.py
188
- tests/data/nba/nba/nba_nba_player_model_test.py
189
187
  tests/data/nba/nba/nba_nba_team_model_test.py
190
188
  tests/data/nba/sportsdb/__init__.py
191
189
  tests/data/nba/sportsdb/nba_sportsdb_league_model_test.py