sportsball 0.3.84__tar.gz → 0.3.86__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.84/sportsball.egg-info → sportsball-0.3.86}/PKG-INFO +24 -1
  2. {sportsball-0.3.84 → sportsball-0.3.86}/README.md +23 -0
  3. {sportsball-0.3.84 → sportsball-0.3.86}/setup.py +1 -1
  4. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/__init__.py +1 -1
  5. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/afl/afl/afl_afl_league_model.py +13 -15
  6. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/afl/combined/afl_combined_league_model.py +0 -16
  7. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/combined/combined_league_model.py +1 -3
  8. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/combined/combined_team_model.py +10 -4
  9. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/game_model.py +5 -1
  10. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/google/google_address_model.py +73 -9
  11. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/nba/combined/nba_combined_league_model.py +1 -0
  12. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/player_model.py +2 -1
  13. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/sportsreference/sportsreference_game_model.py +3 -0
  14. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/sportsreference/sportsreference_team_model.py +1 -0
  15. {sportsball-0.3.84 → sportsball-0.3.86/sportsball.egg-info}/PKG-INFO +24 -1
  16. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball.egg-info/SOURCES.txt +1 -0
  17. {sportsball-0.3.84 → sportsball-0.3.86}/tests/data/afl/afl/afl_afl_league_model_test.py +5 -1
  18. sportsball-0.3.86/tests/data/combined/combined_team_model_test.py +215 -0
  19. {sportsball-0.3.84 → sportsball-0.3.86}/LICENSE +0 -0
  20. {sportsball-0.3.84 → sportsball-0.3.86}/MANIFEST.in +0 -0
  21. {sportsball-0.3.84 → sportsball-0.3.86}/requirements.txt +0 -0
  22. {sportsball-0.3.84 → sportsball-0.3.86}/setup.cfg +0 -0
  23. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/__main__.py +0 -0
  24. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/args.py +0 -0
  25. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/cache.py +0 -0
  26. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/__init__.py +0 -0
  27. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/address_model.py +0 -0
  28. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/afl/__init__.py +0 -0
  29. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/afl/afl/__init__.py +0 -0
  30. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/afl/afl/afl_afl_game_model.py +0 -0
  31. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/afl/afl/afl_afl_player_model.py +0 -0
  32. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/afl/afl/afl_afl_team_model.py +0 -0
  33. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/afl/afl/afl_afl_venue_model.py +0 -0
  34. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/afl/afltables/__init__.py +0 -0
  35. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/afl/afltables/afl_afltables_game_model.py +0 -0
  36. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/afl/afltables/afl_afltables_league_model.py +0 -0
  37. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/afl/afltables/afl_afltables_player_model.py +0 -0
  38. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/afl/afltables/afl_afltables_team_model.py +0 -0
  39. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/afl/afltables/afl_afltables_venue_model.py +0 -0
  40. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/afl/aussportsbetting/__init__.py +0 -0
  41. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/afl/aussportsbetting/afl_aussportsbetting_league_model.py +0 -0
  42. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/afl/combined/__init__.py +0 -0
  43. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/afl/espn/__init__.py +0 -0
  44. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/afl/espn/afl_espn_league_model.py +0 -0
  45. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/afl/oddsportal/__init__.py +0 -0
  46. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/afl/oddsportal/afl_oddsportal_league_model.py +0 -0
  47. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/aussportsbetting/__init__.py +0 -0
  48. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/aussportsbetting/aussportsbetting_bookie_model.py +0 -0
  49. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/aussportsbetting/aussportsbetting_game_model.py +0 -0
  50. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/aussportsbetting/aussportsbetting_league_model.py +0 -0
  51. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/aussportsbetting/aussportsbetting_odds_model.py +0 -0
  52. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/aussportsbetting/aussportsbetting_team_model.py +0 -0
  53. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/aussportsbetting/aussportsbetting_venue_model.py +0 -0
  54. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/bookie_model.py +0 -0
  55. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/combined/__init__.py +0 -0
  56. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/combined/combined_address_model.py +0 -0
  57. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/combined/combined_game_model.py +0 -0
  58. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/combined/combined_player_model.py +0 -0
  59. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/combined/combined_venue_model.py +0 -0
  60. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/combined/combined_weather_model.py +0 -0
  61. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/espn/__init__.py +0 -0
  62. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/espn/espn_bookie_model.py +0 -0
  63. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/espn/espn_game_model.py +0 -0
  64. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/espn/espn_league_model.py +0 -0
  65. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/espn/espn_odds_model.py +0 -0
  66. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/espn/espn_player_model.py +0 -0
  67. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/espn/espn_team_model.py +0 -0
  68. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/espn/espn_venue_model.py +0 -0
  69. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/field_type.py +0 -0
  70. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/google/__init__.py +0 -0
  71. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/google/google_news_model.py +0 -0
  72. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/league.py +0 -0
  73. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/league_model.py +0 -0
  74. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/model.py +0 -0
  75. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/nba/__init__.py +0 -0
  76. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/nba/combined/__init__.py +0 -0
  77. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/nba/espn/__init__.py +0 -0
  78. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/nba/espn/nba_espn_league_model.py +0 -0
  79. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/nba/nba/__init__.py +0 -0
  80. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/nba/nba/nba_nba_game_model.py +0 -0
  81. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/nba/nba/nba_nba_league_model.py +0 -0
  82. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/nba/nba/nba_nba_team_model.py +0 -0
  83. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/nba/oddsportal/__init__.py +0 -0
  84. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/nba/oddsportal/nba_oddsportal_league_model.py +0 -0
  85. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/nba/sportsdb/__init__.py +0 -0
  86. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/nba/sportsdb/nba_sportsdb_league_model.py +0 -0
  87. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/nba/sportsreference/__init__.py +0 -0
  88. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/nba/sportsreference/nba_sportsreference_league_model.py +0 -0
  89. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/ncaab/__init__.py +0 -0
  90. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/ncaab/combined/__init__.py +0 -0
  91. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/ncaab/combined/ncaab_combined_league_model.py +0 -0
  92. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/ncaab/espn/__init__.py +0 -0
  93. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/ncaab/espn/ncaab_espn_league_model.py +0 -0
  94. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/ncaab/oddsportal/__init__.py +0 -0
  95. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/ncaab/oddsportal/ncaab_oddsportal_league_model.py +0 -0
  96. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/ncaab/sportsreference/__init__.py +0 -0
  97. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/ncaab/sportsreference/ncaab_sportsreference_league_model.py +0 -0
  98. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/ncaaf/__init__.py +0 -0
  99. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/ncaaf/combined/__init__.py +0 -0
  100. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/ncaaf/combined/ncaaf_combined_league_model.py +0 -0
  101. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/ncaaf/espn/__init__.py +0 -0
  102. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/ncaaf/espn/ncaaf_espn_league_model.py +0 -0
  103. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/ncaaf/oddsportal/__init__.py +0 -0
  104. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/ncaaf/oddsportal/ncaaf_oddsportal_league_model.py +0 -0
  105. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/news_model.py +0 -0
  106. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/nfl/__init__.py +0 -0
  107. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/nfl/aussportsbetting/__init__.py +0 -0
  108. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/nfl/aussportsbetting/nfl_aussportsbetting_league_model.py +0 -0
  109. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/nfl/combined/__init__.py +0 -0
  110. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/nfl/combined/nfl_combined_league_model.py +0 -0
  111. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/nfl/espn/__init__.py +0 -0
  112. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/nfl/espn/nfl_espn_league_model.py +0 -0
  113. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/nfl/oddsportal/__init__.py +0 -0
  114. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/nfl/oddsportal/nfl_oddsportal_league_model.py +0 -0
  115. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/nfl/sportsdb/__init__.py +0 -0
  116. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/nfl/sportsdb/nfl_sportsdb_league_model.py +0 -0
  117. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/odds_model.py +0 -0
  118. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/oddsportal/__init__.py +0 -0
  119. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/oddsportal/decrypt.py +0 -0
  120. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/oddsportal/oddsportal_bookie_model.py +0 -0
  121. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/oddsportal/oddsportal_game_model.py +0 -0
  122. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/oddsportal/oddsportal_league_model.py +0 -0
  123. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/oddsportal/oddsportal_odds_model.py +0 -0
  124. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/oddsportal/oddsportal_team_model.py +0 -0
  125. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/oddsportal/oddsportal_venue_model.py +0 -0
  126. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/season_type.py +0 -0
  127. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/social_model.py +0 -0
  128. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/sportsdb/__init__.py +0 -0
  129. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/sportsdb/sportsdb_game_model.py +0 -0
  130. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/sportsdb/sportsdb_league_model.py +0 -0
  131. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/sportsdb/sportsdb_team_model.py +0 -0
  132. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/sportsdb/sportsdb_venue_model.py +0 -0
  133. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/sportsreference/__init__.py +0 -0
  134. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/sportsreference/sportsreference_league_model.py +0 -0
  135. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/sportsreference/sportsreference_player_model.py +0 -0
  136. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/sportsreference/sportsreference_venue_model.py +0 -0
  137. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/team_model.py +0 -0
  138. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/venue_model.py +0 -0
  139. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/weather/__init__.py +0 -0
  140. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/weather/gribstream/__init__.py +0 -0
  141. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/weather/gribstream/gribstream_weather_model.py +0 -0
  142. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/weather/multi_weather_model.py +0 -0
  143. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/weather/openmeteo/__init__.py +0 -0
  144. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/weather/openmeteo/openmeteo_weather_model.py +0 -0
  145. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/weather_model.py +0 -0
  146. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/wikipedia/__init__.py +0 -0
  147. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/wikipedia/wikipedia_venue_model.py +0 -0
  148. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/x/__init__.py +0 -0
  149. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/data/x/x_social_model.py +0 -0
  150. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/logger.py +0 -0
  151. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/loglevel.py +0 -0
  152. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/playwright.py +0 -0
  153. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/proxy_session.py +0 -0
  154. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/session.py +0 -0
  155. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/sportsball.py +0 -0
  156. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/vendor/__init__.py +0 -0
  157. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball/vendor/pygooglenews/__init__.py +0 -0
  158. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball.egg-info/dependency_links.txt +0 -0
  159. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball.egg-info/entry_points.txt +0 -0
  160. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball.egg-info/not-zip-safe +0 -0
  161. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball.egg-info/requires.txt +0 -0
  162. {sportsball-0.3.84 → sportsball-0.3.86}/sportsball.egg-info/top_level.txt +0 -0
  163. {sportsball-0.3.84 → sportsball-0.3.86}/tests/__init__.py +0 -0
  164. {sportsball-0.3.84 → sportsball-0.3.86}/tests/data/__init__.py +0 -0
  165. {sportsball-0.3.84 → sportsball-0.3.86}/tests/data/afl/__init__.py +0 -0
  166. {sportsball-0.3.84 → sportsball-0.3.86}/tests/data/afl/afl/__init__.py +0 -0
  167. {sportsball-0.3.84 → sportsball-0.3.86}/tests/data/afl/afltables/__init__.py +0 -0
  168. {sportsball-0.3.84 → sportsball-0.3.86}/tests/data/afl/afltables/afl_afltables_game_model_test.py +0 -0
  169. {sportsball-0.3.84 → sportsball-0.3.86}/tests/data/afl/afltables/afl_afltables_league_model_test.py +0 -0
  170. {sportsball-0.3.84 → sportsball-0.3.86}/tests/data/afl/afltables/afl_afltables_player_model_test.py +0 -0
  171. {sportsball-0.3.84 → sportsball-0.3.86}/tests/data/aussportsbetting/__init__.py +0 -0
  172. {sportsball-0.3.84 → sportsball-0.3.86}/tests/data/aussportsbetting/aussportsbetting_game_model_test.py +0 -0
  173. {sportsball-0.3.84 → sportsball-0.3.86}/tests/data/combined/__init__.py +0 -0
  174. {sportsball-0.3.84 → sportsball-0.3.86}/tests/data/combined/combined_game_model_test.py +0 -0
  175. {sportsball-0.3.84 → sportsball-0.3.86}/tests/data/combined/combined_player_model_test.py +0 -0
  176. {sportsball-0.3.84 → sportsball-0.3.86}/tests/data/espn/__init__.py +0 -0
  177. {sportsball-0.3.84 → sportsball-0.3.86}/tests/data/espn/espn_game_model_test.py +0 -0
  178. {sportsball-0.3.84 → sportsball-0.3.86}/tests/data/espn/espn_player_model_test.py +0 -0
  179. {sportsball-0.3.84 → sportsball-0.3.86}/tests/data/game_model_test.py +0 -0
  180. {sportsball-0.3.84 → sportsball-0.3.86}/tests/data/google/__init__.py +0 -0
  181. {sportsball-0.3.84 → sportsball-0.3.86}/tests/data/google/google_address_model_test.py +0 -0
  182. {sportsball-0.3.84 → sportsball-0.3.86}/tests/data/google/google_news_model_test.py +0 -0
  183. {sportsball-0.3.84 → sportsball-0.3.86}/tests/data/nba/__init__.py +0 -0
  184. {sportsball-0.3.84 → sportsball-0.3.86}/tests/data/nba/nba/__init__.py +0 -0
  185. {sportsball-0.3.84 → sportsball-0.3.86}/tests/data/nba/nba/nba_nba_game_model_test.py +0 -0
  186. {sportsball-0.3.84 → sportsball-0.3.86}/tests/data/nba/nba/nba_nba_league_model_test.py +0 -0
  187. {sportsball-0.3.84 → sportsball-0.3.86}/tests/data/nba/nba/nba_nba_team_model_test.py +0 -0
  188. {sportsball-0.3.84 → sportsball-0.3.86}/tests/data/nba/sportsdb/__init__.py +0 -0
  189. {sportsball-0.3.84 → sportsball-0.3.86}/tests/data/nba/sportsdb/nba_sportsdb_league_model_test.py +0 -0
  190. {sportsball-0.3.84 → sportsball-0.3.86}/tests/data/nba/sportsreference/__init__.py +0 -0
  191. {sportsball-0.3.84 → sportsball-0.3.86}/tests/data/nba/sportsreference/nba_sportsreference_league_model_test.py +0 -0
  192. {sportsball-0.3.84 → sportsball-0.3.86}/tests/data/ncaab/__init__.py +0 -0
  193. {sportsball-0.3.84 → sportsball-0.3.86}/tests/data/ncaab/sportsreference/__init__.py +0 -0
  194. {sportsball-0.3.84 → sportsball-0.3.86}/tests/data/ncaab/sportsreference/ncaab_sportsreference_league_model_test.py +0 -0
  195. {sportsball-0.3.84 → sportsball-0.3.86}/tests/data/nfl/__init__.py +0 -0
  196. {sportsball-0.3.84 → sportsball-0.3.86}/tests/data/nfl/sportsdb/__init__.py +0 -0
  197. {sportsball-0.3.84 → sportsball-0.3.86}/tests/data/nfl/sportsdb/nfl_sportsdb_league_model_test.py +0 -0
  198. {sportsball-0.3.84 → sportsball-0.3.86}/tests/data/oddsportal/__init__.py +0 -0
  199. {sportsball-0.3.84 → sportsball-0.3.86}/tests/data/oddsportal/decrypt_test.py +0 -0
  200. {sportsball-0.3.84 → sportsball-0.3.86}/tests/data/oddsportal/oddsportal_game_model_test.py +0 -0
  201. {sportsball-0.3.84 → sportsball-0.3.86}/tests/data/oddsportal/oddsportal_league_model_test.py +0 -0
  202. {sportsball-0.3.84 → sportsball-0.3.86}/tests/data/player_model_test.py +0 -0
  203. {sportsball-0.3.84 → sportsball-0.3.86}/tests/data/social_model_test.py +0 -0
  204. {sportsball-0.3.84 → sportsball-0.3.86}/tests/data/sportsdb/__init__.py +0 -0
  205. {sportsball-0.3.84 → sportsball-0.3.86}/tests/data/sportsdb/sportsdb_game_model_test.py +0 -0
  206. {sportsball-0.3.84 → sportsball-0.3.86}/tests/data/sportsdb/sportsdb_league_model_test.py +0 -0
  207. {sportsball-0.3.84 → sportsball-0.3.86}/tests/data/sportsdb/sportsdb_team_model_test.py +0 -0
  208. {sportsball-0.3.84 → sportsball-0.3.86}/tests/data/sportsdb/sportsdb_venue_model_test.py +0 -0
  209. {sportsball-0.3.84 → sportsball-0.3.86}/tests/data/sportsreference/__init__.py +0 -0
  210. {sportsball-0.3.84 → sportsball-0.3.86}/tests/data/sportsreference/sportsreference_game_model_test.py +0 -0
  211. {sportsball-0.3.84 → sportsball-0.3.86}/tests/data/sportsreference/sportsreference_league_model_test.py +0 -0
  212. {sportsball-0.3.84 → sportsball-0.3.86}/tests/data/sportsreference/sportsreference_player_model_test.py +0 -0
  213. {sportsball-0.3.84 → sportsball-0.3.86}/tests/data/sportsreference/sportsreference_team_model_test.py +0 -0
  214. {sportsball-0.3.84 → sportsball-0.3.86}/tests/data/sportsreference/sportsreference_venue_model_test.py +0 -0
  215. {sportsball-0.3.84 → sportsball-0.3.86}/tests/data/team_model_test.py +0 -0
  216. {sportsball-0.3.84 → sportsball-0.3.86}/tests/data/x/__init__.py +0 -0
  217. {sportsball-0.3.84 → sportsball-0.3.86}/tests/data/x/x_social_model_test.py +0 -0
  218. {sportsball-0.3.84 → sportsball-0.3.86}/tests/proxy_session_test.py +0 -0
  219. {sportsball-0.3.84 → sportsball-0.3.86}/tests/sportsball_test.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: sportsball
3
- Version: 0.3.84
3
+ Version: 0.3.86
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
@@ -193,6 +193,29 @@ A representation of a player within a team within a game.
193
193
  * **offensive_rebounds**: The number of rebounds during offense by the player made in the game.
194
194
  * **assists**: The number of times the player made a pass that resulted in a field goal in the game.
195
195
  * **turnovers**: The number of times a player loses possession of the ball in the game.
196
+ * **name**: The name of the player.
197
+ * **marks**: The number of marks the player performed in the game.
198
+ * **handballs**: The number of handballs the player performed in the game.
199
+ * **disposals**: The number of disposals the player performed in the game.
200
+ * **goals**: The number of goals scored by the player in the game.
201
+ * **behinds**: The number of behinds scored by the player in the game.
202
+ * **hit_outs**: The number of hit outs scored by the player in the game.
203
+ * **tackles**: The number of tackles performed by the player in the game.
204
+ * **rebounds**: The number of rebounds performed by the player in the game.
205
+ * **insides**: The number of insides performed by the player in the game.
206
+ * **clearances**: The number of clearances performed by the player in the game.
207
+ * **clangers**: The number of clangers performed by the player in the game.
208
+ * **free_kicks_for**: The number of free kicks given to the player in the game.
209
+ * **free_kicks_against**: The number of free kicks given against an action taken by the player in the game.
210
+ * **brownlow_votes**: The number of votes for the brownlow medal the player has in the current season.
211
+ * **contested_possessions**: The number of possessions the player had in the game that were contested.
212
+ * **uncontested_possessions**: The number of posessions the player had in the game that were uncontested.
213
+ * **contested_marks**: The number of marks the player had in the game that were contested.
214
+ * **marks_inside**: The number of marks the player had in the game inside the 50.
215
+ * **one_percenters:** The number of times the player spoils, knock-ons, smothers or shepherds the ball during the game.
216
+ * **bounces**: The number of bounces the player makes in the game.
217
+ * **goal_assists**: The number of assists on goal the player had in the game.
218
+ * **percentage_played**: The percentage of the game the player was on the field.
196
219
 
197
220
  #### Odds
198
221
 
@@ -134,6 +134,29 @@ A representation of a player within a team within a game.
134
134
  * **offensive_rebounds**: The number of rebounds during offense by the player made in the game.
135
135
  * **assists**: The number of times the player made a pass that resulted in a field goal in the game.
136
136
  * **turnovers**: The number of times a player loses possession of the ball in the game.
137
+ * **name**: The name of the player.
138
+ * **marks**: The number of marks the player performed in the game.
139
+ * **handballs**: The number of handballs the player performed in the game.
140
+ * **disposals**: The number of disposals the player performed in the game.
141
+ * **goals**: The number of goals scored by the player in the game.
142
+ * **behinds**: The number of behinds scored by the player in the game.
143
+ * **hit_outs**: The number of hit outs scored by the player in the game.
144
+ * **tackles**: The number of tackles performed by the player in the game.
145
+ * **rebounds**: The number of rebounds performed by the player in the game.
146
+ * **insides**: The number of insides performed by the player in the game.
147
+ * **clearances**: The number of clearances performed by the player in the game.
148
+ * **clangers**: The number of clangers performed by the player in the game.
149
+ * **free_kicks_for**: The number of free kicks given to the player in the game.
150
+ * **free_kicks_against**: The number of free kicks given against an action taken by the player in the game.
151
+ * **brownlow_votes**: The number of votes for the brownlow medal the player has in the current season.
152
+ * **contested_possessions**: The number of possessions the player had in the game that were contested.
153
+ * **uncontested_possessions**: The number of posessions the player had in the game that were uncontested.
154
+ * **contested_marks**: The number of marks the player had in the game that were contested.
155
+ * **marks_inside**: The number of marks the player had in the game inside the 50.
156
+ * **one_percenters:** The number of times the player spoils, knock-ons, smothers or shepherds the ball during the game.
157
+ * **bounces**: The number of bounces the player makes in the game.
158
+ * **goal_assists**: The number of assists on goal the player had in the game.
159
+ * **percentage_played**: The percentage of the game the player was on the field.
137
160
 
138
161
  #### Odds
139
162
 
@@ -26,7 +26,7 @@ def install_requires() -> typing.List[str]:
26
26
 
27
27
  setup(
28
28
  name='sportsball',
29
- version='0.3.84',
29
+ version='0.3.86',
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.84"
7
+ __VERSION__ = "0.3.86"
@@ -31,10 +31,16 @@ def _parse_game_info(
31
31
  for div_positions_row in div.find_all(
32
32
  "div", {"class": re.compile(".*team-lineups__positions-row.*")}
33
33
  ):
34
- row_players: list[list[tuple[str, str, str, str]]] = []
35
- for div_team_players in div_positions_row.find_all(
36
- "div",
37
- {"class": re.compile(".*team-lineups__positions-players.*")},
34
+ row_players: list[list[tuple[str, str, str, str]]] = [[], []]
35
+ for count, div_team_players in enumerate(
36
+ div_positions_row.find_all(
37
+ "div",
38
+ {
39
+ "class": re.compile(
40
+ ".*team-lineups__positions-players-container.*"
41
+ )
42
+ },
43
+ )
38
44
  ):
39
45
  team_players: list[tuple[str, str, str, str]] = []
40
46
  for a in div_team_players.find_all(
@@ -59,17 +65,9 @@ def _parse_game_info(
59
65
  team_players.append(
60
66
  (player_id, player_number, first_name, second_name)
61
67
  )
62
- row_players.append(team_players)
63
- if len(row_players) >= 2:
64
- break
65
- for count, row_players_list in enumerate(row_players):
66
- try:
67
- teams_players[count].extend(row_players_list)
68
- except IndexError as exc:
69
- # logging.error(html)
70
- logging.error(len(team_players))
71
- logging.error(count)
72
- raise exc
68
+ row_players[count].extend(team_players)
69
+ for count, row_players_list in enumerate(row_players):
70
+ teams_players[count].extend(row_players_list)
73
71
  dt = None
74
72
  for time in div.find_all(
75
73
  "time", {"class": re.compile(".*match-list-alt__header-time.*")}
@@ -246,18 +246,6 @@ AFL_VENUE_IDENTITY_MAP = {
246
246
  "Barossa Park": BAROSSA_PARK,
247
247
  "Ninja Stadium": BELLERIVE_OVAL,
248
248
  }
249
- RYAN_LESTER = "afl:CD_I291548"
250
- JACK_PAYNE = "afl:CD_I1002347"
251
- DAYNE_ZORKO = "afl:CD_I261224"
252
- JAMES_WORPEL = "James_Worpel"
253
- JOSH_WEDDLE = "Josh_Weddle"
254
- AFL_PLAYER_IDENTITY_MAP = {
255
- "afl:CD_I291548": RYAN_LESTER,
256
- "afl:CD_I1002347": JACK_PAYNE,
257
- "afl:CD_I261224": DAYNE_ZORKO,
258
- "James_Worpel": JAMES_WORPEL,
259
- "Josh_Weddle": JOSH_WEDDLE,
260
- }
261
249
 
262
250
 
263
251
  class AFLCombinedLeagueModel(CombinedLeagueModel):
@@ -283,7 +271,3 @@ class AFLCombinedLeagueModel(CombinedLeagueModel):
283
271
  @classmethod
284
272
  def venue_identity_map(cls) -> dict[str, str]:
285
273
  return AFL_VENUE_IDENTITY_MAP
286
-
287
- @classmethod
288
- def player_identity_map(cls) -> dict[str, str]:
289
- return AFL_PLAYER_IDENTITY_MAP
@@ -47,9 +47,7 @@ class CombinedLeagueModel(LeagueModel):
47
47
  @classmethod
48
48
  def player_identity_map(cls) -> dict[str, str]:
49
49
  """A map to resolve the different player identities to a consistent identity."""
50
- raise NotImplementedError(
51
- "player_identity_map not implemented on CombinedLeagueModel parent class."
52
- )
50
+ return {}
53
51
 
54
52
  @property
55
53
  def games(self) -> Iterator[GameModel]:
@@ -1,6 +1,7 @@
1
1
  """Combined team model."""
2
2
 
3
3
  # pylint: disable=too-many-locals
4
+ import logging
4
5
  import re
5
6
  import unicodedata
6
7
 
@@ -14,6 +15,13 @@ from .combined_player_model import create_combined_player_model
14
15
  REGEX = re.compile("[^a-zA-Z]")
15
16
 
16
17
 
18
+ def _normalise_player_name(name: str) -> str:
19
+ # Handle "Surname, Firstname"
20
+ if "," in name:
21
+ name = " ".join(reversed([x.strip() for x in name.split(",")]))
22
+ return REGEX.sub("", unicodedata.normalize("NFC", name).lower().strip())
23
+
24
+
17
25
  def create_combined_team_model(
18
26
  team_models: list[TeamModel],
19
27
  identifier: str,
@@ -35,9 +43,7 @@ def create_combined_team_model(
35
43
  location = team_model_location
36
44
  for player_model in team_model.players:
37
45
  player_id = player_model.identifier
38
- player_name_key = REGEX.sub(
39
- "", unicodedata.normalize("NFC", player_model.name).lower()
40
- )
46
+ player_name_key = _normalise_player_name(player_model.name)
41
47
  if player_model.identifier in player_identity_map:
42
48
  player_id = player_identity_map[player_id]
43
49
  elif player_name_key in names:
@@ -78,7 +84,7 @@ def create_combined_team_model(
78
84
  name=team_models[0].name,
79
85
  location=location,
80
86
  players=[ # pyright: ignore
81
- create_combined_player_model(x, x[0].identifier) for x in players.values()
87
+ create_combined_player_model(v, k) for k, v in players.items()
82
88
  ],
83
89
  odds=[x[0] for x in odds.values()],
84
90
  points=points,
@@ -52,7 +52,11 @@ class GameModel(BaseModel):
52
52
  end_dt: datetime.datetime | None = Field(
53
53
  ..., json_schema_extra={TYPE_KEY: FieldType.LOOKAHEAD}, alias=END_DT_COLUMN
54
54
  )
55
- attendance: int | None = Field(..., alias=GAME_ATTENDANCE_COLUMN)
55
+ attendance: int | None = Field(
56
+ ...,
57
+ json_schema_extra={TYPE_KEY: FieldType.LOOKAHEAD},
58
+ alias=GAME_ATTENDANCE_COLUMN,
59
+ )
56
60
  league: str = Field(..., alias=LEAGUE_COLUMN)
57
61
  year: int | None
58
62
  season_type: SeasonType | None
@@ -1740,7 +1740,7 @@ DUNKIN_DONUTS_CENTER = SportsballGeocodeTuple(
1740
1740
  )
1741
1741
  CHI_HEALTH_CENTER = SportsballGeocodeTuple(
1742
1742
  city="Omaha",
1743
- state="NB",
1743
+ state="NE",
1744
1744
  postal="",
1745
1745
  lat=41.263,
1746
1746
  lng=-95.928,
@@ -4599,7 +4599,7 @@ _CACHED_GEOCODES: dict[str, Any] = {
4599
4599
  ),
4600
4600
  "Pinnacle Bank Arena, Lincoln, Nebraska": SportsballGeocodeTuple(
4601
4601
  city="Lincoln",
4602
- state="NB",
4602
+ state="NE",
4603
4603
  postal="",
4604
4604
  lat=40.817778,
4605
4605
  lng=-96.713333,
@@ -5947,7 +5947,7 @@ _CACHED_GEOCODES: dict[str, Any] = {
5947
5947
  ),
5948
5948
  "Baxter Arena, Omaha, Nebraska": SportsballGeocodeTuple(
5949
5949
  city="Omaha",
5950
- state="NB",
5950
+ state="NE",
5951
5951
  postal="",
5952
5952
  lat=41.236,
5953
5953
  lng=-96.013,
@@ -11062,7 +11062,7 @@ _CACHED_GEOCODES: dict[str, Any] = {
11062
11062
  ),
11063
11063
  "Omaha, Nebraska": SportsballGeocodeTuple(
11064
11064
  city="Omaha",
11065
- state="NB",
11065
+ state="NE",
11066
11066
  postal="",
11067
11067
  lat=41.258611,
11068
11068
  lng=-95.9375,
@@ -11352,7 +11352,7 @@ _CACHED_GEOCODES: dict[str, Any] = {
11352
11352
  ),
11353
11353
  "Lincoln, Nebraska": SportsballGeocodeTuple(
11354
11354
  city="Lincoln",
11355
- state="NB",
11355
+ state="NE",
11356
11356
  postal="",
11357
11357
  lat=40.809167,
11358
11358
  lng=-96.678056,
@@ -12190,7 +12190,7 @@ _CACHED_GEOCODES: dict[str, Any] = {
12190
12190
  ),
12191
12191
  "Ralston, Nebraska": SportsballGeocodeTuple(
12192
12192
  city="Ralston",
12193
- state="NB",
12193
+ state="NE",
12194
12194
  postal="",
12195
12195
  lat=41.200556,
12196
12196
  lng=-96.035556,
@@ -12862,7 +12862,7 @@ _CACHED_GEOCODES: dict[str, Any] = {
12862
12862
  ),
12863
12863
  "Ralston Arena, Ralston, Nebraska": SportsballGeocodeTuple(
12864
12864
  city="Ralston",
12865
- state="NB",
12865
+ state="NE",
12866
12866
  postal="",
12867
12867
  lat=41.206944,
12868
12868
  lng=-96.026944,
@@ -13028,7 +13028,7 @@ _CACHED_GEOCODES: dict[str, Any] = {
13028
13028
  ),
13029
13029
  "D.J. Sokol Arena, Omaha, Nebraska": SportsballGeocodeTuple(
13030
13030
  city="Omaha",
13031
- state="NB",
13031
+ state="NE",
13032
13032
  postal="",
13033
13033
  lat=41.266146,
13034
13034
  lng=-95.940471,
@@ -13261,7 +13261,7 @@ _CACHED_GEOCODES: dict[str, Any] = {
13261
13261
  ),
13262
13262
  "Bob Devaney Sports Center, Lincoln, Nebraska": SportsballGeocodeTuple(
13263
13263
  city="Lincoln",
13264
- state="NB",
13264
+ state="NE",
13265
13265
  postal="",
13266
13266
  lat=40.830207,
13267
13267
  lng=-96.697644,
@@ -13297,6 +13297,70 @@ _CACHED_GEOCODES: dict[str, Any] = {
13297
13297
  country="USA",
13298
13298
  ),
13299
13299
  "Reliant Stadium, Houston, Texas": NRG_STADIUM,
13300
+ "South Padre Island Convention Centre, South Padre Island, Texas": SportsballGeocodeTuple(
13301
+ city="South Padre Island",
13302
+ state="TX",
13303
+ postal="78597",
13304
+ lat=26.140556,
13305
+ lng=-97.175,
13306
+ housenumber="7355",
13307
+ country="USA",
13308
+ ),
13309
+ "Moon Palace Resort, Cancun": SportsballGeocodeTuple(
13310
+ city="Cancun",
13311
+ state="QR",
13312
+ postal="77500",
13313
+ lat=20.9886511,
13314
+ lng=-86.826701,
13315
+ housenumber="340",
13316
+ country="Mexico",
13317
+ ),
13318
+ "Meeks Family Fieldhouse at Carson Center, Evansville, Indiana": SportsballGeocodeTuple(
13319
+ city="Evansville",
13320
+ state="IN",
13321
+ postal="",
13322
+ lat=37.9963496,
13323
+ lng=-87.6993641,
13324
+ housenumber="",
13325
+ country="USA",
13326
+ ),
13327
+ "José Miguel Agrelot Coliseum, San Juan": SportsballGeocodeTuple(
13328
+ city="San Juan",
13329
+ state="PR",
13330
+ postal="",
13331
+ lat=18.427717,
13332
+ lng=-66.061392,
13333
+ housenumber="500",
13334
+ country="USA",
13335
+ ),
13336
+ "USB Sports Complex, Stony Brook, New York": SportsballGeocodeTuple(
13337
+ city="Stony Brook",
13338
+ state="NY",
13339
+ postal="11790",
13340
+ lat=40.917417,
13341
+ lng=-73.124722,
13342
+ housenumber="100",
13343
+ country="USA",
13344
+ ),
13345
+ "L. A. Sports Arena, Los Angeles, California": LOS_ANGELES_MEMORIAL_COLESIUM,
13346
+ "Kimbel Arena, Conway, South Carolina": SportsballGeocodeTuple(
13347
+ city="Conway",
13348
+ state="SC",
13349
+ postal="",
13350
+ lat=33.79382,
13351
+ lng=-79.013243,
13352
+ housenumber="",
13353
+ country="USA",
13354
+ ),
13355
+ "Sapp Fieldhouse, Ralston, Nebraska": SportsballGeocodeTuple(
13356
+ city="Ralston",
13357
+ state="NE",
13358
+ postal="68132",
13359
+ lat=41.2574,
13360
+ lng=-96.00922,
13361
+ housenumber="6311",
13362
+ country="USA",
13363
+ ),
13300
13364
  }
13301
13365
 
13302
13366
 
@@ -883,6 +883,7 @@ NBA_VENUE_IDENTITY_MAP: dict[str, str] = {
883
883
  "19331": CAPITAL_ONE_ARENA,
884
884
  "24838": SPECTRUM_CENTER,
885
885
  "28619": KASEYA_CENTER,
886
+ "24727": FEDEX_FORUM,
886
887
  }
887
888
  NBA_PLAYER_IDENTITY_MAP: dict[str, str] = {}
888
889
 
@@ -41,6 +41,7 @@ PLAYER_ONE_PERCENTERS_COLUMN: Literal["one_percenters"] = "one_percenters"
41
41
  PLAYER_BOUNCES_COLUMN: Literal["bounces"] = "bounces"
42
42
  PLAYER_GOAL_ASSISTS_COLUMN: Literal["goal_assists"] = "goal_assists"
43
43
  PLAYER_PERCENTAGE_PLAYED_COLUMN: Literal["percentage_played"] = "percentage_played"
44
+ PLAYER_NAME_COLUMN: Literal["name"] = "name"
44
45
 
45
46
 
46
47
  class PlayerModel(BaseModel):
@@ -92,7 +93,7 @@ class PlayerModel(BaseModel):
92
93
  json_schema_extra={TYPE_KEY: FieldType.LOOKAHEAD},
93
94
  alias=TURNOVERS_COLUMN,
94
95
  )
95
- name: str
96
+ name: str = Field(..., alias=PLAYER_NAME_COLUMN)
96
97
  marks: int | None = Field(
97
98
  ...,
98
99
  json_schema_extra={TYPE_KEY: FieldType.LOOKAHEAD},
@@ -399,6 +399,9 @@ def _create_sportsreference_game_model(
399
399
  assists,
400
400
  turnovers,
401
401
  )
402
+ for team in teams:
403
+ if team.name == "File Not Found":
404
+ raise ValueError("team name is File Not Found (invalid)")
402
405
 
403
406
  season_type = SeasonType.REGULAR
404
407
  for h2 in soup.find_all("h2"):
@@ -40,6 +40,7 @@ _NON_WAYBACK_URLS: set[str] = {
40
40
  }
41
41
  _BAD_TEAM_URLS = {
42
42
  "https://www.sports-reference.com/cbb/schools/mid-atlantic-christian/2016.html",
43
+ "https://www.sports-reference.com/cbb/schools/claflin/2013.html",
43
44
  }
44
45
 
45
46
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: sportsball
3
- Version: 0.3.84
3
+ Version: 0.3.86
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
@@ -193,6 +193,29 @@ A representation of a player within a team within a game.
193
193
  * **offensive_rebounds**: The number of rebounds during offense by the player made in the game.
194
194
  * **assists**: The number of times the player made a pass that resulted in a field goal in the game.
195
195
  * **turnovers**: The number of times a player loses possession of the ball in the game.
196
+ * **name**: The name of the player.
197
+ * **marks**: The number of marks the player performed in the game.
198
+ * **handballs**: The number of handballs the player performed in the game.
199
+ * **disposals**: The number of disposals the player performed in the game.
200
+ * **goals**: The number of goals scored by the player in the game.
201
+ * **behinds**: The number of behinds scored by the player in the game.
202
+ * **hit_outs**: The number of hit outs scored by the player in the game.
203
+ * **tackles**: The number of tackles performed by the player in the game.
204
+ * **rebounds**: The number of rebounds performed by the player in the game.
205
+ * **insides**: The number of insides performed by the player in the game.
206
+ * **clearances**: The number of clearances performed by the player in the game.
207
+ * **clangers**: The number of clangers performed by the player in the game.
208
+ * **free_kicks_for**: The number of free kicks given to the player in the game.
209
+ * **free_kicks_against**: The number of free kicks given against an action taken by the player in the game.
210
+ * **brownlow_votes**: The number of votes for the brownlow medal the player has in the current season.
211
+ * **contested_possessions**: The number of possessions the player had in the game that were contested.
212
+ * **uncontested_possessions**: The number of posessions the player had in the game that were uncontested.
213
+ * **contested_marks**: The number of marks the player had in the game that were contested.
214
+ * **marks_inside**: The number of marks the player had in the game inside the 50.
215
+ * **one_percenters:** The number of times the player spoils, knock-ons, smothers or shepherds the ball during the game.
216
+ * **bounces**: The number of bounces the player makes in the game.
217
+ * **goal_assists**: The number of assists on goal the player had in the game.
218
+ * **percentage_played**: The percentage of the game the player was on the field.
196
219
 
197
220
  #### Odds
198
221
 
@@ -176,6 +176,7 @@ tests/data/aussportsbetting/aussportsbetting_game_model_test.py
176
176
  tests/data/combined/__init__.py
177
177
  tests/data/combined/combined_game_model_test.py
178
178
  tests/data/combined/combined_player_model_test.py
179
+ tests/data/combined/combined_team_model_test.py
179
180
  tests/data/espn/__init__.py
180
181
  tests/data/espn/espn_game_model_test.py
181
182
  tests/data/espn/espn_player_model_test.py
@@ -15,7 +15,7 @@ class TestAFLAFLLeagueModel(unittest.TestCase):
15
15
 
16
16
  def test_parse_game_info(self):
17
17
  with open(os.path.join(self.dir, "team-lineups.html")) as handle:
18
- list(_parse_game_info(handle.read(), self._session, [
18
+ game_models = list(_parse_game_info(handle.read(), self._session, [
19
19
  "Melbourne",
20
20
  "Richmond",
21
21
  "Collingwood",
@@ -35,3 +35,7 @@ class TestAFLAFLLeagueModel(unittest.TestCase):
35
35
  "Hawthorn",
36
36
  "West Coast Eagles",
37
37
  ]))
38
+ first_game = game_models[0]
39
+ self.assertEqual(len(first_game.teams), 2)
40
+ for team in first_game.teams:
41
+ self.assertEqual(len(team.players), 22)