sportsball 0.4.6__tar.gz → 0.4.8__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.6/sportsball.egg-info → sportsball-0.4.8}/PKG-INFO +1 -1
  2. {sportsball-0.4.6 → sportsball-0.4.8}/setup.py +1 -1
  3. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/__init__.py +1 -1
  4. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/afl/afltables/afl_afltables_coach_model.py +8 -2
  5. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/espn/espn_game_model.py +1 -1
  6. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/hkjc/hkjc/hkjc_hkjc_game_model.py +40 -11
  7. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/hkjc/hkjc/hkjc_hkjc_player_model.py +13 -3
  8. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/hkjc/hkjc/hkjc_hkjc_team_model.py +28 -19
  9. {sportsball-0.4.6 → sportsball-0.4.8/sportsball.egg-info}/PKG-INFO +1 -1
  10. {sportsball-0.4.6 → sportsball-0.4.8}/tests/data/afl/afltables/afl_afltables_coach_model_test.py +15 -0
  11. {sportsball-0.4.6 → sportsball-0.4.8}/LICENSE +0 -0
  12. {sportsball-0.4.6 → sportsball-0.4.8}/MANIFEST.in +0 -0
  13. {sportsball-0.4.6 → sportsball-0.4.8}/README.md +0 -0
  14. {sportsball-0.4.6 → sportsball-0.4.8}/requirements.txt +0 -0
  15. {sportsball-0.4.6 → sportsball-0.4.8}/setup.cfg +0 -0
  16. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/__main__.py +0 -0
  17. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/args.py +0 -0
  18. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/cache.py +0 -0
  19. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/__init__.py +0 -0
  20. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/address_model.py +0 -0
  21. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/afl/__init__.py +0 -0
  22. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/afl/afl/__init__.py +0 -0
  23. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/afl/afl/afl_afl_bookie_model.py +0 -0
  24. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/afl/afl/afl_afl_game_model.py +0 -0
  25. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/afl/afl/afl_afl_league_model.py +0 -0
  26. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/afl/afl/afl_afl_odds_model.py +0 -0
  27. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/afl/afl/afl_afl_player_model.py +0 -0
  28. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/afl/afl/afl_afl_team_model.py +0 -0
  29. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/afl/afl/afl_afl_venue_model.py +0 -0
  30. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/afl/afltables/__init__.py +0 -0
  31. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/afl/afltables/afl_afltables_game_model.py +0 -0
  32. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/afl/afltables/afl_afltables_league_model.py +0 -0
  33. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/afl/afltables/afl_afltables_player_model.py +0 -0
  34. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/afl/afltables/afl_afltables_team_model.py +0 -0
  35. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/afl/afltables/afl_afltables_venue_model.py +0 -0
  36. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/afl/aussportsbetting/__init__.py +0 -0
  37. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/afl/aussportsbetting/afl_aussportsbetting_league_model.py +0 -0
  38. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/afl/combined/__init__.py +0 -0
  39. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/afl/combined/afl_combined_league_model.py +0 -0
  40. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/afl/espn/__init__.py +0 -0
  41. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/afl/espn/afl_espn_league_model.py +0 -0
  42. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/afl/oddsportal/__init__.py +0 -0
  43. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/afl/oddsportal/afl_oddsportal_league_model.py +0 -0
  44. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/afl/position.py +0 -0
  45. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/aussportsbetting/__init__.py +0 -0
  46. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/aussportsbetting/aussportsbetting_bookie_model.py +0 -0
  47. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/aussportsbetting/aussportsbetting_game_model.py +0 -0
  48. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/aussportsbetting/aussportsbetting_league_model.py +0 -0
  49. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/aussportsbetting/aussportsbetting_odds_model.py +0 -0
  50. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/aussportsbetting/aussportsbetting_team_model.py +0 -0
  51. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/aussportsbetting/aussportsbetting_venue_model.py +0 -0
  52. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/bet.py +0 -0
  53. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/bookie_model.py +0 -0
  54. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/coach_model.py +0 -0
  55. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/combined/__init__.py +0 -0
  56. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/combined/combined_address_model.py +0 -0
  57. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/combined/combined_coach_model.py +0 -0
  58. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/combined/combined_game_model.py +0 -0
  59. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/combined/combined_league_model.py +0 -0
  60. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/combined/combined_player_model.py +0 -0
  61. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/combined/combined_team_model.py +0 -0
  62. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/combined/combined_venue_model.py +0 -0
  63. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/combined/combined_weather_model.py +0 -0
  64. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/combined/null_check.py +0 -0
  65. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/dividend_model.py +0 -0
  66. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/espn/__init__.py +0 -0
  67. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/espn/espn_bookie_model.py +0 -0
  68. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/espn/espn_coach_model.py +0 -0
  69. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/espn/espn_league_model.py +0 -0
  70. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/espn/espn_odds_model.py +0 -0
  71. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/espn/espn_player_model.py +0 -0
  72. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/espn/espn_team_model.py +0 -0
  73. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/espn/espn_venue_model.py +0 -0
  74. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/field_type.py +0 -0
  75. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/game_model.py +0 -0
  76. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/google/__init__.py +0 -0
  77. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/google/google_address_model.py +0 -0
  78. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/google/google_news_model.py +0 -0
  79. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/hkjc/__init__.py +0 -0
  80. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/hkjc/hkjc/__init__.py +0 -0
  81. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/hkjc/hkjc/hkjc_hkjc_bookie_model.py +0 -0
  82. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/hkjc/hkjc/hkjc_hkjc_coach_model.py +0 -0
  83. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/hkjc/hkjc/hkjc_hkjc_dividend_model.py +0 -0
  84. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/hkjc/hkjc/hkjc_hkjc_league_model.py +0 -0
  85. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/hkjc/hkjc/hkjc_hkjc_odds_model.py +0 -0
  86. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/hkjc/hkjc/hkjc_hkjc_owner_model.py +0 -0
  87. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/hkjc/hkjc/hkjc_hkjc_venue_model.py +0 -0
  88. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/hkjc/position.py +0 -0
  89. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/league.py +0 -0
  90. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/league_model.py +0 -0
  91. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/model.py +0 -0
  92. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/nba/__init__.py +0 -0
  93. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/nba/combined/__init__.py +0 -0
  94. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/nba/combined/nba_combined_league_model.py +0 -0
  95. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/nba/espn/__init__.py +0 -0
  96. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/nba/espn/nba_espn_league_model.py +0 -0
  97. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/nba/nba/__init__.py +0 -0
  98. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/nba/nba/nba_nba_game_model.py +0 -0
  99. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/nba/nba/nba_nba_league_model.py +0 -0
  100. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/nba/nba/nba_nba_team_model.py +0 -0
  101. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/nba/nbacom/__init__.py +0 -0
  102. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/nba/nbacom/nba_nbacom_game_model.py +0 -0
  103. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/nba/nbacom/nba_nbacom_league_model.py +0 -0
  104. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/nba/nbacom/nba_nbacom_player_model.py +0 -0
  105. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/nba/nbacom/nba_nbacom_team_model.py +0 -0
  106. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/nba/nbacom/nba_nbacom_venue_model.py +0 -0
  107. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/nba/oddsportal/__init__.py +0 -0
  108. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/nba/oddsportal/nba_oddsportal_league_model.py +0 -0
  109. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/nba/position.py +0 -0
  110. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/nba/sportsdb/__init__.py +0 -0
  111. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/nba/sportsdb/nba_sportsdb_league_model.py +0 -0
  112. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/nba/sportsreference/__init__.py +0 -0
  113. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/nba/sportsreference/nba_sportsreference_league_model.py +0 -0
  114. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/ncaab/__init__.py +0 -0
  115. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/ncaab/combined/__init__.py +0 -0
  116. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/ncaab/combined/ncaab_combined_league_model.py +0 -0
  117. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/ncaab/espn/__init__.py +0 -0
  118. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/ncaab/espn/ncaab_espn_league_model.py +0 -0
  119. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/ncaab/oddsportal/__init__.py +0 -0
  120. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/ncaab/oddsportal/ncaab_oddsportal_league_model.py +0 -0
  121. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/ncaab/sportsreference/__init__.py +0 -0
  122. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/ncaab/sportsreference/ncaab_sportsreference_league_model.py +0 -0
  123. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/ncaaf/__init__.py +0 -0
  124. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/ncaaf/combined/__init__.py +0 -0
  125. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/ncaaf/combined/ncaaf_combined_league_model.py +0 -0
  126. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/ncaaf/espn/__init__.py +0 -0
  127. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/ncaaf/espn/ncaaf_espn_league_model.py +0 -0
  128. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/ncaaf/oddsportal/__init__.py +0 -0
  129. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/ncaaf/oddsportal/ncaaf_oddsportal_league_model.py +0 -0
  130. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/news_model.py +0 -0
  131. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/nfl/__init__.py +0 -0
  132. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/nfl/aussportsbetting/__init__.py +0 -0
  133. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/nfl/aussportsbetting/nfl_aussportsbetting_league_model.py +0 -0
  134. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/nfl/combined/__init__.py +0 -0
  135. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/nfl/combined/nfl_combined_league_model.py +0 -0
  136. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/nfl/espn/__init__.py +0 -0
  137. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/nfl/espn/nfl_espn_league_model.py +0 -0
  138. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/nfl/oddsportal/__init__.py +0 -0
  139. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/nfl/oddsportal/nfl_oddsportal_league_model.py +0 -0
  140. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/nfl/position.py +0 -0
  141. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/nfl/sportsdb/__init__.py +0 -0
  142. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/nfl/sportsdb/nfl_sportsdb_league_model.py +0 -0
  143. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/odds_model.py +0 -0
  144. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/oddsportal/__init__.py +0 -0
  145. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/oddsportal/decrypt.py +0 -0
  146. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/oddsportal/oddsportal_bookie_model.py +0 -0
  147. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/oddsportal/oddsportal_game_model.py +0 -0
  148. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/oddsportal/oddsportal_league_model.py +0 -0
  149. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/oddsportal/oddsportal_odds_model.py +0 -0
  150. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/oddsportal/oddsportal_team_model.py +0 -0
  151. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/oddsportal/oddsportal_venue_model.py +0 -0
  152. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/owner_model.py +0 -0
  153. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/player_model.py +0 -0
  154. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/season_type.py +0 -0
  155. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/sex.py +0 -0
  156. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/social_model.py +0 -0
  157. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/species.py +0 -0
  158. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/sportsdb/__init__.py +0 -0
  159. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/sportsdb/sportsdb_game_model.py +0 -0
  160. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/sportsdb/sportsdb_league_model.py +0 -0
  161. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/sportsdb/sportsdb_team_model.py +0 -0
  162. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/sportsdb/sportsdb_venue_model.py +0 -0
  163. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/sportsreference/__init__.py +0 -0
  164. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/sportsreference/sportsreference_coach_model.py +0 -0
  165. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/sportsreference/sportsreference_game_model.py +0 -0
  166. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/sportsreference/sportsreference_league_model.py +0 -0
  167. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/sportsreference/sportsreference_player_model.py +0 -0
  168. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/sportsreference/sportsreference_team_model.py +0 -0
  169. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/sportsreference/sportsreference_venue_model.py +0 -0
  170. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/team_model.py +0 -0
  171. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/venue_model.py +0 -0
  172. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/weather/__init__.py +0 -0
  173. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/weather/gribstream/__init__.py +0 -0
  174. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/weather/gribstream/gribstream_weather_model.py +0 -0
  175. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/weather/multi_weather_model.py +0 -0
  176. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/weather/openmeteo/__init__.py +0 -0
  177. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/weather/openmeteo/openmeteo_weather_model.py +0 -0
  178. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/weather_model.py +0 -0
  179. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/wikipedia/__init__.py +0 -0
  180. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/wikipedia/wikipedia_venue_model.py +0 -0
  181. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/x/__init__.py +0 -0
  182. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/data/x/x_social_model.py +0 -0
  183. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/logger.py +0 -0
  184. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/loglevel.py +0 -0
  185. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/playwright.py +0 -0
  186. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/proxy_session.py +0 -0
  187. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/session.py +0 -0
  188. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/sportsball.py +0 -0
  189. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/vendor/__init__.py +0 -0
  190. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball/vendor/pygooglenews/__init__.py +0 -0
  191. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball.egg-info/SOURCES.txt +0 -0
  192. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball.egg-info/dependency_links.txt +0 -0
  193. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball.egg-info/entry_points.txt +0 -0
  194. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball.egg-info/not-zip-safe +0 -0
  195. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball.egg-info/requires.txt +0 -0
  196. {sportsball-0.4.6 → sportsball-0.4.8}/sportsball.egg-info/top_level.txt +0 -0
  197. {sportsball-0.4.6 → sportsball-0.4.8}/tests/__init__.py +0 -0
  198. {sportsball-0.4.6 → sportsball-0.4.8}/tests/data/__init__.py +0 -0
  199. {sportsball-0.4.6 → sportsball-0.4.8}/tests/data/afl/__init__.py +0 -0
  200. {sportsball-0.4.6 → sportsball-0.4.8}/tests/data/afl/afl/__init__.py +0 -0
  201. {sportsball-0.4.6 → sportsball-0.4.8}/tests/data/afl/afl/afl_afl_game_model_test.py +0 -0
  202. {sportsball-0.4.6 → sportsball-0.4.8}/tests/data/afl/afl/afl_afl_league_model_test.py +0 -0
  203. {sportsball-0.4.6 → sportsball-0.4.8}/tests/data/afl/afltables/__init__.py +0 -0
  204. {sportsball-0.4.6 → sportsball-0.4.8}/tests/data/afl/afltables/afl_afltables_game_model_test.py +0 -0
  205. {sportsball-0.4.6 → sportsball-0.4.8}/tests/data/afl/afltables/afl_afltables_league_model_test.py +0 -0
  206. {sportsball-0.4.6 → sportsball-0.4.8}/tests/data/afl/afltables/afl_afltables_player_model_test.py +0 -0
  207. {sportsball-0.4.6 → sportsball-0.4.8}/tests/data/aussportsbetting/__init__.py +0 -0
  208. {sportsball-0.4.6 → sportsball-0.4.8}/tests/data/aussportsbetting/aussportsbetting_game_model_test.py +0 -0
  209. {sportsball-0.4.6 → sportsball-0.4.8}/tests/data/combined/__init__.py +0 -0
  210. {sportsball-0.4.6 → sportsball-0.4.8}/tests/data/combined/combined_game_model_test.py +0 -0
  211. {sportsball-0.4.6 → sportsball-0.4.8}/tests/data/combined/combined_player_model_test.py +0 -0
  212. {sportsball-0.4.6 → sportsball-0.4.8}/tests/data/combined/combined_team_model_test.py +0 -0
  213. {sportsball-0.4.6 → sportsball-0.4.8}/tests/data/espn/__init__.py +0 -0
  214. {sportsball-0.4.6 → sportsball-0.4.8}/tests/data/espn/espn_game_model_test.py +0 -0
  215. {sportsball-0.4.6 → sportsball-0.4.8}/tests/data/espn/espn_player_model_test.py +0 -0
  216. {sportsball-0.4.6 → sportsball-0.4.8}/tests/data/game_model_test.py +0 -0
  217. {sportsball-0.4.6 → sportsball-0.4.8}/tests/data/google/__init__.py +0 -0
  218. {sportsball-0.4.6 → sportsball-0.4.8}/tests/data/google/google_address_model_test.py +0 -0
  219. {sportsball-0.4.6 → sportsball-0.4.8}/tests/data/google/google_news_model_test.py +0 -0
  220. {sportsball-0.4.6 → sportsball-0.4.8}/tests/data/hkjc/__init__.py +0 -0
  221. {sportsball-0.4.6 → sportsball-0.4.8}/tests/data/hkjc/hkjc/__init__.py +0 -0
  222. {sportsball-0.4.6 → sportsball-0.4.8}/tests/data/hkjc/hkjc/hkjc_hkjc_game_model_test.py +0 -0
  223. {sportsball-0.4.6 → sportsball-0.4.8}/tests/data/hkjc/hkjc/hkjc_hkjc_player_model_test.py +0 -0
  224. {sportsball-0.4.6 → sportsball-0.4.8}/tests/data/nba/__init__.py +0 -0
  225. {sportsball-0.4.6 → sportsball-0.4.8}/tests/data/nba/nba/__init__.py +0 -0
  226. {sportsball-0.4.6 → sportsball-0.4.8}/tests/data/nba/nba/nba_nba_game_model_test.py +0 -0
  227. {sportsball-0.4.6 → sportsball-0.4.8}/tests/data/nba/nba/nba_nba_league_model_test.py +0 -0
  228. {sportsball-0.4.6 → sportsball-0.4.8}/tests/data/nba/nba/nba_nba_team_model_test.py +0 -0
  229. {sportsball-0.4.6 → sportsball-0.4.8}/tests/data/nba/sportsdb/__init__.py +0 -0
  230. {sportsball-0.4.6 → sportsball-0.4.8}/tests/data/nba/sportsdb/nba_sportsdb_league_model_test.py +0 -0
  231. {sportsball-0.4.6 → sportsball-0.4.8}/tests/data/nba/sportsreference/__init__.py +0 -0
  232. {sportsball-0.4.6 → sportsball-0.4.8}/tests/data/nba/sportsreference/nba_sportsreference_league_model_test.py +0 -0
  233. {sportsball-0.4.6 → sportsball-0.4.8}/tests/data/ncaab/__init__.py +0 -0
  234. {sportsball-0.4.6 → sportsball-0.4.8}/tests/data/ncaab/sportsreference/__init__.py +0 -0
  235. {sportsball-0.4.6 → sportsball-0.4.8}/tests/data/ncaab/sportsreference/ncaab_sportsreference_league_model_test.py +0 -0
  236. {sportsball-0.4.6 → sportsball-0.4.8}/tests/data/nfl/__init__.py +0 -0
  237. {sportsball-0.4.6 → sportsball-0.4.8}/tests/data/nfl/sportsdb/__init__.py +0 -0
  238. {sportsball-0.4.6 → sportsball-0.4.8}/tests/data/nfl/sportsdb/nfl_sportsdb_league_model_test.py +0 -0
  239. {sportsball-0.4.6 → sportsball-0.4.8}/tests/data/oddsportal/__init__.py +0 -0
  240. {sportsball-0.4.6 → sportsball-0.4.8}/tests/data/oddsportal/decrypt_test.py +0 -0
  241. {sportsball-0.4.6 → sportsball-0.4.8}/tests/data/oddsportal/oddsportal_game_model_test.py +0 -0
  242. {sportsball-0.4.6 → sportsball-0.4.8}/tests/data/oddsportal/oddsportal_league_model_test.py +0 -0
  243. {sportsball-0.4.6 → sportsball-0.4.8}/tests/data/player_model_test.py +0 -0
  244. {sportsball-0.4.6 → sportsball-0.4.8}/tests/data/social_model_test.py +0 -0
  245. {sportsball-0.4.6 → sportsball-0.4.8}/tests/data/sportsdb/__init__.py +0 -0
  246. {sportsball-0.4.6 → sportsball-0.4.8}/tests/data/sportsdb/sportsdb_game_model_test.py +0 -0
  247. {sportsball-0.4.6 → sportsball-0.4.8}/tests/data/sportsdb/sportsdb_league_model_test.py +0 -0
  248. {sportsball-0.4.6 → sportsball-0.4.8}/tests/data/sportsdb/sportsdb_team_model_test.py +0 -0
  249. {sportsball-0.4.6 → sportsball-0.4.8}/tests/data/sportsdb/sportsdb_venue_model_test.py +0 -0
  250. {sportsball-0.4.6 → sportsball-0.4.8}/tests/data/sportsreference/__init__.py +0 -0
  251. {sportsball-0.4.6 → sportsball-0.4.8}/tests/data/sportsreference/sportsreference_coach_model_test.py +0 -0
  252. {sportsball-0.4.6 → sportsball-0.4.8}/tests/data/sportsreference/sportsreference_game_model_test.py +0 -0
  253. {sportsball-0.4.6 → sportsball-0.4.8}/tests/data/sportsreference/sportsreference_league_model_test.py +0 -0
  254. {sportsball-0.4.6 → sportsball-0.4.8}/tests/data/sportsreference/sportsreference_player_model_test.py +0 -0
  255. {sportsball-0.4.6 → sportsball-0.4.8}/tests/data/sportsreference/sportsreference_team_model_test.py +0 -0
  256. {sportsball-0.4.6 → sportsball-0.4.8}/tests/data/sportsreference/sportsreference_venue_model_test.py +0 -0
  257. {sportsball-0.4.6 → sportsball-0.4.8}/tests/data/team_model_test.py +0 -0
  258. {sportsball-0.4.6 → sportsball-0.4.8}/tests/data/x/__init__.py +0 -0
  259. {sportsball-0.4.6 → sportsball-0.4.8}/tests/data/x/x_social_model_test.py +0 -0
  260. {sportsball-0.4.6 → sportsball-0.4.8}/tests/proxy_session_test.py +0 -0
  261. {sportsball-0.4.6 → sportsball-0.4.8}/tests/sportsball_test.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: sportsball
3
- Version: 0.4.6
3
+ Version: 0.4.8
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.6',
29
+ version='0.4.8',
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.6"
7
+ __VERSION__ = "0.4.8"
@@ -3,6 +3,7 @@
3
3
  # pylint: disable=too-many-locals
4
4
  import datetime
5
5
  import io
6
+ import logging
6
7
  import os
7
8
  import urllib.parse
8
9
  from urllib.parse import urlparse
@@ -71,13 +72,18 @@ def _create_afl_afltables_coach_model(
71
72
  response = session.get(coach_url)
72
73
  response.raise_for_status()
73
74
  soup = BeautifulSoup(response.text, "lxml")
74
- birth_date = parse(soup.get_text().split("Born:")[1].strip().split()[0])
75
+
76
+ birth_date = None
77
+ try:
78
+ birth_date = parse(soup.get_text().split("Born:")[1].strip().split()[0])
79
+ except IndexError:
80
+ logging.warning("Failed to find birth date from %s", response.url)
75
81
 
76
82
  return CoachModel(
77
83
  identifier=identifier,
78
84
  name=name,
79
85
  birth_date=birth_date,
80
- age=relativedelta(birth_date, dt).years,
86
+ age=relativedelta(birth_date, dt).years if birth_date is not None else None,
81
87
  )
82
88
 
83
89
 
@@ -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().date() - datetime.timedelta(days=7)
201
+ and dt.date() < datetime.datetime.now().date() - datetime.timedelta(days=7)
202
202
  ):
203
203
  return _cached_create_espn_game_model(
204
204
  event,
@@ -41,6 +41,12 @@ def _create_hkjc_hkjc_game_model(
41
41
  div_text = div.get_text().strip()
42
42
  if "this race is declared abandoned" in div_text.lower():
43
43
  return None
44
+ if "this race is declared void" in div_text.lower():
45
+ return None
46
+ if "information will be released shortly" in div_text.lower():
47
+ return None
48
+ if "unofficial dividends" in div_text.lower():
49
+ return None
44
50
 
45
51
  o = urlparse(url)
46
52
  query = urllib.parse.parse_qs(o.query)
@@ -59,7 +65,13 @@ def _create_hkjc_hkjc_game_model(
59
65
  dividends = []
60
66
  for count, df in enumerate(dfs):
61
67
  if count == 1:
62
- race_track = df.iat[2, 2].split("-")[0].strip()
68
+ race_track = ""
69
+ try:
70
+ race_track = df.iat[2, 2].split("-")[0].strip()
71
+ except IndexError:
72
+ logging.error(url)
73
+ raise
74
+
63
75
  distance = 0.0
64
76
  try:
65
77
  distance = float(df.iat[1, 0].split("-")[1].strip().replace("M", ""))
@@ -72,7 +84,12 @@ def _create_hkjc_hkjc_game_model(
72
84
  for _, row in df.iterrows():
73
85
  horse_name = row["Horse"].split("(")[0].strip()
74
86
  jockey_name = row["Jockey"].split("(")[0].strip()
75
- trainer_name = row["Trainer"].split("(")[0].strip()
87
+
88
+ trainer_name = None
89
+ try:
90
+ trainer_name = row["Trainer"].split("(")[0].strip()
91
+ except KeyError:
92
+ logging.warning("Failed to find trainer name for %s", url)
76
93
 
77
94
  place_str = str(row["Pla."]).strip()
78
95
  place = None
@@ -81,10 +98,19 @@ def _create_hkjc_hkjc_game_model(
81
98
 
82
99
  jersey = str(row["Horse No."])
83
100
 
84
- handicap_weight = float(row["Act. Wt."]) * 0.453592
101
+ handicap_weight = None
102
+ try:
103
+ handicap_weight = float(row["Act. Wt."]) * 0.453592
104
+ except KeyError:
105
+ logging.warning("Failed to find handicap weight for %s", url)
106
+
85
107
  horse_weight = None
86
- if row["Declar. Horse Wt."] != "---":
87
- horse_weight = float(row["Declar. Horse Wt."]) * 0.453592
108
+ try:
109
+ horse_weight_str = row["Declar. Horse Wt."]
110
+ if horse_weight_str != "---":
111
+ horse_weight = float(horse_weight_str) * 0.453592
112
+ except KeyError:
113
+ logging.warning("Failed to find horse weight for %s", url)
88
114
 
89
115
  starting_position = None
90
116
  starting_position_str = str(row["Dr."]).strip()
@@ -141,7 +167,7 @@ def _create_hkjc_hkjc_game_model(
141
167
  o = urlparse(a_url)
142
168
  if o.path.endswith("/Jockey/JockeyProfile.aspx"):
143
169
  jockey_url = a_url
144
- elif a_text == trainer_name:
170
+ elif trainer_name is not None and a_text == trainer_name:
145
171
  a_url = urllib.parse.urljoin(url, a.get("href"))
146
172
  o = urlparse(a_url)
147
173
  if o.path.endswith("/Trainers/TrainerProfile.aspx"):
@@ -149,10 +175,6 @@ def _create_hkjc_hkjc_game_model(
149
175
 
150
176
  if place is None:
151
177
  continue
152
- if trainer_url is None:
153
- raise ValueError("trainer_url is null")
154
- if jockey_url is None:
155
- raise ValueError("jockey_url is null")
156
178
  if horse_url is None:
157
179
  raise ValueError("horse_url is null")
158
180
 
@@ -179,6 +201,12 @@ def _create_hkjc_hkjc_game_model(
179
201
  dividend_str = str(row_df.iat[2, 0]).strip().lower()
180
202
  if dividend_str == "details":
181
203
  continue
204
+ if dividend_str == "refund":
205
+ continue
206
+ if dividend_str == "not win":
207
+ continue
208
+ if dividend_str == "detail":
209
+ continue
182
210
  dividend_str = dividend_str.split("/", maxsplit=1)[0].replace(",", "")
183
211
  dividend = float(dividend_str)
184
212
 
@@ -198,7 +226,7 @@ def _create_hkjc_hkjc_game_model(
198
226
  next_td = False
199
227
 
200
228
  if combination is None:
201
- raise ValueError("combination is null")
229
+ continue
202
230
 
203
231
  dividend_model = create_hkjc_hkjc_dividend_model(
204
232
  pool=pool,
@@ -209,6 +237,7 @@ def _create_hkjc_hkjc_game_model(
209
237
  dividends.append(dividend_model)
210
238
 
211
239
  if race_track is None:
240
+ logging.error(url)
212
241
  raise ValueError("race_track is null")
213
242
 
214
243
  return GameModel(
@@ -28,7 +28,7 @@ def _create_hkjc_hkjc_player_model(
28
28
  handicap_weight: float | None,
29
29
  starting_position: Position | None,
30
30
  weight: float | None,
31
- ) -> PlayerModel:
31
+ ) -> PlayerModel | None:
32
32
  headers = {X_NO_WAYBACK: "1"}
33
33
  response = session.get(url, headers=headers)
34
34
  response.raise_for_status()
@@ -51,6 +51,12 @@ def _create_hkjc_hkjc_player_model(
51
51
  raise
52
52
 
53
53
  soup = BeautifulSoup(response.text, "lxml")
54
+ for noscript in soup.find_all("noscript"):
55
+ no_script_text = noscript.get_text().strip().lower()
56
+ if "javascript must be enabled in order to view this page." in no_script_text:
57
+ logging.error("Javascript error on %s", url)
58
+ session.cache.delete(urls=[url, response.url])
59
+ return None
54
60
 
55
61
  name = None
56
62
  species = Species.HUMAN
@@ -114,6 +120,10 @@ def _create_hkjc_hkjc_player_model(
114
120
  name = query["HorseSire"][0]
115
121
 
116
122
  if name is None:
123
+ logging.error(response.text)
124
+ logging.error(dfs)
125
+ logging.error(o.path)
126
+ logging.error(url)
117
127
  raise ValueError("name is null")
118
128
 
119
129
  return PlayerModel(
@@ -173,7 +183,7 @@ def _cached_create_hkjc_hkjc_player_model(
173
183
  handicap_weight: float | None,
174
184
  starting_position: Position | None,
175
185
  weight: float | None,
176
- ) -> PlayerModel:
186
+ ) -> PlayerModel | None:
177
187
  return _create_hkjc_hkjc_player_model(
178
188
  session=session,
179
189
  url=url,
@@ -191,7 +201,7 @@ def create_hkjc_hkjc_player_model(
191
201
  handicap_weight: float | None,
192
202
  starting_position: Position | None,
193
203
  weight: float | None,
194
- ) -> PlayerModel:
204
+ ) -> PlayerModel | None:
195
205
  """Create a player model based off HKJC."""
196
206
  if not pytest_is_running.is_running():
197
207
  return _cached_create_hkjc_hkjc_player_model(
@@ -17,17 +17,18 @@ from .hkjc_hkjc_player_model import create_hkjc_hkjc_player_model
17
17
  def _create_hkjc_hkjc_team_model(
18
18
  session: requests_cache.CachedSession,
19
19
  horse_url: str,
20
- jockey_url: str,
21
- trainer_url: str,
20
+ jockey_url: str | None,
21
+ trainer_url: str | None,
22
22
  points: float,
23
23
  jersey: str,
24
- handicap_weight: float,
24
+ handicap_weight: float | None,
25
25
  horse_weight: float | None,
26
26
  starting_position: Position | None,
27
27
  lbw: float | None,
28
28
  end_dt: datetime.datetime | None,
29
29
  odds: list[OddsModel],
30
30
  ) -> TeamModel:
31
+ players = []
31
32
  horse_player = create_hkjc_hkjc_player_model(
32
33
  session=session,
33
34
  url=horse_url,
@@ -36,16 +37,24 @@ def _create_hkjc_hkjc_team_model(
36
37
  starting_position=starting_position,
37
38
  weight=horse_weight,
38
39
  )
39
- jockey_player = create_hkjc_hkjc_player_model(
40
- session=session,
41
- url=jockey_url,
42
- jersey=jersey,
43
- handicap_weight=None,
44
- starting_position=starting_position,
45
- weight=None,
40
+ if horse_player is not None:
41
+ players.append(horse_player)
42
+ if jockey_url is not None:
43
+ jockey_player = create_hkjc_hkjc_player_model(
44
+ session=session,
45
+ url=jockey_url,
46
+ jersey=jersey,
47
+ handicap_weight=None,
48
+ starting_position=starting_position,
49
+ weight=None,
50
+ )
51
+ if jockey_player is not None:
52
+ players.append(jockey_player)
53
+ coaches = (
54
+ [create_hkjc_hkjc_coach_model(session=session, url=trainer_url)]
55
+ if trainer_url is not None
56
+ else []
46
57
  )
47
- players = [horse_player, jockey_player]
48
- coach = create_hkjc_hkjc_coach_model(session=session, url=trainer_url)
49
58
  name = " - ".join([x.name for x in players])
50
59
  return TeamModel(
51
60
  identifier=name,
@@ -58,7 +67,7 @@ def _create_hkjc_hkjc_team_model(
58
67
  news=[],
59
68
  social=[],
60
69
  field_goals=None,
61
- coaches=[coach],
70
+ coaches=coaches,
62
71
  lbw=lbw,
63
72
  end_dt=end_dt,
64
73
  )
@@ -68,11 +77,11 @@ def _create_hkjc_hkjc_team_model(
68
77
  def _cached_create_hkjc_hkjc_team_model(
69
78
  session: requests_cache.CachedSession,
70
79
  horse_url: str,
71
- jockey_url: str,
72
- trainer_url: str,
80
+ jockey_url: str | None,
81
+ trainer_url: str | None,
73
82
  points: float,
74
83
  jersey: str,
75
- handicap_weight: float,
84
+ handicap_weight: float | None,
76
85
  horse_weight: float | None,
77
86
  starting_position: Position | None,
78
87
  lbw: float | None,
@@ -98,11 +107,11 @@ def _cached_create_hkjc_hkjc_team_model(
98
107
  def create_hkjc_hkjc_team_model(
99
108
  session: requests_cache.CachedSession,
100
109
  horse_url: str,
101
- jockey_url: str,
102
- trainer_url: str,
110
+ jockey_url: str | None,
111
+ trainer_url: str | None,
103
112
  points: float,
104
113
  jersey: str,
105
- handicap_weight: float,
114
+ handicap_weight: float | None,
106
115
  horse_weight: float | None,
107
116
  starting_position: Position | None,
108
117
  lbw: float | None,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: sportsball
3
- Version: 0.4.6
3
+ Version: 0.4.8
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
@@ -54,3 +54,18 @@ class TestAFLTablesCoachModel(unittest.TestCase):
54
54
  dt=datetime.datetime(2012, 10, 10),
55
55
  )
56
56
  self.assertIsNone(coach_model)
57
+
58
+ def test_no_birth_date(self):
59
+ with requests_mock.Mocker() as m:
60
+ url = "https://afltables.com/afl/stats/coaches/geelong.html"
61
+ with open(os.path.join(self.dir, "coaches_geelong.html"), "rb") as f:
62
+ m.get(url, content=f.read())
63
+ with open(os.path.join(self.dir, "Dave_Hickinbotham.html"), "rb") as f:
64
+ m.get("https://afltables.com/afl/stats/coaches/Dave_Hickinbotham.html", content=f.read())
65
+ coach_model = create_afl_afltables_coach_model(
66
+ url=url,
67
+ session=self._session,
68
+ year=1910,
69
+ dt=datetime.datetime(2012, 10, 10),
70
+ )
71
+ self.assertIsNone(coach_model.birth_date)
File without changes
File without changes
File without changes
File without changes
File without changes