sportsball 0.3.123__tar.gz → 0.3.125__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 (231) hide show
  1. {sportsball-0.3.123/sportsball.egg-info → sportsball-0.3.125}/PKG-INFO +1 -1
  2. {sportsball-0.3.123 → sportsball-0.3.125}/setup.py +1 -1
  3. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/__init__.py +1 -1
  4. sportsball-0.3.125/sportsball/data/afl/afl/afl_afl_game_model.py +153 -0
  5. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/afl/afl/afl_afl_league_model.py +19 -50
  6. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/afl/afl/afl_afl_player_model.py +1 -0
  7. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/afl/afl/afl_afl_team_model.py +2 -0
  8. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/afl/afltables/afl_afltables_player_model.py +13 -6
  9. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/afl/afltables/afl_afltables_team_model.py +1 -5
  10. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/combined/combined_player_model.py +5 -0
  11. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/espn/espn_player_model.py +3 -0
  12. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/google/google_address_model.py +88 -34
  13. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/nba/combined/nba_combined_league_model.py +3 -0
  14. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/nba/nbacom/nba_nbacom_player_model.py +1 -0
  15. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/player_model.py +3 -0
  16. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/sportsreference/sportsreference_league_model.py +2 -0
  17. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/sportsreference/sportsreference_player_model.py +10 -1
  18. {sportsball-0.3.123 → sportsball-0.3.125/sportsball.egg-info}/PKG-INFO +1 -1
  19. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball.egg-info/SOURCES.txt +1 -0
  20. sportsball-0.3.125/tests/data/afl/afl/afl_afl_game_model_test.py +20 -0
  21. {sportsball-0.3.123 → sportsball-0.3.125}/tests/data/afl/afl/afl_afl_league_model_test.py +2 -1
  22. sportsball-0.3.125/tests/data/afl/afltables/afl_afltables_game_model_test.py +134 -0
  23. {sportsball-0.3.123 → sportsball-0.3.125}/tests/data/afl/afltables/afl_afltables_player_model_test.py +2 -1
  24. {sportsball-0.3.123 → sportsball-0.3.125}/tests/data/combined/combined_player_model_test.py +1 -0
  25. {sportsball-0.3.123 → sportsball-0.3.125}/tests/data/combined/combined_team_model_test.py +4 -0
  26. {sportsball-0.3.123 → sportsball-0.3.125}/tests/data/player_model_test.py +1 -0
  27. sportsball-0.3.123/sportsball/data/afl/afl/afl_afl_game_model.py +0 -88
  28. sportsball-0.3.123/tests/data/afl/afltables/afl_afltables_game_model_test.py +0 -42
  29. {sportsball-0.3.123 → sportsball-0.3.125}/LICENSE +0 -0
  30. {sportsball-0.3.123 → sportsball-0.3.125}/MANIFEST.in +0 -0
  31. {sportsball-0.3.123 → sportsball-0.3.125}/README.md +0 -0
  32. {sportsball-0.3.123 → sportsball-0.3.125}/requirements.txt +0 -0
  33. {sportsball-0.3.123 → sportsball-0.3.125}/setup.cfg +0 -0
  34. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/__main__.py +0 -0
  35. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/args.py +0 -0
  36. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/cache.py +0 -0
  37. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/__init__.py +0 -0
  38. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/address_model.py +0 -0
  39. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/afl/__init__.py +0 -0
  40. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/afl/afl/__init__.py +0 -0
  41. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/afl/afl/afl_afl_bookie_model.py +0 -0
  42. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/afl/afl/afl_afl_odds_model.py +0 -0
  43. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/afl/afl/afl_afl_venue_model.py +0 -0
  44. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/afl/afltables/__init__.py +0 -0
  45. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/afl/afltables/afl_afltables_game_model.py +0 -0
  46. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/afl/afltables/afl_afltables_league_model.py +0 -0
  47. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/afl/afltables/afl_afltables_venue_model.py +0 -0
  48. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/afl/aussportsbetting/__init__.py +0 -0
  49. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/afl/aussportsbetting/afl_aussportsbetting_league_model.py +0 -0
  50. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/afl/combined/__init__.py +0 -0
  51. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/afl/combined/afl_combined_league_model.py +0 -0
  52. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/afl/espn/__init__.py +0 -0
  53. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/afl/espn/afl_espn_league_model.py +0 -0
  54. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/afl/oddsportal/__init__.py +0 -0
  55. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/afl/oddsportal/afl_oddsportal_league_model.py +0 -0
  56. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/aussportsbetting/__init__.py +0 -0
  57. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/aussportsbetting/aussportsbetting_bookie_model.py +0 -0
  58. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/aussportsbetting/aussportsbetting_game_model.py +0 -0
  59. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/aussportsbetting/aussportsbetting_league_model.py +0 -0
  60. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/aussportsbetting/aussportsbetting_odds_model.py +0 -0
  61. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/aussportsbetting/aussportsbetting_team_model.py +0 -0
  62. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/aussportsbetting/aussportsbetting_venue_model.py +0 -0
  63. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/bookie_model.py +0 -0
  64. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/combined/__init__.py +0 -0
  65. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/combined/combined_address_model.py +0 -0
  66. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/combined/combined_game_model.py +0 -0
  67. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/combined/combined_league_model.py +0 -0
  68. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/combined/combined_team_model.py +0 -0
  69. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/combined/combined_venue_model.py +0 -0
  70. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/combined/combined_weather_model.py +0 -0
  71. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/combined/null_check.py +0 -0
  72. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/espn/__init__.py +0 -0
  73. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/espn/espn_bookie_model.py +0 -0
  74. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/espn/espn_game_model.py +0 -0
  75. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/espn/espn_league_model.py +0 -0
  76. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/espn/espn_odds_model.py +0 -0
  77. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/espn/espn_team_model.py +0 -0
  78. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/espn/espn_venue_model.py +0 -0
  79. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/field_type.py +0 -0
  80. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/game_model.py +0 -0
  81. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/google/__init__.py +0 -0
  82. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/google/google_news_model.py +0 -0
  83. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/league.py +0 -0
  84. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/league_model.py +0 -0
  85. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/model.py +0 -0
  86. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/nba/__init__.py +0 -0
  87. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/nba/combined/__init__.py +0 -0
  88. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/nba/espn/__init__.py +0 -0
  89. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/nba/espn/nba_espn_league_model.py +0 -0
  90. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/nba/nba/__init__.py +0 -0
  91. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/nba/nba/nba_nba_game_model.py +0 -0
  92. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/nba/nba/nba_nba_league_model.py +0 -0
  93. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/nba/nba/nba_nba_team_model.py +0 -0
  94. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/nba/nbacom/__init__.py +0 -0
  95. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/nba/nbacom/nba_nbacom_game_model.py +0 -0
  96. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/nba/nbacom/nba_nbacom_league_model.py +0 -0
  97. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/nba/nbacom/nba_nbacom_team_model.py +0 -0
  98. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/nba/nbacom/nba_nbacom_venue_model.py +0 -0
  99. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/nba/oddsportal/__init__.py +0 -0
  100. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/nba/oddsportal/nba_oddsportal_league_model.py +0 -0
  101. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/nba/sportsdb/__init__.py +0 -0
  102. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/nba/sportsdb/nba_sportsdb_league_model.py +0 -0
  103. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/nba/sportsreference/__init__.py +0 -0
  104. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/nba/sportsreference/nba_sportsreference_league_model.py +0 -0
  105. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/ncaab/__init__.py +0 -0
  106. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/ncaab/combined/__init__.py +0 -0
  107. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/ncaab/combined/ncaab_combined_league_model.py +0 -0
  108. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/ncaab/espn/__init__.py +0 -0
  109. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/ncaab/espn/ncaab_espn_league_model.py +0 -0
  110. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/ncaab/oddsportal/__init__.py +0 -0
  111. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/ncaab/oddsportal/ncaab_oddsportal_league_model.py +0 -0
  112. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/ncaab/sportsreference/__init__.py +0 -0
  113. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/ncaab/sportsreference/ncaab_sportsreference_league_model.py +0 -0
  114. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/ncaaf/__init__.py +0 -0
  115. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/ncaaf/combined/__init__.py +0 -0
  116. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/ncaaf/combined/ncaaf_combined_league_model.py +0 -0
  117. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/ncaaf/espn/__init__.py +0 -0
  118. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/ncaaf/espn/ncaaf_espn_league_model.py +0 -0
  119. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/ncaaf/oddsportal/__init__.py +0 -0
  120. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/ncaaf/oddsportal/ncaaf_oddsportal_league_model.py +0 -0
  121. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/news_model.py +0 -0
  122. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/nfl/__init__.py +0 -0
  123. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/nfl/aussportsbetting/__init__.py +0 -0
  124. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/nfl/aussportsbetting/nfl_aussportsbetting_league_model.py +0 -0
  125. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/nfl/combined/__init__.py +0 -0
  126. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/nfl/combined/nfl_combined_league_model.py +0 -0
  127. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/nfl/espn/__init__.py +0 -0
  128. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/nfl/espn/nfl_espn_league_model.py +0 -0
  129. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/nfl/oddsportal/__init__.py +0 -0
  130. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/nfl/oddsportal/nfl_oddsportal_league_model.py +0 -0
  131. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/nfl/sportsdb/__init__.py +0 -0
  132. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/nfl/sportsdb/nfl_sportsdb_league_model.py +0 -0
  133. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/odds_model.py +0 -0
  134. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/oddsportal/__init__.py +0 -0
  135. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/oddsportal/decrypt.py +0 -0
  136. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/oddsportal/oddsportal_bookie_model.py +0 -0
  137. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/oddsportal/oddsportal_game_model.py +0 -0
  138. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/oddsportal/oddsportal_league_model.py +0 -0
  139. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/oddsportal/oddsportal_odds_model.py +0 -0
  140. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/oddsportal/oddsportal_team_model.py +0 -0
  141. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/oddsportal/oddsportal_venue_model.py +0 -0
  142. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/season_type.py +0 -0
  143. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/social_model.py +0 -0
  144. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/sportsdb/__init__.py +0 -0
  145. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/sportsdb/sportsdb_game_model.py +0 -0
  146. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/sportsdb/sportsdb_league_model.py +0 -0
  147. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/sportsdb/sportsdb_team_model.py +0 -0
  148. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/sportsdb/sportsdb_venue_model.py +0 -0
  149. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/sportsreference/__init__.py +0 -0
  150. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/sportsreference/sportsreference_game_model.py +0 -0
  151. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/sportsreference/sportsreference_team_model.py +0 -0
  152. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/sportsreference/sportsreference_venue_model.py +0 -0
  153. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/team_model.py +0 -0
  154. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/venue_model.py +0 -0
  155. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/weather/__init__.py +0 -0
  156. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/weather/gribstream/__init__.py +0 -0
  157. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/weather/gribstream/gribstream_weather_model.py +0 -0
  158. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/weather/multi_weather_model.py +0 -0
  159. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/weather/openmeteo/__init__.py +0 -0
  160. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/weather/openmeteo/openmeteo_weather_model.py +0 -0
  161. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/weather_model.py +0 -0
  162. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/wikipedia/__init__.py +0 -0
  163. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/wikipedia/wikipedia_venue_model.py +0 -0
  164. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/x/__init__.py +0 -0
  165. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/data/x/x_social_model.py +0 -0
  166. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/logger.py +0 -0
  167. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/loglevel.py +0 -0
  168. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/playwright.py +0 -0
  169. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/proxy_session.py +0 -0
  170. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/session.py +0 -0
  171. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/sportsball.py +0 -0
  172. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/vendor/__init__.py +0 -0
  173. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball/vendor/pygooglenews/__init__.py +0 -0
  174. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball.egg-info/dependency_links.txt +0 -0
  175. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball.egg-info/entry_points.txt +0 -0
  176. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball.egg-info/not-zip-safe +0 -0
  177. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball.egg-info/requires.txt +0 -0
  178. {sportsball-0.3.123 → sportsball-0.3.125}/sportsball.egg-info/top_level.txt +0 -0
  179. {sportsball-0.3.123 → sportsball-0.3.125}/tests/__init__.py +0 -0
  180. {sportsball-0.3.123 → sportsball-0.3.125}/tests/data/__init__.py +0 -0
  181. {sportsball-0.3.123 → sportsball-0.3.125}/tests/data/afl/__init__.py +0 -0
  182. {sportsball-0.3.123 → sportsball-0.3.125}/tests/data/afl/afl/__init__.py +0 -0
  183. {sportsball-0.3.123 → sportsball-0.3.125}/tests/data/afl/afltables/__init__.py +0 -0
  184. {sportsball-0.3.123 → sportsball-0.3.125}/tests/data/afl/afltables/afl_afltables_league_model_test.py +0 -0
  185. {sportsball-0.3.123 → sportsball-0.3.125}/tests/data/aussportsbetting/__init__.py +0 -0
  186. {sportsball-0.3.123 → sportsball-0.3.125}/tests/data/aussportsbetting/aussportsbetting_game_model_test.py +0 -0
  187. {sportsball-0.3.123 → sportsball-0.3.125}/tests/data/combined/__init__.py +0 -0
  188. {sportsball-0.3.123 → sportsball-0.3.125}/tests/data/combined/combined_game_model_test.py +0 -0
  189. {sportsball-0.3.123 → sportsball-0.3.125}/tests/data/espn/__init__.py +0 -0
  190. {sportsball-0.3.123 → sportsball-0.3.125}/tests/data/espn/espn_game_model_test.py +0 -0
  191. {sportsball-0.3.123 → sportsball-0.3.125}/tests/data/espn/espn_player_model_test.py +0 -0
  192. {sportsball-0.3.123 → sportsball-0.3.125}/tests/data/game_model_test.py +0 -0
  193. {sportsball-0.3.123 → sportsball-0.3.125}/tests/data/google/__init__.py +0 -0
  194. {sportsball-0.3.123 → sportsball-0.3.125}/tests/data/google/google_address_model_test.py +0 -0
  195. {sportsball-0.3.123 → sportsball-0.3.125}/tests/data/google/google_news_model_test.py +0 -0
  196. {sportsball-0.3.123 → sportsball-0.3.125}/tests/data/nba/__init__.py +0 -0
  197. {sportsball-0.3.123 → sportsball-0.3.125}/tests/data/nba/nba/__init__.py +0 -0
  198. {sportsball-0.3.123 → sportsball-0.3.125}/tests/data/nba/nba/nba_nba_game_model_test.py +0 -0
  199. {sportsball-0.3.123 → sportsball-0.3.125}/tests/data/nba/nba/nba_nba_league_model_test.py +0 -0
  200. {sportsball-0.3.123 → sportsball-0.3.125}/tests/data/nba/nba/nba_nba_team_model_test.py +0 -0
  201. {sportsball-0.3.123 → sportsball-0.3.125}/tests/data/nba/sportsdb/__init__.py +0 -0
  202. {sportsball-0.3.123 → sportsball-0.3.125}/tests/data/nba/sportsdb/nba_sportsdb_league_model_test.py +0 -0
  203. {sportsball-0.3.123 → sportsball-0.3.125}/tests/data/nba/sportsreference/__init__.py +0 -0
  204. {sportsball-0.3.123 → sportsball-0.3.125}/tests/data/nba/sportsreference/nba_sportsreference_league_model_test.py +0 -0
  205. {sportsball-0.3.123 → sportsball-0.3.125}/tests/data/ncaab/__init__.py +0 -0
  206. {sportsball-0.3.123 → sportsball-0.3.125}/tests/data/ncaab/sportsreference/__init__.py +0 -0
  207. {sportsball-0.3.123 → sportsball-0.3.125}/tests/data/ncaab/sportsreference/ncaab_sportsreference_league_model_test.py +0 -0
  208. {sportsball-0.3.123 → sportsball-0.3.125}/tests/data/nfl/__init__.py +0 -0
  209. {sportsball-0.3.123 → sportsball-0.3.125}/tests/data/nfl/sportsdb/__init__.py +0 -0
  210. {sportsball-0.3.123 → sportsball-0.3.125}/tests/data/nfl/sportsdb/nfl_sportsdb_league_model_test.py +0 -0
  211. {sportsball-0.3.123 → sportsball-0.3.125}/tests/data/oddsportal/__init__.py +0 -0
  212. {sportsball-0.3.123 → sportsball-0.3.125}/tests/data/oddsportal/decrypt_test.py +0 -0
  213. {sportsball-0.3.123 → sportsball-0.3.125}/tests/data/oddsportal/oddsportal_game_model_test.py +0 -0
  214. {sportsball-0.3.123 → sportsball-0.3.125}/tests/data/oddsportal/oddsportal_league_model_test.py +0 -0
  215. {sportsball-0.3.123 → sportsball-0.3.125}/tests/data/social_model_test.py +0 -0
  216. {sportsball-0.3.123 → sportsball-0.3.125}/tests/data/sportsdb/__init__.py +0 -0
  217. {sportsball-0.3.123 → sportsball-0.3.125}/tests/data/sportsdb/sportsdb_game_model_test.py +0 -0
  218. {sportsball-0.3.123 → sportsball-0.3.125}/tests/data/sportsdb/sportsdb_league_model_test.py +0 -0
  219. {sportsball-0.3.123 → sportsball-0.3.125}/tests/data/sportsdb/sportsdb_team_model_test.py +0 -0
  220. {sportsball-0.3.123 → sportsball-0.3.125}/tests/data/sportsdb/sportsdb_venue_model_test.py +0 -0
  221. {sportsball-0.3.123 → sportsball-0.3.125}/tests/data/sportsreference/__init__.py +0 -0
  222. {sportsball-0.3.123 → sportsball-0.3.125}/tests/data/sportsreference/sportsreference_game_model_test.py +0 -0
  223. {sportsball-0.3.123 → sportsball-0.3.125}/tests/data/sportsreference/sportsreference_league_model_test.py +0 -0
  224. {sportsball-0.3.123 → sportsball-0.3.125}/tests/data/sportsreference/sportsreference_player_model_test.py +0 -0
  225. {sportsball-0.3.123 → sportsball-0.3.125}/tests/data/sportsreference/sportsreference_team_model_test.py +0 -0
  226. {sportsball-0.3.123 → sportsball-0.3.125}/tests/data/sportsreference/sportsreference_venue_model_test.py +0 -0
  227. {sportsball-0.3.123 → sportsball-0.3.125}/tests/data/team_model_test.py +0 -0
  228. {sportsball-0.3.123 → sportsball-0.3.125}/tests/data/x/__init__.py +0 -0
  229. {sportsball-0.3.123 → sportsball-0.3.125}/tests/data/x/x_social_model_test.py +0 -0
  230. {sportsball-0.3.123 → sportsball-0.3.125}/tests/proxy_session_test.py +0 -0
  231. {sportsball-0.3.123 → sportsball-0.3.125}/tests/sportsball_test.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: sportsball
3
- Version: 0.3.123
3
+ Version: 0.3.125
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.123',
29
+ version='0.3.125',
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.123"
7
+ __VERSION__ = "0.3.125"
@@ -0,0 +1,153 @@
1
+ """AFL AFL game model."""
2
+
3
+ # pylint: disable=too-many-statements,protected-access,too-many-arguments,bare-except,duplicate-code
4
+ import datetime
5
+ import re
6
+
7
+ import pytest_is_running
8
+ import requests_cache
9
+ from bs4 import BeautifulSoup, Tag
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 parse_players_v1(div: Tag) -> list[list[tuple[str, str, str, str]]]:
20
+ """Parses the players from a v1 format."""
21
+ teams_players: list[list[tuple[str, str, str, str]]] = [[], []]
22
+ for div_positions_row in div.find_all(
23
+ "div", {"class": re.compile(".*team-lineups__positions-row.*")}
24
+ ):
25
+ row_players: list[list[tuple[str, str, str, str]]] = [[], []]
26
+ for count, div_team_players in enumerate(
27
+ div_positions_row.find_all(
28
+ "div",
29
+ {"class": re.compile(".*team-lineups__positions-players-container.*")},
30
+ )
31
+ ):
32
+ team_players: list[tuple[str, str, str, str]] = []
33
+ for a in div_team_players.find_all(
34
+ "a", {"class": re.compile(".*js-player-profile-link.*")}
35
+ ):
36
+ player_id = "afl:" + a.get("data-player-id")
37
+ first_name = a.get("data-first-name")
38
+ second_name = a.get("data-surname")
39
+ player_number = None
40
+ for span_player_number in a.find_all(
41
+ "span",
42
+ {"class": re.compile(".*team-lineups__player-number.*")},
43
+ ):
44
+ player_number = (
45
+ span_player_number.get_text()
46
+ .strip()
47
+ .replace("[", "")
48
+ .replace("]", "")
49
+ )
50
+ if player_number is None:
51
+ raise ValueError("player_number is null")
52
+ team_players.append((player_id, player_number, first_name, second_name))
53
+ row_players[count].extend(team_players)
54
+ for count, row_players_list in enumerate(row_players):
55
+ teams_players[count].extend(row_players_list)
56
+ return teams_players
57
+
58
+
59
+ def _extract_odds(soup: BeautifulSoup) -> list[float]:
60
+ odds = []
61
+ for span in soup.find_all("span", {"class": "betting-button__money"}):
62
+ odds.append(float(span.get_text().strip().replace("$", "")))
63
+ return odds
64
+
65
+
66
+ def _extract_dt(soup: BeautifulSoup) -> datetime.datetime:
67
+ for div in soup.find_all("div", {"class": re.compile(".*js-match-start-time.*")}):
68
+ start_time = div.get("data-start-time")
69
+ return datetime.datetime.fromisoformat(start_time)
70
+ raise ValueError("Unable to find datetime")
71
+
72
+
73
+ def _extract_players(
74
+ soup: BeautifulSoup, players: list[list[tuple[str, str, str, str]]]
75
+ ) -> list[list[tuple[str, str, str, str]]]:
76
+ def is_players_empty() -> bool:
77
+ nonlocal players
78
+ if not players:
79
+ return True
80
+ for team in players:
81
+ if not team:
82
+ return True
83
+ return False
84
+
85
+ if not is_players_empty():
86
+ return players
87
+
88
+ for div in soup.find_all("div", {"class": re.compile(".*js-match-list-item.*")}):
89
+ players = parse_players_v1(div)
90
+ if not is_players_empty():
91
+ return players
92
+
93
+ return players
94
+
95
+
96
+ def _parse(
97
+ html: str, players: list[list[tuple[str, str, str, str]]]
98
+ ) -> tuple[list[float], datetime.datetime, list[list[tuple[str, str, str, str]]]]:
99
+ soup = BeautifulSoup(html, "lxml")
100
+ return _extract_odds(soup), _extract_dt(soup), _extract_players(soup, players)
101
+
102
+
103
+ def create_afl_afl_game_model(
104
+ team_names: list[str],
105
+ players: list[list[tuple[str, str, str, str]]],
106
+ dt: datetime.datetime | None,
107
+ venue_name: str,
108
+ session: requests_cache.CachedSession,
109
+ ladder: list[str],
110
+ url: str | None,
111
+ playwright: Playwright,
112
+ ) -> GameModel:
113
+ """Create a game model from AFL Tables."""
114
+ odds: list[float] = []
115
+ if url is not None and not pytest_is_running.is_running():
116
+ ensure_install()
117
+ browser = playwright.chromium.launch()
118
+ context = browser.new_context()
119
+ page = context.new_page()
120
+ try:
121
+ page.goto(url + "#line-ups", wait_until="networkidle")
122
+ except: # noqa: E722
123
+ pass
124
+ odds, dt, players = _parse(page.content(), players)
125
+ if dt is None:
126
+ raise ValueError("dt is null")
127
+
128
+ venue_model = create_afl_afl_venue_model(venue_name, session, dt)
129
+ teams = [
130
+ create_afl_afl_team_model(
131
+ x,
132
+ players[count],
133
+ session,
134
+ dt,
135
+ ladder,
136
+ odds[count] if count < len(odds) else None,
137
+ )
138
+ for count, x in enumerate(team_names)
139
+ ]
140
+ return GameModel(
141
+ dt=dt,
142
+ week=None,
143
+ game_number=None,
144
+ venue=venue_model,
145
+ teams=teams,
146
+ end_dt=None,
147
+ attendance=None,
148
+ league=League.AFL,
149
+ year=datetime.datetime.today().year,
150
+ season_type=None,
151
+ postponed=None,
152
+ play_off=None,
153
+ )
@@ -16,7 +16,7 @@ from ....playwright import ensure_install
16
16
  from ...game_model import GameModel
17
17
  from ...league import League
18
18
  from ...league_model import LeagueModel
19
- from .afl_afl_game_model import create_afl_afl_game_model
19
+ from .afl_afl_game_model import create_afl_afl_game_model, parse_players_v1
20
20
 
21
21
 
22
22
  def _parse_v1(
@@ -32,47 +32,7 @@ def _parse_v1(
32
32
  "span", {"class": re.compile(".*team-lineups__team-name.*")}
33
33
  ):
34
34
  team_names.append(span.get_text().strip())
35
- teams_players: list[list[tuple[str, str, str, str]]] = [[], []]
36
- for div_positions_row in div.find_all(
37
- "div", {"class": re.compile(".*team-lineups__positions-row.*")}
38
- ):
39
- row_players: list[list[tuple[str, str, str, str]]] = [[], []]
40
- for count, div_team_players in enumerate(
41
- div_positions_row.find_all(
42
- "div",
43
- {
44
- "class": re.compile(
45
- ".*team-lineups__positions-players-container.*"
46
- )
47
- },
48
- )
49
- ):
50
- team_players: list[tuple[str, str, str, str]] = []
51
- for a in div_team_players.find_all(
52
- "a", {"class": re.compile(".*js-player-profile-link.*")}
53
- ):
54
- player_id = "afl:" + a.get("data-player-id")
55
- first_name = a.get("data-first-name")
56
- second_name = a.get("data-surname")
57
- player_number = None
58
- for span_player_number in a.find_all(
59
- "span",
60
- {"class": re.compile(".*team-lineups__player-number.*")},
61
- ):
62
- player_number = (
63
- span_player_number.get_text()
64
- .strip()
65
- .replace("[", "")
66
- .replace("]", "")
67
- )
68
- if player_number is None:
69
- raise ValueError("player_number is null")
70
- team_players.append(
71
- (player_id, player_number, first_name, second_name)
72
- )
73
- row_players[count].extend(team_players)
74
- for count, row_players_list in enumerate(row_players):
75
- teams_players[count].extend(row_players_list)
35
+ teams_players = parse_players_v1(div)
76
36
  dt = None
77
37
  for time in div.find_all(
78
38
  "time", {"class": re.compile(".*match-list-alt__header-time.*")}
@@ -109,13 +69,9 @@ def _parse_v1(
109
69
  )
110
70
 
111
71
 
112
- def _parse_v2(
113
- soup: BeautifulSoup,
114
- session: requests_cache.CachedSession,
115
- ladder: list[str],
116
- html_url: str,
117
- playwright: Playwright,
118
- ) -> Iterator[GameModel]:
72
+ def _parse_v2_soup(
73
+ soup: BeautifulSoup, html_url: str
74
+ ) -> Iterator[tuple[list[str], list[list[tuple[str, str, str, str]]], str, str]]:
119
75
  for div in soup.find_all("div", {"class": "team-lineups__item"}):
120
76
  team_names = []
121
77
  for span in div.find_all(
@@ -154,7 +110,7 @@ def _parse_v2(
154
110
  ):
155
111
  team_players = process_a_player(a, 1, team_players)
156
112
 
157
- venue_name = None
113
+ venue_name: str | None = None
158
114
  for div_info in div.find_all("div", {"class": "team-lineups-header__info"}):
159
115
  header_info = div_info.get_text().strip()
160
116
  venue_name = header_info.split("・")[1].strip()
@@ -164,7 +120,20 @@ def _parse_v2(
164
120
  url = None
165
121
  for a in div.find_all("a", {"class": "team-lineups-header"}):
166
122
  url = urllib.parse.urljoin(html_url, a.get("href"))
123
+ if url is None:
124
+ raise ValueError("url is null")
125
+
126
+ yield (team_names, team_players, venue_name, url)
127
+
167
128
 
129
+ def _parse_v2(
130
+ soup: BeautifulSoup,
131
+ session: requests_cache.CachedSession,
132
+ ladder: list[str],
133
+ html_url: str,
134
+ playwright: Playwright,
135
+ ) -> Iterator[GameModel]:
136
+ for team_names, team_players, venue_name, url in _parse_v2_soup(soup, html_url):
168
137
  yield create_afl_afl_game_model(
169
138
  team_names,
170
139
  team_players,
@@ -44,4 +44,5 @@ def create_afl_afl_player_model(
44
44
  bounces=None,
45
45
  goal_assists=None,
46
46
  percentage_played=None,
47
+ birth_date=None,
47
48
  )
@@ -30,6 +30,8 @@ def create_afl_afl_team_model(
30
30
  odds_models = []
31
31
  if odds is not None:
32
32
  odds_models.append(create_afl_afl_odds_model(odds))
33
+ if team_name not in ladder:
34
+ raise ValueError(f"{team_name} not found in ladder")
33
35
  return TeamModel(
34
36
  identifier=team_name,
35
37
  name=team_name,
@@ -1,12 +1,13 @@
1
1
  """AFL AFLTables player model."""
2
2
 
3
3
  # pylint: disable=line-too-long,duplicate-code,too-many-arguments,too-many-locals
4
- import datetime
5
4
  import os
6
5
  from urllib.parse import urlparse
7
6
 
8
7
  import pytest_is_running
9
8
  import requests_cache
9
+ from bs4 import BeautifulSoup
10
+ from dateutil.parser import parse
10
11
 
11
12
  from ....cache import MEMORY
12
13
  from ...player_model import PlayerModel
@@ -39,11 +40,16 @@ def _create_afl_afltables_player_model(
39
40
  bounces: int | None,
40
41
  goal_assists: int | None,
41
42
  percentage_played: float | None,
43
+ session: requests_cache.CachedSession,
42
44
  ) -> PlayerModel:
43
45
  o = urlparse(player_url)
44
46
  last_component = o.path.split("/")[-1]
45
47
  identifier, _ = os.path.splitext(last_component)
46
48
  jersey = "".join(filter(str.isdigit, jersey))
49
+ response = session.get(player_url)
50
+ response.raise_for_status()
51
+ soup = BeautifulSoup(response.text, "lxml")
52
+ birth_date = parse(soup.get_text().split("Born:")[1].strip().split()[0].strip())
47
53
  return PlayerModel(
48
54
  identifier=identifier,
49
55
  jersey=jersey,
@@ -78,6 +84,7 @@ def _create_afl_afltables_player_model(
78
84
  bounces=bounces,
79
85
  goal_assists=goal_assists,
80
86
  percentage_played=percentage_played,
87
+ birth_date=birth_date,
81
88
  )
82
89
 
83
90
 
@@ -109,6 +116,7 @@ def _cached_create_afl_afltables_player_model(
109
116
  bounces: int | None,
110
117
  goal_assists: int | None,
111
118
  percentage_played: float | None,
119
+ session: requests_cache.CachedSession,
112
120
  ) -> PlayerModel:
113
121
  return _create_afl_afltables_player_model(
114
122
  player_url,
@@ -137,6 +145,7 @@ def _cached_create_afl_afltables_player_model(
137
145
  bounces,
138
146
  goal_assists,
139
147
  percentage_played,
148
+ session,
140
149
  )
141
150
 
142
151
 
@@ -144,7 +153,6 @@ def create_afl_afltables_player_model(
144
153
  player_url: str,
145
154
  jersey: str,
146
155
  kicks: int | None,
147
- dt: datetime.datetime,
148
156
  session: requests_cache.CachedSession,
149
157
  name: str,
150
158
  marks: int | None,
@@ -171,10 +179,7 @@ def create_afl_afltables_player_model(
171
179
  percentage_played: float | None,
172
180
  ) -> PlayerModel:
173
181
  """Create a player model from AFL Tables."""
174
- if (
175
- not pytest_is_running.is_running()
176
- and dt < datetime.datetime.now() - datetime.timedelta(days=7)
177
- ):
182
+ if not pytest_is_running.is_running():
178
183
  return _cached_create_afl_afltables_player_model(
179
184
  player_url,
180
185
  jersey,
@@ -202,6 +207,7 @@ def create_afl_afltables_player_model(
202
207
  bounces,
203
208
  goal_assists,
204
209
  percentage_played,
210
+ session,
205
211
  )
206
212
  with session.cache_disabled():
207
213
  return _create_afl_afltables_player_model(
@@ -231,4 +237,5 @@ def create_afl_afltables_player_model(
231
237
  bounces,
232
238
  goal_assists,
233
239
  percentage_played,
240
+ session,
234
241
  )
@@ -104,7 +104,6 @@ def _create_afl_afltables_team_model(
104
104
  player_url,
105
105
  jersey,
106
106
  kicks,
107
- dt,
108
107
  session,
109
108
  name,
110
109
  marks,
@@ -231,10 +230,7 @@ def create_afl_afltables_team_model(
231
230
  league: League,
232
231
  ) -> TeamModel:
233
232
  """Create a team model from AFL Tables."""
234
- if (
235
- not pytest_is_running.is_running()
236
- and dt < datetime.datetime.now() - datetime.timedelta(days=7)
237
- ):
233
+ if not pytest_is_running.is_running():
238
234
  return _cached_create_afl_afltables_team_model(
239
235
  team_url, players, points, session, last_ladder_ranks, dt, league
240
236
  )
@@ -41,6 +41,7 @@ def create_combined_player_model(
41
41
  bounces = None
42
42
  goal_assists = None
43
43
  percentage_played = None
44
+ birth_date = None
44
45
  for player_model in player_models:
45
46
  player_model_jersey = player_model.jersey
46
47
  if not is_null(player_model_jersey):
@@ -138,6 +139,9 @@ def create_combined_player_model(
138
139
  player_model_percentage_played = player_model.percentage_played
139
140
  if not is_null(player_model_percentage_played):
140
141
  percentage_played = player_model_percentage_played
142
+ player_model_birth_date = player_model.birth_date
143
+ if not is_null(player_model_birth_date):
144
+ birth_date = player_model_birth_date
141
145
  if name is None:
142
146
  raise ValueError("name is null.")
143
147
  return PlayerModel(
@@ -174,4 +178,5 @@ def create_combined_player_model(
174
178
  bounces=bounces,
175
179
  goal_assists=goal_assists,
176
180
  percentage_played=percentage_played,
181
+ birth_date=birth_date,
177
182
  )
@@ -6,6 +6,7 @@ from typing import Any
6
6
 
7
7
  import pytest_is_running
8
8
  import requests_cache
9
+ from dateutil.parser import parse
9
10
 
10
11
  from ...cache import MEMORY
11
12
  from ..player_model import PlayerModel
@@ -33,6 +34,7 @@ def _create_espn_player_model(
33
34
  athlete_response.raise_for_status()
34
35
  athlete_dict = athlete_response.json()
35
36
  name = athlete_dict["fullName"]
37
+ birth_date = parse(athlete_dict["dateOfBirth"]).date()
36
38
  return PlayerModel(
37
39
  identifier=identifier,
38
40
  jersey=jersey,
@@ -67,6 +69,7 @@ def _create_espn_player_model(
67
69
  bounces=None,
68
70
  goal_assists=None,
69
71
  percentage_played=None,
72
+ birth_date=birth_date,
70
73
  )
71
74
 
72
75
 
@@ -2620,6 +2620,33 @@ MCCAMISH_PAVILION = SportsballGeocodeTuple(
2620
2620
  housenumber="965",
2621
2621
  country="USA",
2622
2622
  )
2623
+ TUDOR_FIELDHOUSE = SportsballGeocodeTuple(
2624
+ city="Houston",
2625
+ state="TX",
2626
+ postal="77251",
2627
+ lat=29.715102,
2628
+ lng=-95.403895,
2629
+ housenumber="6100",
2630
+ country="USA",
2631
+ )
2632
+ HAGAN_ARENA = SportsballGeocodeTuple(
2633
+ city="Philadelphia",
2634
+ state="PA",
2635
+ postal="",
2636
+ lat=39.995245,
2637
+ lng=-75.234806,
2638
+ housenumber="",
2639
+ country="USA",
2640
+ )
2641
+ COORS_EVENTS_CONFERENCE_CENTER = SportsballGeocodeTuple(
2642
+ city="Boulder",
2643
+ state="CO",
2644
+ postal="",
2645
+ lat=40.0047,
2646
+ lng=-105.2606,
2647
+ housenumber="950",
2648
+ country="USA",
2649
+ )
2623
2650
  _CACHED_GEOCODES: dict[str, Any] = {
2624
2651
  "S.C.G. - Australia": SCG,
2625
2652
  "Victoria Park - Australia": SportsballGeocodeTuple(
@@ -4566,15 +4593,7 @@ _CACHED_GEOCODES: dict[str, Any] = {
4566
4593
  housenumber="820",
4567
4594
  country="USA",
4568
4595
  ),
4569
- "Hagan Arena, Philadelphia, Pennsylvania": SportsballGeocodeTuple(
4570
- city="Philadelphia",
4571
- state="PA",
4572
- postal="",
4573
- lat=39.995245,
4574
- lng=-75.234806,
4575
- housenumber="",
4576
- country="USA",
4577
- ),
4596
+ "Hagan Arena, Philadelphia, Pennsylvania": HAGAN_ARENA,
4578
4597
  "Wells Fargo Center, Philadelphia, Pennsylvania": SPECTRUM,
4579
4598
  "UW-Milwaukee Panther Arena, Milwaukee, Wisconsin": MILWAUKEE_ARENA,
4580
4599
  "Pauley Pavilion, Los Angeles, California": SportsballGeocodeTuple(
@@ -5313,15 +5332,7 @@ _CACHED_GEOCODES: dict[str, Any] = {
5313
5332
  housenumber="601",
5314
5333
  country="USA",
5315
5334
  ),
5316
- "Coors Events/Conference Center, Boulder, Colorado": SportsballGeocodeTuple(
5317
- city="Boulder",
5318
- state="CO",
5319
- postal="",
5320
- lat=40.0047,
5321
- lng=-105.2606,
5322
- housenumber="950",
5323
- country="USA",
5324
- ),
5335
+ "Coors Events/Conference Center, Boulder, Colorado": COORS_EVENTS_CONFERENCE_CENTER,
5325
5336
  "Hamilton Gymnasium, Denver, Colorado": SportsballGeocodeTuple(
5326
5337
  city="Denver",
5327
5338
  state="CO",
@@ -5539,15 +5550,7 @@ _CACHED_GEOCODES: dict[str, Any] = {
5539
5550
  ),
5540
5551
  "Charles Koch Arena, Wichita, Kansas": CHARLES_KOCH_ARENA,
5541
5552
  "CHI Health Center Omaha, Omaha, Nebraska": CHI_HEALTH_CENTER,
5542
- "Tudor Fieldhouse, Houston, Texas": SportsballGeocodeTuple(
5543
- city="Houston",
5544
- state="TX",
5545
- postal="77251",
5546
- lat=29.715102,
5547
- lng=-95.403895,
5548
- housenumber="6100",
5549
- country="USA",
5550
- ),
5553
+ "Tudor Fieldhouse, Houston, Texas": TUDOR_FIELDHOUSE,
5551
5554
  "Show Me Center, Cape Girardeau, Missouri": SportsballGeocodeTuple(
5552
5555
  city="Cape Girardeau",
5553
5556
  state="MO",
@@ -6228,7 +6231,7 @@ _CACHED_GEOCODES: dict[str, Any] = {
6228
6231
  ),
6229
6232
  "Mizzou Arena, Columbia, Missouri": SportsballGeocodeTuple(
6230
6233
  city="Columbia",
6231
- state="MS",
6234
+ state="MO",
6232
6235
  postal="65211",
6233
6236
  lat=38.93237,
6234
6237
  lng=-92.33303,
@@ -7637,7 +7640,7 @@ _CACHED_GEOCODES: dict[str, Any] = {
7637
7640
  ),
7638
7641
  "T-Mobile Center, Kansas City, Missouri": SportsballGeocodeTuple(
7639
7642
  city="Kansas City",
7640
- state="MS",
7643
+ state="MO",
7641
7644
  postal="",
7642
7645
  lat=39.0975,
7643
7646
  lng=-94.580278,
@@ -10383,7 +10386,7 @@ _CACHED_GEOCODES: dict[str, Any] = {
10383
10386
  "ExploreAsheville.com Arena, Asheville, North Carolina": HARRAHS_CHEROKEE_CENTER,
10384
10387
  "St. Louis, Missouri": SportsballGeocodeTuple(
10385
10388
  city="St. Louis",
10386
- state="MS",
10389
+ state="MO",
10387
10390
  postal="",
10388
10391
  lat=38.627222,
10389
10392
  lng=-90.197778,
@@ -10500,7 +10503,7 @@ _CACHED_GEOCODES: dict[str, Any] = {
10500
10503
  ),
10501
10504
  "Springfield, Missouri": SportsballGeocodeTuple(
10502
10505
  city="Springfield",
10503
- state="MS",
10506
+ state="MO",
10504
10507
  postal="",
10505
10508
  lat=37.215278,
10506
10509
  lng=-93.298333,
@@ -10894,7 +10897,7 @@ _CACHED_GEOCODES: dict[str, Any] = {
10894
10897
  ),
10895
10898
  "Sikeston Field House, Sikeston, Missouri": SportsballGeocodeTuple(
10896
10899
  city="Sikeston",
10897
- state="MS",
10900
+ state="MO",
10898
10901
  postal="63801",
10899
10902
  lat=36.87943,
10900
10903
  lng=-89.57209,
@@ -10994,7 +10997,7 @@ _CACHED_GEOCODES: dict[str, Any] = {
10994
10997
  ),
10995
10998
  "Columbia, Missouri": SportsballGeocodeTuple(
10996
10999
  city="Columbia",
10997
- state="MS",
11000
+ state="MO",
10998
11001
  postal="",
10999
11002
  lat=38.9475,
11000
11003
  lng=-92.326667,
@@ -11462,7 +11465,7 @@ _CACHED_GEOCODES: dict[str, Any] = {
11462
11465
  "Miami Beach Auditorium, Miami Beach, Florida": MIAMI_BEACH_CONVENTION_CENTER,
11463
11466
  "Kiel Auditorium, St. Louis, Missouri": SportsballGeocodeTuple(
11464
11467
  city="St. Louis",
11465
- state="MS",
11468
+ state="MO",
11466
11469
  postal="63103",
11467
11470
  lat=38.627972,
11468
11471
  lng=-90.201782,
@@ -13924,6 +13927,57 @@ _CACHED_GEOCODES: dict[str, Any] = {
13924
13927
  ),
13925
13928
  "GMHBA Stadium, Geelong": GMHBA_STADIUM,
13926
13929
  "Paycom Center, Oklahoma City, OK": PAYCOM_CENTRE,
13930
+ "Kentucky International Convention Center, Louisville, Kentucky": SportsballGeocodeTuple(
13931
+ city="Louisville",
13932
+ state="KY",
13933
+ postal="",
13934
+ lat=38.254194,
13935
+ lng=-85.755111,
13936
+ housenumber="",
13937
+ country="USA",
13938
+ ),
13939
+ "Madison Square Garden, New York, NY": MADISON_SQUARE_GARDEN,
13940
+ "Hoffman Estates, Illinois": SportsballGeocodeTuple(
13941
+ city="Hoffman Estates",
13942
+ state="IL",
13943
+ postal="",
13944
+ lat=42.063889,
13945
+ lng=-88.146944,
13946
+ housenumber="",
13947
+ country="USA",
13948
+ ),
13949
+ "Bojangles Coliseum, Charlotte, North Carolina": SportsballGeocodeTuple(
13950
+ city="Charlotte",
13951
+ state="NC",
13952
+ postal="",
13953
+ lat=35.205164,
13954
+ lng=-80.795103,
13955
+ housenumber="2700",
13956
+ country="USA",
13957
+ ),
13958
+ "Rice Gymnasium, Houston, Texas": TUDOR_FIELDHOUSE,
13959
+ "Alumni Memorial Fieldhouse, Philadelphia, Pennsylvania": HAGAN_ARENA,
13960
+ "Colonial Center, Columbia, South Carolina": COLONIAL_LIFE_ARENA,
13961
+ "F. Mitchell Johnson Center, Charleston, South Carolina": SportsballGeocodeTuple(
13962
+ city="Charleston",
13963
+ state="SC",
13964
+ postal="",
13965
+ lat=32.785278,
13966
+ lng=-79.934167,
13967
+ housenumber="",
13968
+ country="USA",
13969
+ ),
13970
+ "Coors Events Center, Boulder, Colorado": COORS_EVENTS_CONFERENCE_CENTER,
13971
+ "Target Center, Minneapolis, MN": TARGET_CENTER,
13972
+ "Hammons Student Center, Springfield, Missouri": SportsballGeocodeTuple(
13973
+ city="Springfield",
13974
+ state="MO",
13975
+ postal="",
13976
+ lat=37.202222,
13977
+ lng=-93.284444,
13978
+ housenumber="",
13979
+ country="USA",
13980
+ ),
13927
13981
  }
13928
13982
 
13929
13983
 
@@ -885,8 +885,11 @@ NBA_VENUE_IDENTITY_MAP: dict[str, str] = {
885
885
  "24838": SPECTRUM_CENTER,
886
886
  "28619": KASEYA_CENTER,
887
887
  "24727": FEDEX_FORUM,
888
+ "24828": CHASE_CENTER,
888
889
  # NBACom
889
890
  "Paycom Center, Oklahoma City, OK": PAYCOM_CENTER,
891
+ "Madison Square Garden, New York, NY": MADISON_SQUARE_GARDEN,
892
+ "Target Center, Minneapolis, MN": TARGET_CENTER,
890
893
  }
891
894
  NBA_PLAYER_IDENTITY_MAP: dict[str, str] = {}
892
895
 
@@ -41,4 +41,5 @@ def create_nba_nbacom_player_model(player_dict: dict[str, Any]) -> PlayerModel:
41
41
  bounces=None,
42
42
  goal_assists=None,
43
43
  percentage_played=None,
44
+ birth_date=None,
44
45
  )