sportsball 0.3.54__tar.gz → 0.3.56__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 (216) hide show
  1. {sportsball-0.3.54/sportsball.egg-info → sportsball-0.3.56}/PKG-INFO +2 -2
  2. {sportsball-0.3.54 → sportsball-0.3.56}/requirements.txt +1 -1
  3. {sportsball-0.3.54 → sportsball-0.3.56}/setup.py +1 -1
  4. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/__init__.py +1 -1
  5. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/afl/afl/afl_afl_player_model.py +1 -0
  6. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/afl/afltables/afl_afltables_game_model.py +12 -5
  7. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/afl/afltables/afl_afltables_player_model.py +9 -4
  8. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/afl/afltables/afl_afltables_team_model.py +12 -6
  9. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/combined/combined_player_model.py +6 -1
  10. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/espn/espn_player_model.py +1 -0
  11. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/google/google_address_model.py +19 -0
  12. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/player_model.py +6 -0
  13. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/sportsreference/sportsreference_game_model.py +16 -4
  14. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/sportsreference/sportsreference_player_model.py +1 -0
  15. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/sportsreference/sportsreference_team_model.py +1 -0
  16. {sportsball-0.3.54 → sportsball-0.3.56/sportsball.egg-info}/PKG-INFO +2 -2
  17. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball.egg-info/requires.txt +1 -1
  18. {sportsball-0.3.54 → sportsball-0.3.56}/tests/data/afl/afltables/afl_afltables_player_model_test.py +1 -0
  19. {sportsball-0.3.54 → sportsball-0.3.56}/tests/data/combined/combined_player_model_test.py +1 -0
  20. {sportsball-0.3.54 → sportsball-0.3.56}/tests/data/player_model_test.py +1 -0
  21. {sportsball-0.3.54 → sportsball-0.3.56}/tests/data/sportsreference/sportsreference_game_model_test.py +74 -0
  22. {sportsball-0.3.54 → sportsball-0.3.56}/tests/data/sportsreference/sportsreference_team_model_test.py +20 -0
  23. {sportsball-0.3.54 → sportsball-0.3.56}/LICENSE +0 -0
  24. {sportsball-0.3.54 → sportsball-0.3.56}/MANIFEST.in +0 -0
  25. {sportsball-0.3.54 → sportsball-0.3.56}/README.md +0 -0
  26. {sportsball-0.3.54 → sportsball-0.3.56}/setup.cfg +0 -0
  27. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/__main__.py +0 -0
  28. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/args.py +0 -0
  29. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/cache.py +0 -0
  30. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/__init__.py +0 -0
  31. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/address_model.py +0 -0
  32. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/afl/__init__.py +0 -0
  33. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/afl/afl/__init__.py +0 -0
  34. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/afl/afl/afl_afl_game_model.py +0 -0
  35. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/afl/afl/afl_afl_league_model.py +0 -0
  36. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/afl/afl/afl_afl_team_model.py +0 -0
  37. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/afl/afl/afl_afl_venue_model.py +0 -0
  38. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/afl/afltables/__init__.py +0 -0
  39. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/afl/afltables/afl_afltables_league_model.py +0 -0
  40. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/afl/afltables/afl_afltables_venue_model.py +0 -0
  41. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/afl/aussportsbetting/__init__.py +0 -0
  42. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/afl/aussportsbetting/afl_aussportsbetting_league_model.py +0 -0
  43. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/afl/combined/__init__.py +0 -0
  44. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/afl/combined/afl_combined_league_model.py +0 -0
  45. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/afl/espn/__init__.py +0 -0
  46. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/afl/espn/afl_espn_league_model.py +0 -0
  47. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/afl/oddsportal/__init__.py +0 -0
  48. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/afl/oddsportal/afl_oddsportal_league_model.py +0 -0
  49. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/aussportsbetting/__init__.py +0 -0
  50. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/aussportsbetting/aussportsbetting_bookie_model.py +0 -0
  51. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/aussportsbetting/aussportsbetting_game_model.py +0 -0
  52. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/aussportsbetting/aussportsbetting_league_model.py +0 -0
  53. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/aussportsbetting/aussportsbetting_odds_model.py +0 -0
  54. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/aussportsbetting/aussportsbetting_team_model.py +0 -0
  55. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/aussportsbetting/aussportsbetting_venue_model.py +0 -0
  56. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/bookie_model.py +0 -0
  57. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/combined/__init__.py +0 -0
  58. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/combined/combined_address_model.py +0 -0
  59. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/combined/combined_game_model.py +0 -0
  60. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/combined/combined_league_model.py +0 -0
  61. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/combined/combined_team_model.py +0 -0
  62. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/combined/combined_venue_model.py +0 -0
  63. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/combined/combined_weather_model.py +0 -0
  64. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/espn/__init__.py +0 -0
  65. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/espn/espn_bookie_model.py +0 -0
  66. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/espn/espn_game_model.py +0 -0
  67. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/espn/espn_league_model.py +0 -0
  68. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/espn/espn_odds_model.py +0 -0
  69. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/espn/espn_team_model.py +0 -0
  70. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/espn/espn_venue_model.py +0 -0
  71. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/field_type.py +0 -0
  72. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/game_model.py +0 -0
  73. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/google/__init__.py +0 -0
  74. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/google/google_news_model.py +0 -0
  75. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/league.py +0 -0
  76. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/league_model.py +0 -0
  77. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/model.py +0 -0
  78. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/nba/__init__.py +0 -0
  79. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/nba/combined/__init__.py +0 -0
  80. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/nba/combined/nba_combined_league_model.py +0 -0
  81. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/nba/espn/__init__.py +0 -0
  82. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/nba/espn/nba_espn_league_model.py +0 -0
  83. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/nba/nba/__init__.py +0 -0
  84. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/nba/nba/nba_nba_game_model.py +0 -0
  85. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/nba/nba/nba_nba_league_model.py +0 -0
  86. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/nba/nba/nba_nba_team_model.py +0 -0
  87. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/nba/oddsportal/__init__.py +0 -0
  88. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/nba/oddsportal/nba_oddsportal_league_model.py +0 -0
  89. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/nba/sportsdb/__init__.py +0 -0
  90. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/nba/sportsdb/nba_sportsdb_league_model.py +0 -0
  91. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/nba/sportsreference/__init__.py +0 -0
  92. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/nba/sportsreference/nba_sportsreference_league_model.py +0 -0
  93. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/ncaab/__init__.py +0 -0
  94. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/ncaab/combined/__init__.py +0 -0
  95. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/ncaab/combined/ncaab_combined_league_model.py +0 -0
  96. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/ncaab/espn/__init__.py +0 -0
  97. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/ncaab/espn/ncaab_espn_league_model.py +0 -0
  98. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/ncaab/oddsportal/__init__.py +0 -0
  99. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/ncaab/oddsportal/ncaab_oddsportal_league_model.py +0 -0
  100. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/ncaab/sportsreference/__init__.py +0 -0
  101. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/ncaab/sportsreference/ncaab_sportsreference_league_model.py +0 -0
  102. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/ncaaf/__init__.py +0 -0
  103. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/ncaaf/combined/__init__.py +0 -0
  104. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/ncaaf/combined/ncaaf_combined_league_model.py +0 -0
  105. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/ncaaf/espn/__init__.py +0 -0
  106. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/ncaaf/espn/ncaaf_espn_league_model.py +0 -0
  107. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/ncaaf/oddsportal/__init__.py +0 -0
  108. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/ncaaf/oddsportal/ncaaf_oddsportal_league_model.py +0 -0
  109. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/news_model.py +0 -0
  110. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/nfl/__init__.py +0 -0
  111. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/nfl/aussportsbetting/__init__.py +0 -0
  112. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/nfl/aussportsbetting/nfl_aussportsbetting_league_model.py +0 -0
  113. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/nfl/combined/__init__.py +0 -0
  114. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/nfl/combined/nfl_combined_league_model.py +0 -0
  115. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/nfl/espn/__init__.py +0 -0
  116. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/nfl/espn/nfl_espn_league_model.py +0 -0
  117. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/nfl/oddsportal/__init__.py +0 -0
  118. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/nfl/oddsportal/nfl_oddsportal_league_model.py +0 -0
  119. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/nfl/sportsdb/__init__.py +0 -0
  120. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/nfl/sportsdb/nfl_sportsdb_league_model.py +0 -0
  121. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/odds_model.py +0 -0
  122. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/oddsportal/__init__.py +0 -0
  123. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/oddsportal/decrypt.py +0 -0
  124. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/oddsportal/oddsportal_bookie_model.py +0 -0
  125. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/oddsportal/oddsportal_game_model.py +0 -0
  126. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/oddsportal/oddsportal_league_model.py +0 -0
  127. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/oddsportal/oddsportal_odds_model.py +0 -0
  128. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/oddsportal/oddsportal_team_model.py +0 -0
  129. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/oddsportal/oddsportal_venue_model.py +0 -0
  130. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/season_type.py +0 -0
  131. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/social_model.py +0 -0
  132. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/sportsdb/__init__.py +0 -0
  133. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/sportsdb/sportsdb_game_model.py +0 -0
  134. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/sportsdb/sportsdb_league_model.py +0 -0
  135. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/sportsdb/sportsdb_team_model.py +0 -0
  136. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/sportsdb/sportsdb_venue_model.py +0 -0
  137. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/sportsreference/__init__.py +0 -0
  138. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/sportsreference/sportsreference_league_model.py +0 -0
  139. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/sportsreference/sportsreference_venue_model.py +0 -0
  140. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/team_model.py +0 -0
  141. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/venue_model.py +0 -0
  142. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/weather/__init__.py +0 -0
  143. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/weather/gribstream/__init__.py +0 -0
  144. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/weather/gribstream/gribstream_weather_model.py +0 -0
  145. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/weather/multi_weather_model.py +0 -0
  146. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/weather/openmeteo/__init__.py +0 -0
  147. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/weather/openmeteo/openmeteo_weather_model.py +0 -0
  148. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/weather_model.py +0 -0
  149. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/wikipedia/__init__.py +0 -0
  150. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/wikipedia/wikipedia_venue_model.py +0 -0
  151. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/x/__init__.py +0 -0
  152. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/data/x/x_social_model.py +0 -0
  153. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/logger.py +0 -0
  154. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/loglevel.py +0 -0
  155. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/playwright.py +0 -0
  156. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/proxy_session.py +0 -0
  157. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/session.py +0 -0
  158. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/sportsball.py +0 -0
  159. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/vendor/__init__.py +0 -0
  160. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball/vendor/pygooglenews/__init__.py +0 -0
  161. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball.egg-info/SOURCES.txt +0 -0
  162. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball.egg-info/dependency_links.txt +0 -0
  163. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball.egg-info/entry_points.txt +0 -0
  164. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball.egg-info/not-zip-safe +0 -0
  165. {sportsball-0.3.54 → sportsball-0.3.56}/sportsball.egg-info/top_level.txt +0 -0
  166. {sportsball-0.3.54 → sportsball-0.3.56}/tests/__init__.py +0 -0
  167. {sportsball-0.3.54 → sportsball-0.3.56}/tests/data/__init__.py +0 -0
  168. {sportsball-0.3.54 → sportsball-0.3.56}/tests/data/afl/__init__.py +0 -0
  169. {sportsball-0.3.54 → sportsball-0.3.56}/tests/data/afl/afltables/__init__.py +0 -0
  170. {sportsball-0.3.54 → sportsball-0.3.56}/tests/data/afl/afltables/afl_afltables_game_model_test.py +0 -0
  171. {sportsball-0.3.54 → sportsball-0.3.56}/tests/data/afl/afltables/afl_afltables_league_model_test.py +0 -0
  172. {sportsball-0.3.54 → sportsball-0.3.56}/tests/data/aussportsbetting/__init__.py +0 -0
  173. {sportsball-0.3.54 → sportsball-0.3.56}/tests/data/aussportsbetting/aussportsbetting_game_model_test.py +0 -0
  174. {sportsball-0.3.54 → sportsball-0.3.56}/tests/data/combined/__init__.py +0 -0
  175. {sportsball-0.3.54 → sportsball-0.3.56}/tests/data/combined/combined_game_model_test.py +0 -0
  176. {sportsball-0.3.54 → sportsball-0.3.56}/tests/data/espn/__init__.py +0 -0
  177. {sportsball-0.3.54 → sportsball-0.3.56}/tests/data/espn/espn_game_model_test.py +0 -0
  178. {sportsball-0.3.54 → sportsball-0.3.56}/tests/data/espn/espn_player_model_test.py +0 -0
  179. {sportsball-0.3.54 → sportsball-0.3.56}/tests/data/game_model_test.py +0 -0
  180. {sportsball-0.3.54 → sportsball-0.3.56}/tests/data/google/__init__.py +0 -0
  181. {sportsball-0.3.54 → sportsball-0.3.56}/tests/data/google/google_address_model_test.py +0 -0
  182. {sportsball-0.3.54 → sportsball-0.3.56}/tests/data/google/google_news_model_test.py +0 -0
  183. {sportsball-0.3.54 → sportsball-0.3.56}/tests/data/nba/__init__.py +0 -0
  184. {sportsball-0.3.54 → sportsball-0.3.56}/tests/data/nba/nba/__init__.py +0 -0
  185. {sportsball-0.3.54 → sportsball-0.3.56}/tests/data/nba/nba/nba_nba_game_model_test.py +0 -0
  186. {sportsball-0.3.54 → sportsball-0.3.56}/tests/data/nba/nba/nba_nba_league_model_test.py +0 -0
  187. {sportsball-0.3.54 → sportsball-0.3.56}/tests/data/nba/nba/nba_nba_team_model_test.py +0 -0
  188. {sportsball-0.3.54 → sportsball-0.3.56}/tests/data/nba/sportsdb/__init__.py +0 -0
  189. {sportsball-0.3.54 → sportsball-0.3.56}/tests/data/nba/sportsdb/nba_sportsdb_league_model_test.py +0 -0
  190. {sportsball-0.3.54 → sportsball-0.3.56}/tests/data/nba/sportsreference/__init__.py +0 -0
  191. {sportsball-0.3.54 → sportsball-0.3.56}/tests/data/nba/sportsreference/nba_sportsreference_league_model_test.py +0 -0
  192. {sportsball-0.3.54 → sportsball-0.3.56}/tests/data/ncaab/__init__.py +0 -0
  193. {sportsball-0.3.54 → sportsball-0.3.56}/tests/data/ncaab/sportsreference/__init__.py +0 -0
  194. {sportsball-0.3.54 → sportsball-0.3.56}/tests/data/ncaab/sportsreference/ncaab_sportsreference_league_model_test.py +0 -0
  195. {sportsball-0.3.54 → sportsball-0.3.56}/tests/data/nfl/__init__.py +0 -0
  196. {sportsball-0.3.54 → sportsball-0.3.56}/tests/data/nfl/sportsdb/__init__.py +0 -0
  197. {sportsball-0.3.54 → sportsball-0.3.56}/tests/data/nfl/sportsdb/nfl_sportsdb_league_model_test.py +0 -0
  198. {sportsball-0.3.54 → sportsball-0.3.56}/tests/data/oddsportal/__init__.py +0 -0
  199. {sportsball-0.3.54 → sportsball-0.3.56}/tests/data/oddsportal/decrypt_test.py +0 -0
  200. {sportsball-0.3.54 → sportsball-0.3.56}/tests/data/oddsportal/oddsportal_game_model_test.py +0 -0
  201. {sportsball-0.3.54 → sportsball-0.3.56}/tests/data/oddsportal/oddsportal_league_model_test.py +0 -0
  202. {sportsball-0.3.54 → sportsball-0.3.56}/tests/data/social_model_test.py +0 -0
  203. {sportsball-0.3.54 → sportsball-0.3.56}/tests/data/sportsdb/__init__.py +0 -0
  204. {sportsball-0.3.54 → sportsball-0.3.56}/tests/data/sportsdb/sportsdb_game_model_test.py +0 -0
  205. {sportsball-0.3.54 → sportsball-0.3.56}/tests/data/sportsdb/sportsdb_league_model_test.py +0 -0
  206. {sportsball-0.3.54 → sportsball-0.3.56}/tests/data/sportsdb/sportsdb_team_model_test.py +0 -0
  207. {sportsball-0.3.54 → sportsball-0.3.56}/tests/data/sportsdb/sportsdb_venue_model_test.py +0 -0
  208. {sportsball-0.3.54 → sportsball-0.3.56}/tests/data/sportsreference/__init__.py +0 -0
  209. {sportsball-0.3.54 → sportsball-0.3.56}/tests/data/sportsreference/sportsreference_league_model_test.py +0 -0
  210. {sportsball-0.3.54 → sportsball-0.3.56}/tests/data/sportsreference/sportsreference_player_model_test.py +0 -0
  211. {sportsball-0.3.54 → sportsball-0.3.56}/tests/data/sportsreference/sportsreference_venue_model_test.py +0 -0
  212. {sportsball-0.3.54 → sportsball-0.3.56}/tests/data/team_model_test.py +0 -0
  213. {sportsball-0.3.54 → sportsball-0.3.56}/tests/data/x/__init__.py +0 -0
  214. {sportsball-0.3.54 → sportsball-0.3.56}/tests/data/x/x_social_model_test.py +0 -0
  215. {sportsball-0.3.54 → sportsball-0.3.56}/tests/proxy_session_test.py +0 -0
  216. {sportsball-0.3.54 → sportsball-0.3.56}/tests/sportsball_test.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: sportsball
3
- Version: 0.3.54
3
+ Version: 0.3.56
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
@@ -16,7 +16,7 @@ Requires-Dist: requests>=2.31.0
16
16
  Requires-Dist: requests-cache>=1.2.0
17
17
  Requires-Dist: python-dateutil>=1.16.0
18
18
  Requires-Dist: tqdm>=4.66.2
19
- Requires-Dist: beautifulsoup4>=4.12.3
19
+ Requires-Dist: beautifulsoup4>=4.13.3
20
20
  Requires-Dist: openpyxl>=3.1.5
21
21
  Requires-Dist: joblib>=1.4.2
22
22
  Requires-Dist: pyarrow>=18.0.0
@@ -3,7 +3,7 @@ requests>=2.31.0
3
3
  requests-cache>=1.2.0
4
4
  python-dateutil>=1.16.0
5
5
  tqdm>=4.66.2
6
- beautifulsoup4>=4.12.3
6
+ beautifulsoup4>=4.13.3
7
7
  openpyxl>=3.1.5
8
8
  joblib>=1.4.2
9
9
  pyarrow>=18.0.0
@@ -26,7 +26,7 @@ def install_requires() -> typing.List[str]:
26
26
 
27
27
  setup(
28
28
  name='sportsball',
29
- version='0.3.54',
29
+ version='0.3.56',
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.54"
3
+ __VERSION__ = "0.3.56"
@@ -21,4 +21,5 @@ def create_afl_afl_player_model(
21
21
  assists=None,
22
22
  turnovers=None,
23
23
  name=name,
24
+ marks=None,
24
25
  )
@@ -1,6 +1,6 @@
1
1
  """AFL AFLTables game model."""
2
2
 
3
- # pylint: disable=too-many-arguments
3
+ # pylint: disable=too-many-arguments,too-many-branches
4
4
  import datetime
5
5
  import urllib.parse
6
6
  from urllib.parse import urlparse
@@ -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, str]], int]]:
155
+ ) -> list[tuple[str, list[tuple[str, str, int | None, str, int | None]], 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,10 @@ 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, str]]:
164
- players: list[tuple[str, str, int | None, str]] = []
163
+ def _find_players(
164
+ table: Tag,
165
+ ) -> list[tuple[str, str, int | None, str, int | None]]:
166
+ players: list[tuple[str, str, int | None, str, int | None]] = []
165
167
  for tr in table.find_all("tr"):
166
168
  player_row = False
167
169
  player_url = None
@@ -174,6 +176,7 @@ def _create_afl_afltables_game_model(
174
176
  jersey = None
175
177
  name = None
176
178
  kicks = None
179
+ marks = None
177
180
  for count, td in enumerate(tr.find_all("td")):
178
181
  if count == 0:
179
182
  jersey = td.get_text().strip()
@@ -188,13 +191,17 @@ def _create_afl_afltables_game_model(
188
191
  kicks_text = td.get_text().strip()
189
192
  if kicks_text:
190
193
  kicks = int(kicks_text)
194
+ elif count == 3:
195
+ marks_text = td.get_text().strip()
196
+ if marks_text:
197
+ marks = int(marks_text)
191
198
 
192
199
  if jersey is None:
193
200
  raise ValueError("jersey is null.")
194
201
  if name is None:
195
202
  raise ValueError("name is null")
196
203
 
197
- players.append((player_url, jersey, kicks, name))
204
+ players.append((player_url, jersey, kicks, name, marks))
198
205
  return players
199
206
 
200
207
  team_metadata = []
@@ -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, name: str
16
+ player_url: str, jersey: str, kicks: int | None, name: str, marks: int | None
17
17
  ) -> PlayerModel:
18
18
  o = urlparse(player_url)
19
19
  last_component = o.path.split("/")[-1]
@@ -31,14 +31,15 @@ def _create_afl_afltables_player_model(
31
31
  assists=None,
32
32
  turnovers=None,
33
33
  name=name,
34
+ marks=marks,
34
35
  )
35
36
 
36
37
 
37
38
  @MEMORY.cache
38
39
  def _cached_create_afl_afltables_player_model(
39
- player_url: str, jersey: str, kicks: int | None, name: str
40
+ player_url: str, jersey: str, kicks: int | None, name: str, marks: int | None
40
41
  ) -> PlayerModel:
41
- return _create_afl_afltables_player_model(player_url, jersey, kicks, name)
42
+ return _create_afl_afltables_player_model(player_url, jersey, kicks, name, marks)
42
43
 
43
44
 
44
45
  def create_afl_afltables_player_model(
@@ -48,6 +49,7 @@ def create_afl_afltables_player_model(
48
49
  dt: datetime.datetime,
49
50
  session: requests_cache.CachedSession,
50
51
  name: str,
52
+ marks: int | None,
51
53
  ) -> PlayerModel:
52
54
  """Create a player model from AFL Tables."""
53
55
  if (
@@ -59,6 +61,9 @@ def create_afl_afltables_player_model(
59
61
  jersey,
60
62
  kicks,
61
63
  name, # pyright: ignore
64
+ marks,
62
65
  )
63
66
  with session.cache_disabled():
64
- return _create_afl_afltables_player_model(player_url, jersey, kicks, name)
67
+ return _create_afl_afltables_player_model(
68
+ player_url, jersey, kicks, name, marks
69
+ )
@@ -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, str]],
47
+ players: list[tuple[str, str, int | None, str, int | None]],
48
48
  points: float,
49
49
  session: requests_cache.CachedSession,
50
50
  last_ladder_ranks: dict[str, int] | None,
@@ -72,9 +72,9 @@ def _create_afl_afltables_team_model(
72
72
  name=name,
73
73
  players=[ # pyright: ignore
74
74
  create_afl_afltables_player_model(
75
- player_url, jersey, kicks, dt, session, name
75
+ player_url, jersey, kicks, dt, session, name, marks
76
76
  )
77
- for player_url, jersey, kicks, name in players
77
+ for player_url, jersey, kicks, name, marks in players
78
78
  ],
79
79
  odds=[],
80
80
  points=points,
@@ -89,7 +89,7 @@ def _create_afl_afltables_team_model(
89
89
  @MEMORY.cache(ignore=["session"])
90
90
  def _cached_create_afl_afltables_team_model(
91
91
  team_url: str,
92
- players: list[tuple[str, str, int | None, str]],
92
+ players: list[tuple[str, str, int | None, str, int | None]],
93
93
  points: float,
94
94
  session: requests_cache.CachedSession,
95
95
  last_ladder_ranks: dict[str, int] | None,
@@ -97,13 +97,19 @@ def _cached_create_afl_afltables_team_model(
97
97
  league: League,
98
98
  ) -> TeamModel:
99
99
  return _create_afl_afltables_team_model(
100
- team_url, players, points, session, last_ladder_ranks, dt, league
100
+ team_url,
101
+ players,
102
+ points,
103
+ session,
104
+ last_ladder_ranks,
105
+ dt,
106
+ league,
101
107
  )
102
108
 
103
109
 
104
110
  def create_afl_afltables_team_model(
105
111
  team_url: str,
106
- players: list[tuple[str, str, int | None, str]],
112
+ players: list[tuple[str, str, int | None, str, int | None]],
107
113
  points: float,
108
114
  session: requests_cache.CachedSession,
109
115
  last_ladder_ranks: dict[str, int] | None,
@@ -1,6 +1,6 @@
1
1
  """Combined player model."""
2
2
 
3
- # pylint: disable=too-many-locals
3
+ # pylint: disable=too-many-locals,too-many-branches
4
4
  from ..player_model import PlayerModel
5
5
 
6
6
 
@@ -18,6 +18,7 @@ def create_combined_player_model(
18
18
  assists = None
19
19
  turnovers = None
20
20
  name = None
21
+ marks = None
21
22
  for player_model in player_models:
22
23
  player_model_jersey = player_model.jersey
23
24
  if player_model_jersey is not None:
@@ -49,6 +50,9 @@ def create_combined_player_model(
49
50
  player_model_name = player_model.name
50
51
  if player_model_name is not None:
51
52
  name = player_model_name
53
+ player_model_marks = player_model.marks
54
+ if player_model_marks is not None:
55
+ marks = player_model_marks
52
56
  if name is None:
53
57
  raise ValueError("name is null.")
54
58
  return PlayerModel(
@@ -63,4 +67,5 @@ def create_combined_player_model(
63
67
  assists=assists,
64
68
  turnovers=turnovers,
65
69
  name=name,
70
+ marks=marks,
66
71
  )
@@ -45,6 +45,7 @@ def _create_espn_player_model(
45
45
  assists=None,
46
46
  turnovers=None,
47
47
  name=name,
48
+ marks=None,
48
49
  )
49
50
 
50
51
 
@@ -12652,6 +12652,25 @@ _CACHED_GEOCODES: dict[str, Any] = {
12652
12652
  housenumber="563",
12653
12653
  country="USA",
12654
12654
  ),
12655
+ "Mercyhurst Athletic Center, Erie, Pennsylvania": SportsballGeocodeTuple(
12656
+ city="Erie",
12657
+ state="PA",
12658
+ postal="",
12659
+ lat=42.1046,
12660
+ lng=-80.0556,
12661
+ housenumber="",
12662
+ country="USA",
12663
+ ),
12664
+ "Monroe, Louisiana": SportsballGeocodeTuple(
12665
+ city="Monroe",
12666
+ state="LA",
12667
+ postal="",
12668
+ lat=32.509444,
12669
+ lng=-92.118333,
12670
+ housenumber="",
12671
+ country="USA",
12672
+ ),
12673
+ "Bison Sports Arena, Fargo, North Dakota": SCHEELS_ARENA,
12655
12674
  }
12656
12675
 
12657
12676
 
@@ -15,6 +15,7 @@ FIELD_GOALS_ATTEMPTED_COLUMN: Literal["field_goals_attempted"] = "field_goals_at
15
15
  OFFENSIVE_REBOUNDS_COLUMN: Literal["offensive_rebounds"] = "offensive_rebounds"
16
16
  ASSISTS_COLUMN: Literal["assists"] = "assists"
17
17
  TURNOVERS_COLUMN: Literal["turnovers"] = "turnovers"
18
+ PLAYER_MARKS_COLUMN: Literal["marks"] = "marks"
18
19
 
19
20
 
20
21
  class PlayerModel(BaseModel):
@@ -67,3 +68,8 @@ class PlayerModel(BaseModel):
67
68
  alias=TURNOVERS_COLUMN,
68
69
  )
69
70
  name: str
71
+ marks: int | None = Field(
72
+ ...,
73
+ json_schema_extra={TYPE_KEY: FieldType.LOOKAHEAD},
74
+ alias=PLAYER_MARKS_COLUMN,
75
+ )
@@ -4,6 +4,7 @@
4
4
  import datetime
5
5
  import io
6
6
  import logging
7
+ import re
7
8
  import urllib.parse
8
9
 
9
10
  import dateutil
@@ -41,6 +42,7 @@ _MONTHS = [
41
42
  "November",
42
43
  "December",
43
44
  ]
45
+ _NUMBER_PARENTHESIS_PATTERN = r"\(\d+\)"
44
46
 
45
47
 
46
48
  def _find_old_dt(
@@ -142,7 +144,9 @@ def _find_old_dt(
142
144
  points = int(team_name.split()[-1].strip())
143
145
  team_name = " ".join(team_name.split()[:-1]).strip()
144
146
  break
145
- team_name = team_name.split("(")[0].strip()
147
+ team_name = " ".join(
148
+ re.sub(_NUMBER_PARENTHESIS_PATTERN, "", team_name).split()
149
+ ).strip()
146
150
  team_a = soup.find("a", text=team_name, href=True)
147
151
  if not isinstance(team_a, Tag):
148
152
  logging.error(team_name)
@@ -206,9 +210,17 @@ def _find_old_dt(
206
210
  dt = parse(date)
207
211
  for df in dfs:
208
212
  test_row = df.iat[0, 0]
209
- if "Prev Game" in test_row:
210
- _process_team_row(df)
211
- break
213
+ if isinstance(test_row, float):
214
+ continue
215
+ try:
216
+ if "Prev Game" in test_row:
217
+ _process_team_row(df)
218
+ break
219
+ except TypeError as exc:
220
+ logging.error(test_row)
221
+ logging.error(response.url)
222
+ logging.error(response.text)
223
+ raise exc
212
224
 
213
225
  if venue_name is not None and not venue_name.replace(",", "").strip():
214
226
  venue_name = None
@@ -78,6 +78,7 @@ def _create_sportsreference_player_model(
78
78
  assists=assists.get(name),
79
79
  turnovers=turnovers.get(name),
80
80
  name=name,
81
+ marks=None,
81
82
  )
82
83
 
83
84
 
@@ -68,6 +68,7 @@ def _find_name(response: requests.Response, soup: BeautifulSoup, url: str) -> st
68
68
  if not isinstance(name_tag, Tag):
69
69
  name_tag = soup.find("meta", itemprop="og:title")
70
70
  if not isinstance(name_tag, Tag):
71
+ logging.error(type(name_tag))
71
72
  logging.error(response.text)
72
73
  raise ValueError("name_tag not a tag.") from exc
73
74
  content = name_tag.get("content")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: sportsball
3
- Version: 0.3.54
3
+ Version: 0.3.56
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
@@ -16,7 +16,7 @@ Requires-Dist: requests>=2.31.0
16
16
  Requires-Dist: requests-cache>=1.2.0
17
17
  Requires-Dist: python-dateutil>=1.16.0
18
18
  Requires-Dist: tqdm>=4.66.2
19
- Requires-Dist: beautifulsoup4>=4.12.3
19
+ Requires-Dist: beautifulsoup4>=4.13.3
20
20
  Requires-Dist: openpyxl>=3.1.5
21
21
  Requires-Dist: joblib>=1.4.2
22
22
  Requires-Dist: pyarrow>=18.0.0
@@ -3,7 +3,7 @@ requests>=2.31.0
3
3
  requests-cache>=1.2.0
4
4
  python-dateutil>=1.16.0
5
5
  tqdm>=4.66.2
6
- beautifulsoup4>=4.12.3
6
+ beautifulsoup4>=4.13.3
7
7
  openpyxl>=3.1.5
8
8
  joblib>=1.4.2
9
9
  pyarrow>=18.0.0
@@ -24,5 +24,6 @@ class TestAFLTablesPlayerModel(unittest.TestCase):
24
24
  dt,
25
25
  self._session,
26
26
  "Dennis Armfield",
27
+ 0,
27
28
  )
28
29
  self.assertEqual(player_model.identifier, "Dennis_Armfield")
@@ -30,6 +30,7 @@ class TestCombinedPlayerModel(unittest.TestCase):
30
30
  assists=None,
31
31
  turnovers=None,
32
32
  name="James Jones",
33
+ marks=None,
33
34
  )
34
35
  combined_player_model = create_combined_player_model(
35
36
  [player_model],
@@ -19,6 +19,7 @@ class TestPlayerModel(unittest.TestCase):
19
19
  assists=None,
20
20
  turnovers=None,
21
21
  name="James Jones",
22
+ marks=None,
22
23
  )
23
24
 
24
25
  def test_field_goals_attempted(self):
@@ -945,3 +945,77 @@ class TestSportsReferenceGameModel(unittest.TestCase):
945
945
  datetime.datetime(2010, 10, 10, 10, 10, 0),
946
946
  )
947
947
  self.assertEqual(game_model.dt, datetime.datetime(2016, 4, 2, 0, 0))
948
+
949
+ def test_dt_old_style_19(self):
950
+ url = "https://www.sports-reference.com/cbb/boxscores/2016-03-24-villanova.html"
951
+ with requests_mock.Mocker() as m:
952
+ with open(os.path.join(self.dir, "2016-03-24-villanova.html"), "rb") as f:
953
+ m.get(url, content=f.read())
954
+ with open(os.path.join(self.dir, "miami-fl_2016.html"), "rb") as f:
955
+ m.get("https://www.sports-reference.com/cbb/schools/miami-fl/2016.html", content=f.read())
956
+ with open(os.path.join(self.dir, "sheldon-mcclellan-1.html"), "rb") as f:
957
+ m.get("https://www.sports-reference.com/cbb/players/sheldon-mcclellan-1.html", content=f.read())
958
+ with open(os.path.join(self.dir, "anthony-lawrencejr-1.html"), "rb") as f:
959
+ m.get("https://www.sports-reference.com/cbb/players/anthony-lawrencejr-1.html", content=f.read())
960
+ with open(os.path.join(self.dir, "davon-reed-1.html"), "rb") as f:
961
+ m.get("https://www.sports-reference.com/cbb/players/davon-reed-1.html", content=f.read())
962
+ with open(os.path.join(self.dir, "kamari-murphy-1.html"), "rb") as f:
963
+ m.get("https://www.sports-reference.com/cbb/players/kamari-murphy-1.html", content=f.read())
964
+ with open(os.path.join(self.dir, "angel-rodriguez-1.html"), "rb") as f:
965
+ m.get("https://www.sports-reference.com/cbb/players/angel-rodriguez-1.html", content=f.read())
966
+ with open(os.path.join(self.dir, "mike-robinson-4.html"), "rb") as f:
967
+ m.get("https://www.sports-reference.com/cbb/players/mike-robinson-4.html", content=f.read())
968
+ with open(os.path.join(self.dir, "ebuka-izundu-1.html"), "rb") as f:
969
+ m.get("https://www.sports-reference.com/cbb/players/ebuka-izundu-1.html", content=f.read())
970
+ with open(os.path.join(self.dir, "jaquan-newton-1.html"), "rb") as f:
971
+ m.get("https://www.sports-reference.com/cbb/players/jaquan-newton-1.html", content=f.read())
972
+ with open(os.path.join(self.dir, "james-palmer-1.html"), "rb") as f:
973
+ m.get("https://www.sports-reference.com/cbb/players/james-palmer-1.html", content=f.read())
974
+ with open(os.path.join(self.dir, "tonye-jekiri-1.html"), "rb") as f:
975
+ m.get("https://www.sports-reference.com/cbb/players/tonye-jekiri-1.html", content=f.read())
976
+ with open(os.path.join(self.dir, "villanova_2016.html"), "rb") as f:
977
+ m.get("https://www.sports-reference.com/cbb/schools/villanova/2016.html", content=f.read())
978
+ with open(os.path.join(self.dir, "jalen-brunson-1.html"), "rb") as f:
979
+ m.get("https://www.sports-reference.com/cbb/players/jalen-brunson-1.html", content=f.read())
980
+ with open(os.path.join(self.dir, "ryan-arcidiacono-1.html"), "rb") as f:
981
+ m.get("https://www.sports-reference.com/cbb/players/ryan-arcidiacono-1.html", content=f.read())
982
+ with open(os.path.join(self.dir, "kevin-rafferty-1.html"), "rb") as f:
983
+ m.get("https://www.sports-reference.com/cbb/players/kevin-rafferty-1.html", content=f.read())
984
+ with open(os.path.join(self.dir, "mikal-bridges-1.html"), "rb") as f:
985
+ m.get("https://www.sports-reference.com/cbb/players/mikal-bridges-1.html", content=f.read())
986
+ with open(os.path.join(self.dir, "daniel-ochefu-1.html"), "rb") as f:
987
+ m.get("https://www.sports-reference.com/cbb/players/daniel-ochefu-1.html", content=f.read())
988
+ with open(os.path.join(self.dir, "phil-booth-1.html"), "rb") as f:
989
+ m.get("https://www.sports-reference.com/cbb/players/phil-booth-1.html", content=f.read())
990
+ with open(os.path.join(self.dir, "darryl-reynolds-1.html"), "rb") as f:
991
+ m.get("https://www.sports-reference.com/cbb/players/darryl-reynolds-1.html", content=f.read())
992
+ with open(os.path.join(self.dir, "kris-jenkins-1.html"), "rb") as f:
993
+ m.get("https://www.sports-reference.com/cbb/players/kris-jenkins-1.html", content=f.read())
994
+ with open(os.path.join(self.dir, "patrick-farrell-1.html"), "rb") as f:
995
+ m.get("https://www.sports-reference.com/cbb/players/patrick-farrell-1.html", content=f.read())
996
+ with open(os.path.join(self.dir, "josh-hart-1.html"), "rb") as f:
997
+ m.get("https://www.sports-reference.com/cbb/players/josh-hart-1.html", content=f.read())
998
+ with open(os.path.join(self.dir, "henry-lowe-1.html"), "rb") as f:
999
+ m.get("https://www.sports-reference.com/cbb/players/henry-lowe-1.html", content=f.read())
1000
+
1001
+ game_model = create_sportsreference_game_model(
1002
+ self.session,
1003
+ url,
1004
+ League.NBA,
1005
+ datetime.datetime(2010, 10, 10, 10, 10, 0),
1006
+ )
1007
+ self.assertEqual(game_model.dt, datetime.datetime(2016, 3, 24, 0, 0))
1008
+
1009
+ def test_dt_old_style_20(self):
1010
+ url = "https://www.sports-reference.com/cbb/boxscores/2016-02-23-savannah-state.html"
1011
+ with requests_mock.Mocker() as m:
1012
+ with open(os.path.join(self.dir, "2016-02-23-savannah-state.html"), "rb") as f:
1013
+ m.get(url, content=f.read())
1014
+
1015
+ game_model = create_sportsreference_game_model(
1016
+ self.session,
1017
+ url,
1018
+ League.NBA,
1019
+ datetime.datetime(2010, 10, 10, 10, 10, 0),
1020
+ )
1021
+ self.assertEqual(game_model.dt, datetime.datetime(2016, 2, 23, 0, 0))
@@ -166,3 +166,23 @@ class TestSportsReferenceTeamModel(unittest.TestCase):
166
166
  {},
167
167
  )
168
168
  self.assertEqual(team_model.name, "Los Angeles Lakers")
169
+
170
+ def test_name_3(self):
171
+ url = "https://www.basketball-reference.com/teams/BOS/2015.html"
172
+ with requests_mock.Mocker() as m:
173
+ with open(os.path.join(self.dir, "BOS_2015.html"), "rb") as f:
174
+ m.get(url, content=f.read())
175
+ team_model = create_sportsreference_team_model(
176
+ self.session,
177
+ url,
178
+ datetime.datetime(2010, 10, 10, 10, 10, 00),
179
+ League.NBA,
180
+ set(),
181
+ 10.0,
182
+ {},
183
+ {},
184
+ {},
185
+ {},
186
+ {},
187
+ )
188
+ self.assertEqual(team_model.name, "Boston Celtics")
File without changes
File without changes
File without changes
File without changes