sportsball 0.4.1__tar.gz → 0.4.3__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 (261) hide show
  1. {sportsball-0.4.1/sportsball.egg-info → sportsball-0.4.3}/PKG-INFO +1 -1
  2. {sportsball-0.4.1 → sportsball-0.4.3}/setup.py +1 -1
  3. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/__init__.py +1 -1
  4. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/afl/afltables/afl_afltables_coach_model.py +1 -1
  5. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/espn/espn_game_model.py +1 -1
  6. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/google/google_address_model.py +24 -18
  7. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/hkjc/hkjc/hkjc_hkjc_coach_model.py +2 -0
  8. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/hkjc/hkjc/hkjc_hkjc_game_model.py +24 -9
  9. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/hkjc/hkjc/hkjc_hkjc_player_model.py +10 -1
  10. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/hkjc/hkjc/hkjc_hkjc_team_model.py +3 -3
  11. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/sportsreference/sportsreference_team_model.py +4 -5
  12. {sportsball-0.4.1 → sportsball-0.4.3/sportsball.egg-info}/PKG-INFO +1 -1
  13. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball.egg-info/SOURCES.txt +2 -0
  14. sportsball-0.4.3/tests/data/afl/afltables/afl_afltables_coach_model_test.py +30 -0
  15. {sportsball-0.4.1 → sportsball-0.4.3}/tests/data/afl/afltables/afl_afltables_game_model_test.py +4 -0
  16. {sportsball-0.4.1 → sportsball-0.4.3}/tests/data/hkjc/hkjc/hkjc_hkjc_game_model_test.py +12 -0
  17. sportsball-0.4.3/tests/data/hkjc/hkjc/hkjc_hkjc_player_model_test.py +29 -0
  18. {sportsball-0.4.1 → sportsball-0.4.3}/tests/data/sportsreference/sportsreference_team_model_test.py +24 -0
  19. {sportsball-0.4.1 → sportsball-0.4.3}/LICENSE +0 -0
  20. {sportsball-0.4.1 → sportsball-0.4.3}/MANIFEST.in +0 -0
  21. {sportsball-0.4.1 → sportsball-0.4.3}/README.md +0 -0
  22. {sportsball-0.4.1 → sportsball-0.4.3}/requirements.txt +0 -0
  23. {sportsball-0.4.1 → sportsball-0.4.3}/setup.cfg +0 -0
  24. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/__main__.py +0 -0
  25. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/args.py +0 -0
  26. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/cache.py +0 -0
  27. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/__init__.py +0 -0
  28. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/address_model.py +0 -0
  29. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/afl/__init__.py +0 -0
  30. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/afl/afl/__init__.py +0 -0
  31. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/afl/afl/afl_afl_bookie_model.py +0 -0
  32. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/afl/afl/afl_afl_game_model.py +0 -0
  33. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/afl/afl/afl_afl_league_model.py +0 -0
  34. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/afl/afl/afl_afl_odds_model.py +0 -0
  35. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/afl/afl/afl_afl_player_model.py +0 -0
  36. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/afl/afl/afl_afl_team_model.py +0 -0
  37. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/afl/afl/afl_afl_venue_model.py +0 -0
  38. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/afl/afltables/__init__.py +0 -0
  39. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/afl/afltables/afl_afltables_game_model.py +0 -0
  40. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/afl/afltables/afl_afltables_league_model.py +0 -0
  41. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/afl/afltables/afl_afltables_player_model.py +0 -0
  42. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/afl/afltables/afl_afltables_team_model.py +0 -0
  43. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/afl/afltables/afl_afltables_venue_model.py +0 -0
  44. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/afl/aussportsbetting/__init__.py +0 -0
  45. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/afl/aussportsbetting/afl_aussportsbetting_league_model.py +0 -0
  46. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/afl/combined/__init__.py +0 -0
  47. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/afl/combined/afl_combined_league_model.py +0 -0
  48. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/afl/espn/__init__.py +0 -0
  49. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/afl/espn/afl_espn_league_model.py +0 -0
  50. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/afl/oddsportal/__init__.py +0 -0
  51. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/afl/oddsportal/afl_oddsportal_league_model.py +0 -0
  52. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/afl/position.py +0 -0
  53. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/aussportsbetting/__init__.py +0 -0
  54. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/aussportsbetting/aussportsbetting_bookie_model.py +0 -0
  55. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/aussportsbetting/aussportsbetting_game_model.py +0 -0
  56. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/aussportsbetting/aussportsbetting_league_model.py +0 -0
  57. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/aussportsbetting/aussportsbetting_odds_model.py +0 -0
  58. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/aussportsbetting/aussportsbetting_team_model.py +0 -0
  59. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/aussportsbetting/aussportsbetting_venue_model.py +0 -0
  60. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/bet.py +0 -0
  61. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/bookie_model.py +0 -0
  62. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/coach_model.py +0 -0
  63. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/combined/__init__.py +0 -0
  64. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/combined/combined_address_model.py +0 -0
  65. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/combined/combined_coach_model.py +0 -0
  66. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/combined/combined_game_model.py +0 -0
  67. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/combined/combined_league_model.py +0 -0
  68. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/combined/combined_player_model.py +0 -0
  69. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/combined/combined_team_model.py +0 -0
  70. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/combined/combined_venue_model.py +0 -0
  71. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/combined/combined_weather_model.py +0 -0
  72. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/combined/null_check.py +0 -0
  73. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/dividend_model.py +0 -0
  74. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/espn/__init__.py +0 -0
  75. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/espn/espn_bookie_model.py +0 -0
  76. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/espn/espn_coach_model.py +0 -0
  77. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/espn/espn_league_model.py +0 -0
  78. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/espn/espn_odds_model.py +0 -0
  79. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/espn/espn_player_model.py +0 -0
  80. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/espn/espn_team_model.py +0 -0
  81. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/espn/espn_venue_model.py +0 -0
  82. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/field_type.py +0 -0
  83. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/game_model.py +0 -0
  84. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/google/__init__.py +0 -0
  85. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/google/google_news_model.py +0 -0
  86. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/hkjc/__init__.py +0 -0
  87. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/hkjc/hkjc/__init__.py +0 -0
  88. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/hkjc/hkjc/hkjc_hkjc_bookie_model.py +0 -0
  89. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/hkjc/hkjc/hkjc_hkjc_dividend_model.py +0 -0
  90. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/hkjc/hkjc/hkjc_hkjc_league_model.py +0 -0
  91. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/hkjc/hkjc/hkjc_hkjc_odds_model.py +0 -0
  92. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/hkjc/hkjc/hkjc_hkjc_owner_model.py +0 -0
  93. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/hkjc/hkjc/hkjc_hkjc_venue_model.py +0 -0
  94. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/hkjc/position.py +0 -0
  95. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/league.py +0 -0
  96. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/league_model.py +0 -0
  97. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/model.py +0 -0
  98. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/nba/__init__.py +0 -0
  99. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/nba/combined/__init__.py +0 -0
  100. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/nba/combined/nba_combined_league_model.py +0 -0
  101. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/nba/espn/__init__.py +0 -0
  102. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/nba/espn/nba_espn_league_model.py +0 -0
  103. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/nba/nba/__init__.py +0 -0
  104. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/nba/nba/nba_nba_game_model.py +0 -0
  105. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/nba/nba/nba_nba_league_model.py +0 -0
  106. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/nba/nba/nba_nba_team_model.py +0 -0
  107. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/nba/nbacom/__init__.py +0 -0
  108. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/nba/nbacom/nba_nbacom_game_model.py +0 -0
  109. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/nba/nbacom/nba_nbacom_league_model.py +0 -0
  110. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/nba/nbacom/nba_nbacom_player_model.py +0 -0
  111. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/nba/nbacom/nba_nbacom_team_model.py +0 -0
  112. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/nba/nbacom/nba_nbacom_venue_model.py +0 -0
  113. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/nba/oddsportal/__init__.py +0 -0
  114. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/nba/oddsportal/nba_oddsportal_league_model.py +0 -0
  115. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/nba/position.py +0 -0
  116. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/nba/sportsdb/__init__.py +0 -0
  117. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/nba/sportsdb/nba_sportsdb_league_model.py +0 -0
  118. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/nba/sportsreference/__init__.py +0 -0
  119. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/nba/sportsreference/nba_sportsreference_league_model.py +0 -0
  120. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/ncaab/__init__.py +0 -0
  121. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/ncaab/combined/__init__.py +0 -0
  122. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/ncaab/combined/ncaab_combined_league_model.py +0 -0
  123. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/ncaab/espn/__init__.py +0 -0
  124. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/ncaab/espn/ncaab_espn_league_model.py +0 -0
  125. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/ncaab/oddsportal/__init__.py +0 -0
  126. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/ncaab/oddsportal/ncaab_oddsportal_league_model.py +0 -0
  127. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/ncaab/sportsreference/__init__.py +0 -0
  128. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/ncaab/sportsreference/ncaab_sportsreference_league_model.py +0 -0
  129. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/ncaaf/__init__.py +0 -0
  130. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/ncaaf/combined/__init__.py +0 -0
  131. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/ncaaf/combined/ncaaf_combined_league_model.py +0 -0
  132. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/ncaaf/espn/__init__.py +0 -0
  133. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/ncaaf/espn/ncaaf_espn_league_model.py +0 -0
  134. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/ncaaf/oddsportal/__init__.py +0 -0
  135. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/ncaaf/oddsportal/ncaaf_oddsportal_league_model.py +0 -0
  136. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/news_model.py +0 -0
  137. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/nfl/__init__.py +0 -0
  138. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/nfl/aussportsbetting/__init__.py +0 -0
  139. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/nfl/aussportsbetting/nfl_aussportsbetting_league_model.py +0 -0
  140. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/nfl/combined/__init__.py +0 -0
  141. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/nfl/combined/nfl_combined_league_model.py +0 -0
  142. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/nfl/espn/__init__.py +0 -0
  143. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/nfl/espn/nfl_espn_league_model.py +0 -0
  144. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/nfl/oddsportal/__init__.py +0 -0
  145. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/nfl/oddsportal/nfl_oddsportal_league_model.py +0 -0
  146. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/nfl/position.py +0 -0
  147. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/nfl/sportsdb/__init__.py +0 -0
  148. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/nfl/sportsdb/nfl_sportsdb_league_model.py +0 -0
  149. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/odds_model.py +0 -0
  150. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/oddsportal/__init__.py +0 -0
  151. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/oddsportal/decrypt.py +0 -0
  152. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/oddsportal/oddsportal_bookie_model.py +0 -0
  153. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/oddsportal/oddsportal_game_model.py +0 -0
  154. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/oddsportal/oddsportal_league_model.py +0 -0
  155. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/oddsportal/oddsportal_odds_model.py +0 -0
  156. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/oddsportal/oddsportal_team_model.py +0 -0
  157. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/oddsportal/oddsportal_venue_model.py +0 -0
  158. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/owner_model.py +0 -0
  159. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/player_model.py +0 -0
  160. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/season_type.py +0 -0
  161. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/sex.py +0 -0
  162. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/social_model.py +0 -0
  163. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/species.py +0 -0
  164. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/sportsdb/__init__.py +0 -0
  165. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/sportsdb/sportsdb_game_model.py +0 -0
  166. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/sportsdb/sportsdb_league_model.py +0 -0
  167. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/sportsdb/sportsdb_team_model.py +0 -0
  168. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/sportsdb/sportsdb_venue_model.py +0 -0
  169. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/sportsreference/__init__.py +0 -0
  170. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/sportsreference/sportsreference_coach_model.py +0 -0
  171. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/sportsreference/sportsreference_game_model.py +0 -0
  172. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/sportsreference/sportsreference_league_model.py +0 -0
  173. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/sportsreference/sportsreference_player_model.py +0 -0
  174. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/sportsreference/sportsreference_venue_model.py +0 -0
  175. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/team_model.py +0 -0
  176. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/venue_model.py +0 -0
  177. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/weather/__init__.py +0 -0
  178. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/weather/gribstream/__init__.py +0 -0
  179. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/weather/gribstream/gribstream_weather_model.py +0 -0
  180. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/weather/multi_weather_model.py +0 -0
  181. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/weather/openmeteo/__init__.py +0 -0
  182. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/weather/openmeteo/openmeteo_weather_model.py +0 -0
  183. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/weather_model.py +0 -0
  184. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/wikipedia/__init__.py +0 -0
  185. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/wikipedia/wikipedia_venue_model.py +0 -0
  186. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/x/__init__.py +0 -0
  187. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/data/x/x_social_model.py +0 -0
  188. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/logger.py +0 -0
  189. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/loglevel.py +0 -0
  190. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/playwright.py +0 -0
  191. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/proxy_session.py +0 -0
  192. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/session.py +0 -0
  193. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/sportsball.py +0 -0
  194. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/vendor/__init__.py +0 -0
  195. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball/vendor/pygooglenews/__init__.py +0 -0
  196. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball.egg-info/dependency_links.txt +0 -0
  197. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball.egg-info/entry_points.txt +0 -0
  198. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball.egg-info/not-zip-safe +0 -0
  199. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball.egg-info/requires.txt +0 -0
  200. {sportsball-0.4.1 → sportsball-0.4.3}/sportsball.egg-info/top_level.txt +0 -0
  201. {sportsball-0.4.1 → sportsball-0.4.3}/tests/__init__.py +0 -0
  202. {sportsball-0.4.1 → sportsball-0.4.3}/tests/data/__init__.py +0 -0
  203. {sportsball-0.4.1 → sportsball-0.4.3}/tests/data/afl/__init__.py +0 -0
  204. {sportsball-0.4.1 → sportsball-0.4.3}/tests/data/afl/afl/__init__.py +0 -0
  205. {sportsball-0.4.1 → sportsball-0.4.3}/tests/data/afl/afl/afl_afl_game_model_test.py +0 -0
  206. {sportsball-0.4.1 → sportsball-0.4.3}/tests/data/afl/afl/afl_afl_league_model_test.py +0 -0
  207. {sportsball-0.4.1 → sportsball-0.4.3}/tests/data/afl/afltables/__init__.py +0 -0
  208. {sportsball-0.4.1 → sportsball-0.4.3}/tests/data/afl/afltables/afl_afltables_league_model_test.py +0 -0
  209. {sportsball-0.4.1 → sportsball-0.4.3}/tests/data/afl/afltables/afl_afltables_player_model_test.py +0 -0
  210. {sportsball-0.4.1 → sportsball-0.4.3}/tests/data/aussportsbetting/__init__.py +0 -0
  211. {sportsball-0.4.1 → sportsball-0.4.3}/tests/data/aussportsbetting/aussportsbetting_game_model_test.py +0 -0
  212. {sportsball-0.4.1 → sportsball-0.4.3}/tests/data/combined/__init__.py +0 -0
  213. {sportsball-0.4.1 → sportsball-0.4.3}/tests/data/combined/combined_game_model_test.py +0 -0
  214. {sportsball-0.4.1 → sportsball-0.4.3}/tests/data/combined/combined_player_model_test.py +0 -0
  215. {sportsball-0.4.1 → sportsball-0.4.3}/tests/data/combined/combined_team_model_test.py +0 -0
  216. {sportsball-0.4.1 → sportsball-0.4.3}/tests/data/espn/__init__.py +0 -0
  217. {sportsball-0.4.1 → sportsball-0.4.3}/tests/data/espn/espn_game_model_test.py +0 -0
  218. {sportsball-0.4.1 → sportsball-0.4.3}/tests/data/espn/espn_player_model_test.py +0 -0
  219. {sportsball-0.4.1 → sportsball-0.4.3}/tests/data/game_model_test.py +0 -0
  220. {sportsball-0.4.1 → sportsball-0.4.3}/tests/data/google/__init__.py +0 -0
  221. {sportsball-0.4.1 → sportsball-0.4.3}/tests/data/google/google_address_model_test.py +0 -0
  222. {sportsball-0.4.1 → sportsball-0.4.3}/tests/data/google/google_news_model_test.py +0 -0
  223. {sportsball-0.4.1 → sportsball-0.4.3}/tests/data/hkjc/__init__.py +0 -0
  224. {sportsball-0.4.1 → sportsball-0.4.3}/tests/data/hkjc/hkjc/__init__.py +0 -0
  225. {sportsball-0.4.1 → sportsball-0.4.3}/tests/data/nba/__init__.py +0 -0
  226. {sportsball-0.4.1 → sportsball-0.4.3}/tests/data/nba/nba/__init__.py +0 -0
  227. {sportsball-0.4.1 → sportsball-0.4.3}/tests/data/nba/nba/nba_nba_game_model_test.py +0 -0
  228. {sportsball-0.4.1 → sportsball-0.4.3}/tests/data/nba/nba/nba_nba_league_model_test.py +0 -0
  229. {sportsball-0.4.1 → sportsball-0.4.3}/tests/data/nba/nba/nba_nba_team_model_test.py +0 -0
  230. {sportsball-0.4.1 → sportsball-0.4.3}/tests/data/nba/sportsdb/__init__.py +0 -0
  231. {sportsball-0.4.1 → sportsball-0.4.3}/tests/data/nba/sportsdb/nba_sportsdb_league_model_test.py +0 -0
  232. {sportsball-0.4.1 → sportsball-0.4.3}/tests/data/nba/sportsreference/__init__.py +0 -0
  233. {sportsball-0.4.1 → sportsball-0.4.3}/tests/data/nba/sportsreference/nba_sportsreference_league_model_test.py +0 -0
  234. {sportsball-0.4.1 → sportsball-0.4.3}/tests/data/ncaab/__init__.py +0 -0
  235. {sportsball-0.4.1 → sportsball-0.4.3}/tests/data/ncaab/sportsreference/__init__.py +0 -0
  236. {sportsball-0.4.1 → sportsball-0.4.3}/tests/data/ncaab/sportsreference/ncaab_sportsreference_league_model_test.py +0 -0
  237. {sportsball-0.4.1 → sportsball-0.4.3}/tests/data/nfl/__init__.py +0 -0
  238. {sportsball-0.4.1 → sportsball-0.4.3}/tests/data/nfl/sportsdb/__init__.py +0 -0
  239. {sportsball-0.4.1 → sportsball-0.4.3}/tests/data/nfl/sportsdb/nfl_sportsdb_league_model_test.py +0 -0
  240. {sportsball-0.4.1 → sportsball-0.4.3}/tests/data/oddsportal/__init__.py +0 -0
  241. {sportsball-0.4.1 → sportsball-0.4.3}/tests/data/oddsportal/decrypt_test.py +0 -0
  242. {sportsball-0.4.1 → sportsball-0.4.3}/tests/data/oddsportal/oddsportal_game_model_test.py +0 -0
  243. {sportsball-0.4.1 → sportsball-0.4.3}/tests/data/oddsportal/oddsportal_league_model_test.py +0 -0
  244. {sportsball-0.4.1 → sportsball-0.4.3}/tests/data/player_model_test.py +0 -0
  245. {sportsball-0.4.1 → sportsball-0.4.3}/tests/data/social_model_test.py +0 -0
  246. {sportsball-0.4.1 → sportsball-0.4.3}/tests/data/sportsdb/__init__.py +0 -0
  247. {sportsball-0.4.1 → sportsball-0.4.3}/tests/data/sportsdb/sportsdb_game_model_test.py +0 -0
  248. {sportsball-0.4.1 → sportsball-0.4.3}/tests/data/sportsdb/sportsdb_league_model_test.py +0 -0
  249. {sportsball-0.4.1 → sportsball-0.4.3}/tests/data/sportsdb/sportsdb_team_model_test.py +0 -0
  250. {sportsball-0.4.1 → sportsball-0.4.3}/tests/data/sportsdb/sportsdb_venue_model_test.py +0 -0
  251. {sportsball-0.4.1 → sportsball-0.4.3}/tests/data/sportsreference/__init__.py +0 -0
  252. {sportsball-0.4.1 → sportsball-0.4.3}/tests/data/sportsreference/sportsreference_coach_model_test.py +0 -0
  253. {sportsball-0.4.1 → sportsball-0.4.3}/tests/data/sportsreference/sportsreference_game_model_test.py +0 -0
  254. {sportsball-0.4.1 → sportsball-0.4.3}/tests/data/sportsreference/sportsreference_league_model_test.py +0 -0
  255. {sportsball-0.4.1 → sportsball-0.4.3}/tests/data/sportsreference/sportsreference_player_model_test.py +0 -0
  256. {sportsball-0.4.1 → sportsball-0.4.3}/tests/data/sportsreference/sportsreference_venue_model_test.py +0 -0
  257. {sportsball-0.4.1 → sportsball-0.4.3}/tests/data/team_model_test.py +0 -0
  258. {sportsball-0.4.1 → sportsball-0.4.3}/tests/data/x/__init__.py +0 -0
  259. {sportsball-0.4.1 → sportsball-0.4.3}/tests/data/x/x_social_model_test.py +0 -0
  260. {sportsball-0.4.1 → sportsball-0.4.3}/tests/proxy_session_test.py +0 -0
  261. {sportsball-0.4.1 → sportsball-0.4.3}/tests/sportsball_test.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: sportsball
3
- Version: 0.4.1
3
+ Version: 0.4.3
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.4.1',
29
+ version='0.4.3',
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.4.1"
7
+ __VERSION__ = "0.4.3"
@@ -47,7 +47,7 @@ def _create_afl_afltables_coach_model(
47
47
  start_year, end_year = [int(x) for x in year_range.split("-")]
48
48
  else:
49
49
  start_year = end_year = int(year_range)
50
- if start_year <= year >= end_year:
50
+ if start_year <= year <= end_year:
51
51
  name = names[count].strip()
52
52
  break
53
53
  if name is None:
@@ -198,7 +198,7 @@ def create_espn_game_model(
198
198
  dt = parse(event["date"])
199
199
  if (
200
200
  not pytest_is_running.is_running()
201
- and dt < datetime.datetime.now() - datetime.timedelta(days=7)
201
+ and dt < datetime.datetime.now().date() - datetime.timedelta(days=7)
202
202
  ):
203
203
  return _cached_create_espn_game_model(
204
204
  event,
@@ -3196,6 +3196,24 @@ MONROE = SportsballGeocodeTuple(
3196
3196
  housenumber="",
3197
3197
  country="USA",
3198
3198
  )
3199
+ YOKOHAMA_ARENA = SportsballGeocodeTuple(
3200
+ city="Kanagawa",
3201
+ state="",
3202
+ postal="",
3203
+ lat=35.512389,
3204
+ lng=139.620056,
3205
+ housenumber="",
3206
+ country="Japan",
3207
+ )
3208
+ BELL_CENTRE = SportsballGeocodeTuple(
3209
+ city="Montreal",
3210
+ state="QC",
3211
+ postal="",
3212
+ lat=45.496111,
3213
+ lng=-73.569444,
3214
+ housenumber="1909",
3215
+ country="CA",
3216
+ )
3199
3217
  _CACHED_GEOCODES: dict[str, Any] = {
3200
3218
  "S.C.G. - Australia": SCG,
3201
3219
  "Victoria Park - Australia": SportsballGeocodeTuple(
@@ -7990,15 +8008,7 @@ _CACHED_GEOCODES: dict[str, Any] = {
7990
8008
  "Target Center - Minneapolis, Minnesota - United States": TARGET_CENTER,
7991
8009
  "Thomas & Mack Center - Paradise, NV - United States": THOMAS_AND_MACK_CENTER,
7992
8010
  "Delta Center - Salt Lake City, Utah - United States": DELTA_CENTER,
7993
- "Yokohama Arena": SportsballGeocodeTuple(
7994
- city="Kanagawa",
7995
- state="",
7996
- postal="",
7997
- lat=35.512389,
7998
- lng=139.620056,
7999
- housenumber="",
8000
- country="Japan",
8001
- ),
8011
+ "Yokohama Arena": YOKOHAMA_ARENA,
8002
8012
  "Anaheim Convention Center": ANAHEIM_CONVENTION_CENTER,
8003
8013
  "TD Banknorth Garden": TD_GARDEN,
8004
8014
  "Amway Arena": ORLANDO_ARENA,
@@ -8875,15 +8885,7 @@ _CACHED_GEOCODES: dict[str, Any] = {
8875
8885
  "Climate Pledge Arena - Seattle, Washington - United States": CLIMATE_PLEDGE_ARENA,
8876
8886
  "Wells Fargo Center - Philadelphia, PA - United States": SPECTRUM,
8877
8887
  "State Farm Arena - Atlanta, Georgia - United States": STATE_FARM_ARENA,
8878
- "Bell Centre": SportsballGeocodeTuple(
8879
- city="Montreal",
8880
- state="QC",
8881
- postal="",
8882
- lat=45.496111,
8883
- lng=-73.569444,
8884
- housenumber="1909",
8885
- country="CA",
8886
- ),
8888
+ "Bell Centre": BELL_CENTRE,
8887
8889
  "Footprint Center - Phoenix, Arizona - United States": AMERICA_WEST_ARENA,
8888
8890
  "Smoothie King Center - New Orleans, Louisiana, USA - United States": CAESARS_SUPERDOME,
8889
8891
  "Kaseya Center - Miami, Florida - United States": KASEYA_CENTER,
@@ -15525,6 +15527,10 @@ _CACHED_GEOCODES: dict[str, Any] = {
15525
15527
  housenumber="",
15526
15528
  country="Italy",
15527
15529
  ),
15530
+ "TIO Traeger Park, Alice Springs": TIO_STADIUM,
15531
+ "Hard Rock Stadium, Miami Gardens, FL, USA": HARD_ROCK_STADIUM,
15532
+ "Yokohama Arena - Yokohama, Kanagawa - Japan": YOKOHAMA_ARENA,
15533
+ "Centre Bell - Montreal, Quebec, Canada - Canada": BELL_CENTRE,
15528
15534
  }
15529
15535
 
15530
15536
 
@@ -32,6 +32,8 @@ def _create_hkjc_hkjc_coach_model(
32
32
  age_str = df.iat[1, 0].strip().split(":")[-1].strip().split(",")[0].strip()
33
33
  if "–" in age_str:
34
34
  age_str = age_str.split("–")[-1].strip()
35
+ if "-" in age_str:
36
+ age_str = age_str.split("-")[-1].strip()
35
37
  age = int(age_str)
36
38
 
37
39
  if name is None:
@@ -3,6 +3,7 @@
3
3
  # pylint: disable=too-many-nested-blocks,too-many-statements,too-many-branches,too-many-locals
4
4
  import datetime
5
5
  import io
6
+ import logging
6
7
  import urllib.parse
7
8
  from urllib.parse import urlparse
8
9
 
@@ -36,6 +37,10 @@ def _create_hkjc_hkjc_game_model(
36
37
  div_text = div.get_text().strip()
37
38
  if div_text.lower() == "no information.":
38
39
  return None
40
+ for div in soup.find_all("div"):
41
+ div_text = div.get_text().strip()
42
+ if "this race is declared abandoned" in div_text.lower():
43
+ return None
39
44
 
40
45
  o = urlparse(url)
41
46
  query = urllib.parse.parse_qs(o.query)
@@ -55,7 +60,13 @@ def _create_hkjc_hkjc_game_model(
55
60
  for count, df in enumerate(dfs):
56
61
  if count == 1:
57
62
  race_track = df.iat[2, 2].split("-")[0].strip()
58
- distance = float(df.iat[1, 0].split("-")[1].strip().replace("M", ""))
63
+ distance = 0.0
64
+ try:
65
+ distance = float(df.iat[1, 0].split("-")[1].strip().replace("M", ""))
66
+ except IndexError:
67
+ logging.error(html)
68
+ logging.error(url)
69
+ raise
59
70
  pot = float(df.iat[3, 0].split()[-1].strip().replace(",", ""))
60
71
  elif count == 2:
61
72
  for _, row in df.iterrows():
@@ -80,7 +91,7 @@ def _create_hkjc_hkjc_game_model(
80
91
  if starting_position_str.strip() != "---":
81
92
  starting_position = position_from_str(starting_position_str.strip())
82
93
 
83
- lbw = 0.0
94
+ lbw: float | None = 0.0
84
95
  lbw_str = row["LBW"].strip()
85
96
  if lbw_str == "HD":
86
97
  lbw = 2.4 * 0.2
@@ -88,14 +99,17 @@ def _create_hkjc_hkjc_game_model(
88
99
  lbw = 2.4 * 0.2 * 0.5
89
100
  elif lbw_str in {"NOSE", "N"}:
90
101
  lbw = 2.4 * 0.05
102
+ elif lbw_str == "ML":
103
+ lbw = None
91
104
  elif lbw_str and lbw_str != "-" and lbw_str != "---":
92
- if "-" in lbw_str:
93
- lbw_horses, lbw_str = lbw_str.split("-")
94
- lbw += 2.4 * int(lbw_horses)
95
- if "/" in lbw_str:
96
- lbw += 2.4 * (1.0 / int(lbw_str.split("/")[-1]))
97
- else:
98
- lbw += 2.4 * int(lbw_str)
105
+ if lbw is not None:
106
+ if "-" in lbw_str:
107
+ lbw_horses, lbw_str = lbw_str.split("-")
108
+ lbw += 2.4 * int(lbw_horses)
109
+ if "/" in lbw_str:
110
+ lbw += 2.4 * (1.0 / int(lbw_str.split("/")[-1]))
111
+ else:
112
+ lbw += 2.4 * int(lbw_str)
99
113
 
100
114
  finish_time_str = row["Finish Time"].strip()
101
115
  end_dt = None
@@ -165,6 +179,7 @@ def _create_hkjc_hkjc_game_model(
165
179
  dividend_str = str(row_df.iat[2, 0]).strip().lower()
166
180
  if dividend_str == "details":
167
181
  continue
182
+ dividend_str = dividend_str.split("/", maxsplit=1)[0].replace(",", "")
168
183
  dividend = float(dividend_str)
169
184
 
170
185
  combination = None
@@ -32,6 +32,10 @@ def _create_hkjc_hkjc_player_model(
32
32
  headers = {X_NO_WAYBACK: "1"}
33
33
  response = session.get(url, headers=headers)
34
34
  response.raise_for_status()
35
+
36
+ o = urlparse(url)
37
+ is_sire = o.path.endswith("Horse/SameSire.aspx")
38
+
35
39
  handle = io.StringIO()
36
40
  handle.write(response.text)
37
41
  handle.seek(0)
@@ -40,7 +44,12 @@ def _create_hkjc_hkjc_player_model(
40
44
  dfs = pd.read_html(handle)
41
45
  except AttributeError as exc:
42
46
  logging.warning(str(exc))
43
- o = urlparse(url)
47
+ except ValueError:
48
+ if not is_sire:
49
+ logging.error(response.text)
50
+ logging.error(url)
51
+ raise
52
+
44
53
  soup = BeautifulSoup(response.text, "lxml")
45
54
 
46
55
  name = None
@@ -24,7 +24,7 @@ def _create_hkjc_hkjc_team_model(
24
24
  handicap_weight: float,
25
25
  horse_weight: float | None,
26
26
  starting_position: Position | None,
27
- lbw: float,
27
+ lbw: float | None,
28
28
  end_dt: datetime.datetime | None,
29
29
  odds: list[OddsModel],
30
30
  ) -> TeamModel:
@@ -75,7 +75,7 @@ def _cached_create_hkjc_hkjc_team_model(
75
75
  handicap_weight: float,
76
76
  horse_weight: float | None,
77
77
  starting_position: Position | None,
78
- lbw: float,
78
+ lbw: float | None,
79
79
  end_dt: datetime.datetime | None,
80
80
  odds: list[OddsModel],
81
81
  ) -> TeamModel:
@@ -105,7 +105,7 @@ def create_hkjc_hkjc_team_model(
105
105
  handicap_weight: float,
106
106
  horse_weight: float | None,
107
107
  starting_position: Position | None,
108
- lbw: float,
108
+ lbw: float | None,
109
109
  end_dt: datetime.datetime | None,
110
110
  odds: list[OddsModel],
111
111
  ) -> TeamModel:
@@ -41,6 +41,7 @@ _NON_WAYBACK_URLS: set[str] = {
41
41
  "https://www.sports-reference.com/cbb/schools/rice/women/2019.html",
42
42
  "https://www.sports-reference.com/cbb/schools/north-carolina/women/2018.html",
43
43
  "https://www.sports-reference.com/cbb/schools/minnesota/women/2009.html",
44
+ "https://www.basketball-reference.com/teams/GSW/2016.html",
44
45
  }
45
46
  _BAD_TEAM_URLS = {
46
47
  "https://www.sports-reference.com/cbb/schools/mid-atlantic-christian/2016.html",
@@ -173,10 +174,6 @@ def _create_sportsreference_team_model(
173
174
  if entity_identifier == "coaches":
174
175
  coach_url = a_url
175
176
  break
176
- if coach_url is None:
177
- logging.error(response.text)
178
- logging.error(response.url)
179
- raise ValueError("coach_url is null")
180
177
 
181
178
  o = urlparse(url)
182
179
  sex_id = o.path.split("/")[-2]
@@ -226,7 +223,9 @@ def _create_sportsreference_team_model(
226
223
  location=None,
227
224
  news=create_google_news_models(name, session, dt, league),
228
225
  social=create_x_social_model(name, session, dt),
229
- coaches=[create_sportsreference_coach_model(session, coach_url, dt)],
226
+ coaches=[create_sportsreference_coach_model(session, coach_url, dt)]
227
+ if coach_url is not None
228
+ else [],
230
229
  lbw=None,
231
230
  end_dt=None,
232
231
  )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: sportsball
3
- Version: 0.4.1
3
+ Version: 0.4.3
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
@@ -204,6 +204,7 @@ tests/data/afl/afl/__init__.py
204
204
  tests/data/afl/afl/afl_afl_game_model_test.py
205
205
  tests/data/afl/afl/afl_afl_league_model_test.py
206
206
  tests/data/afl/afltables/__init__.py
207
+ tests/data/afl/afltables/afl_afltables_coach_model_test.py
207
208
  tests/data/afl/afltables/afl_afltables_game_model_test.py
208
209
  tests/data/afl/afltables/afl_afltables_league_model_test.py
209
210
  tests/data/afl/afltables/afl_afltables_player_model_test.py
@@ -222,6 +223,7 @@ tests/data/google/google_news_model_test.py
222
223
  tests/data/hkjc/__init__.py
223
224
  tests/data/hkjc/hkjc/__init__.py
224
225
  tests/data/hkjc/hkjc/hkjc_hkjc_game_model_test.py
226
+ tests/data/hkjc/hkjc/hkjc_hkjc_player_model_test.py
225
227
  tests/data/nba/__init__.py
226
228
  tests/data/nba/nba/__init__.py
227
229
  tests/data/nba/nba/nba_nba_game_model_test.py
@@ -0,0 +1,30 @@
1
+ """Tests for the afltables coach model class."""
2
+ import os
3
+ import unittest
4
+ import datetime
5
+
6
+ import requests_mock
7
+ import requests_cache
8
+ from sportsball.data.afl.afltables.afl_afltables_coach_model import create_afl_afltables_coach_model
9
+
10
+
11
+ class TestAFLTablesCoachModel(unittest.TestCase):
12
+
13
+ def setUp(self):
14
+ self._session = requests_cache.CachedSession(backend="memory")
15
+ self.dir = os.path.dirname(__file__)
16
+
17
+ def test_dt(self):
18
+ with requests_mock.Mocker() as m:
19
+ url = "https://afltables.com/afl/stats/coaches/goldcoast.html"
20
+ with open(os.path.join(self.dir, "coaches_goldcoast.html"), "rb") as f:
21
+ m.get(url, content=f.read())
22
+ with open(os.path.join(self.dir, "Guy_McKenna.html"), "rb") as f:
23
+ m.get("https://afltables.com/afl/stats/coaches/Guy_McKenna.html", content=f.read())
24
+ coach_model = create_afl_afltables_coach_model(
25
+ url=url,
26
+ session=self._session,
27
+ year=2012,
28
+ dt=datetime.datetime(2012, 10, 10),
29
+ )
30
+ self.assertEqual(coach_model.name, "McKenna, Guy")
@@ -126,6 +126,10 @@ class TestAFLTablesGameModel(unittest.TestCase):
126
126
  m.get("https://afltables.com/afl/stats/coaches/John_Worsfold.html", content=f.read())
127
127
  with open(os.path.join(self.dir, "Ross_Lyon.html"), "rb") as f:
128
128
  m.get("https://afltables.com/afl/stats/coaches/Ross_Lyon.html", content=f.read())
129
+ with open(os.path.join(self.dir, "Andrew_McQualter.html"), "rb") as f:
130
+ m.get("https://afltables.com/afl/stats/coaches/Andrew_McQualter.html", content=f.read())
131
+ with open(os.path.join(self.dir, "Justin_Longmuir.html"), "rb") as f:
132
+ m.get("https://afltables.com/afl/stats/coaches/Justin_Longmuir.html", content=f.read())
129
133
  m.get("https://historical-forecast-api.open-meteo.com/v1/forecast?latitude=-31.9511597&longitude=115.884175&start_date=2025-03-29&end_date=2025-03-30&hourly=temperature_2m&hourly=relative_humidity_2m&hourly=dew_point_2m&hourly=apparent_temperature&hourly=precipitation&hourly=rain&hourly=snowfall&hourly=snow_depth&hourly=weather_code&hourly=pressure_msl&hourly=surface_pressure&hourly=cloud_cover&hourly=cloud_cover_low&hourly=cloud_cover_mid&hourly=cloud_cover_high&hourly=et0_fao_evapotranspiration&hourly=vapour_pressure_deficit&hourly=wind_speed_10m&hourly=wind_speed_100m&hourly=wind_direction_10m&hourly=wind_direction_100m&hourly=wind_gusts_10m&hourly=soil_temperature_0_to_7cm&hourly=soil_temperature_7_to_28cm&hourly=soil_temperature_28_to_100cm&hourly=soil_temperature_100_to_255cm&hourly=soil_moisture_0_to_7cm&hourly=soil_moisture_7_to_28cm&hourly=soil_moisture_28_to_100cm&hourly=soil_moisture_100_to_255cm&daily=weather_code&daily=temperature_2m_max&daily=temperature_2m_min&daily=temperature_2m_mean&daily=apparent_temperature_max&daily=apparent_temperature_min&daily=apparent_temperature_mean&daily=sunrise&daily=sunset&daily=daylight_duration&daily=sunshine_duration&daily=precipitation_sum&daily=rain_sum&daily=snowfall_sum&daily=precipitation_hours&daily=wind_speed_10m_max&daily=wind_gusts_10m_max&daily=wind_direction_10m_dominant&daily=shortwave_radiation_sum&daily=et0_fao_evapotranspiration&timezone=Australia%2FPerth&format=flatbuffers")
130
134
 
131
135
  game_model = _create_afl_afltables_game_model(
@@ -118,3 +118,15 @@ class TestHKJCHKJCGameModel(unittest.TestCase):
118
118
  url="https://racing.hkjc.com/racing/information/English/Racing/LocalResults.aspx?RaceDate=2025/05/26&Racecourse=HV&RaceNo=1",
119
119
  )
120
120
  self.assertIsNone(game_model)
121
+
122
+ def test_race_declared_abandoned(self):
123
+ with requests_mock.Mocker() as m:
124
+ html = ""
125
+ with open(os.path.join(self.dir, "game3.html"), "r") as f:
126
+ html = f.read()
127
+ game_model = create_hkjc_hkjc_game_model(
128
+ session=self._session,
129
+ html=html,
130
+ url="https://racing.hkjc.com/racing/information/English/Racing/LocalResults.aspx?RaceDate=2024%2F11%2F13&RaceNo=7&Racecourse=HV",
131
+ )
132
+ self.assertIsNone(game_model)
@@ -0,0 +1,29 @@
1
+ """Tests for the HKJC HKJC player model class."""
2
+ import os
3
+ import unittest
4
+
5
+ import requests_mock
6
+ import requests_cache
7
+ from sportsball.data.hkjc.hkjc.hkjc_hkjc_player_model import create_hkjc_hkjc_player_model
8
+
9
+
10
+ class TestHKJCHKJCPlayerModel(unittest.TestCase):
11
+
12
+ def setUp(self):
13
+ self._session = requests_cache.CachedSession(backend="memory")
14
+ self.dir = os.path.dirname(__file__)
15
+
16
+ def test_no_table_for_sire(self):
17
+ with requests_mock.Mocker() as m:
18
+ url = "https://racing.hkjc.com/racing/information/english/Horse/SameSire.aspx?HorseSire=Nyquist"
19
+ with open(os.path.join(self.dir, "sire_nyquist_2.html"), "rb") as f:
20
+ m.get(url, content=f.read())
21
+ player_model = create_hkjc_hkjc_player_model(
22
+ session=self._session,
23
+ url=url,
24
+ jersey=None,
25
+ handicap_weight=None,
26
+ starting_position=None,
27
+ weight=None,
28
+ )
29
+ self.assertEqual(player_model.name, "Nyquist")
@@ -218,3 +218,27 @@ class TestSportsReferenceTeamModel(unittest.TestCase):
218
218
  {},
219
219
  )
220
220
  self.assertEqual(team_model.name, "Boston Celtics")
221
+
222
+ def test_coach_url_null(self):
223
+ url = "https://www.basketball-reference.com/teams/GSW/2016.html"
224
+ with requests_mock.Mocker() as m:
225
+ with open(os.path.join(self.dir, "GSW_2016_2.html"), "rb") as f:
226
+ m.get(url, content=f.read())
227
+ with open(os.path.join(self.dir, "kerrst01c.html"), "rb") as f:
228
+ m.get("https://www.basketball-reference.com/coaches/kerrst01c.html", content=f.read())
229
+ team_model = create_sportsreference_team_model(
230
+ session=self.session,
231
+ url=url,
232
+ dt=datetime.datetime(2010, 10, 10, 10, 10, 00),
233
+ league=League.NBA,
234
+ player_urls=set(),
235
+ points=10.0,
236
+ fg={},
237
+ fga={},
238
+ offensive_rebounds={},
239
+ assists={},
240
+ turnovers={},
241
+ team_name="",
242
+ positions_validator={},
243
+ )
244
+ self.assertListEqual(team_model.coaches, [])
File without changes
File without changes
File without changes
File without changes
File without changes