sportsball 0.4.12__tar.gz → 0.4.14__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 (263) hide show
  1. {sportsball-0.4.12/sportsball.egg-info → sportsball-0.4.14}/PKG-INFO +1 -1
  2. {sportsball-0.4.12 → sportsball-0.4.14}/setup.py +1 -1
  3. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/__init__.py +1 -1
  4. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/afl/afl/afl_afl_league_model.py +5 -7
  5. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/afl/afltables/afl_afltables_league_model.py +2 -4
  6. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/afl/aussportsbetting/afl_aussportsbetting_league_model.py +2 -5
  7. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/afl/combined/afl_combined_league_model.py +2 -5
  8. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/afl/espn/afl_espn_league_model.py +2 -5
  9. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/afl/oddsportal/afl_oddsportal_league_model.py +2 -5
  10. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/aussportsbetting/aussportsbetting_league_model.py +2 -2
  11. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/combined/combined_league_model.py +2 -3
  12. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/espn/espn_league_model.py +2 -2
  13. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/espn/espn_player_model.py +1 -2
  14. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/google/google_address_model.py +19 -0
  15. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/hkjc/hkjc/hkjc_hkjc_coach_model.py +6 -7
  16. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/hkjc/hkjc/hkjc_hkjc_game_model.py +4 -4
  17. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/hkjc/hkjc/hkjc_hkjc_league_model.py +8 -10
  18. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/hkjc/hkjc/hkjc_hkjc_player_model.py +10 -11
  19. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/hkjc/hkjc/hkjc_hkjc_team_model.py +4 -4
  20. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/league_model.py +2 -2
  21. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/model.py +4 -5
  22. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/nba/combined/nba_combined_league_model.py +2 -5
  23. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/nba/espn/nba_espn_league_model.py +2 -5
  24. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/nba/nba/nba_nba_league_model.py +2 -4
  25. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/nba/nbacom/nba_nbacom_league_model.py +2 -5
  26. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/nba/oddsportal/nba_oddsportal_league_model.py +2 -5
  27. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/nba/sportsdb/nba_sportsdb_league_model.py +2 -5
  28. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/nba/sportsreference/nba_sportsreference_league_model.py +2 -5
  29. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/ncaab/combined/ncaab_combined_league_model.py +2 -5
  30. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/ncaab/espn/ncaab_espn_league_model.py +2 -4
  31. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/ncaab/oddsportal/ncaab_oddsportal_league_model.py +2 -5
  32. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/ncaab/sportsreference/ncaab_sportsreference_league_model.py +2 -5
  33. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/ncaaf/combined/ncaaf_combined_league_model.py +2 -5
  34. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/ncaaf/espn/ncaaf_espn_league_model.py +2 -5
  35. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/ncaaf/oddsportal/ncaaf_oddsportal_league_model.py +2 -5
  36. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/nfl/aussportsbetting/nfl_aussportsbetting_league_model.py +2 -5
  37. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/nfl/combined/nfl_combined_league_model.py +2 -5
  38. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/nfl/espn/nfl_espn_league_model.py +2 -5
  39. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/nfl/oddsportal/nfl_oddsportal_league_model.py +2 -5
  40. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/nfl/sportsdb/nfl_sportsdb_league_model.py +2 -5
  41. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/oddsportal/decrypt.py +6 -6
  42. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/oddsportal/oddsportal_game_model.py +8 -11
  43. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/oddsportal/oddsportal_league_model.py +6 -5
  44. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/sportsdb/sportsdb_league_model.py +2 -2
  45. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/sportsreference/sportsreference_coach_model.py +9 -8
  46. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/sportsreference/sportsreference_game_model.py +8 -8
  47. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/sportsreference/sportsreference_league_model.py +2 -2
  48. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/sportsreference/sportsreference_team_model.py +11 -9
  49. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/proxy_session.py +13 -5
  50. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/sportsball.py +2 -3
  51. {sportsball-0.4.12 → sportsball-0.4.14/sportsball.egg-info}/PKG-INFO +1 -1
  52. {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/espn/espn_player_model_test.py +41 -0
  53. {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/hkjc/hkjc/hkjc_hkjc_game_model_test.py +3 -1
  54. {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/hkjc/hkjc/hkjc_hkjc_player_model_test.py +18 -2
  55. sportsball-0.4.14/tests/data/oddsportal/decrypt_test.py +29 -0
  56. {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/oddsportal/oddsportal_game_model_test.py +2 -1
  57. {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/sportsreference/sportsreference_team_model_test.py +3 -2
  58. sportsball-0.4.12/tests/data/oddsportal/decrypt_test.py +0 -28
  59. {sportsball-0.4.12 → sportsball-0.4.14}/LICENSE +0 -0
  60. {sportsball-0.4.12 → sportsball-0.4.14}/MANIFEST.in +0 -0
  61. {sportsball-0.4.12 → sportsball-0.4.14}/README.md +0 -0
  62. {sportsball-0.4.12 → sportsball-0.4.14}/requirements.txt +0 -0
  63. {sportsball-0.4.12 → sportsball-0.4.14}/setup.cfg +0 -0
  64. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/__main__.py +0 -0
  65. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/args.py +0 -0
  66. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/cache.py +0 -0
  67. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/__init__.py +0 -0
  68. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/address_model.py +0 -0
  69. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/afl/__init__.py +0 -0
  70. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/afl/afl/__init__.py +0 -0
  71. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/afl/afl/afl_afl_bookie_model.py +0 -0
  72. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/afl/afl/afl_afl_game_model.py +0 -0
  73. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/afl/afl/afl_afl_odds_model.py +0 -0
  74. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/afl/afl/afl_afl_player_model.py +0 -0
  75. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/afl/afl/afl_afl_team_model.py +0 -0
  76. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/afl/afl/afl_afl_venue_model.py +0 -0
  77. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/afl/afltables/__init__.py +0 -0
  78. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/afl/afltables/afl_afltables_coach_model.py +0 -0
  79. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/afl/afltables/afl_afltables_game_model.py +0 -0
  80. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/afl/afltables/afl_afltables_player_model.py +0 -0
  81. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/afl/afltables/afl_afltables_team_model.py +0 -0
  82. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/afl/afltables/afl_afltables_venue_model.py +0 -0
  83. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/afl/aussportsbetting/__init__.py +0 -0
  84. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/afl/combined/__init__.py +0 -0
  85. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/afl/espn/__init__.py +0 -0
  86. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/afl/oddsportal/__init__.py +0 -0
  87. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/afl/position.py +0 -0
  88. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/aussportsbetting/__init__.py +0 -0
  89. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/aussportsbetting/aussportsbetting_bookie_model.py +0 -0
  90. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/aussportsbetting/aussportsbetting_game_model.py +0 -0
  91. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/aussportsbetting/aussportsbetting_odds_model.py +0 -0
  92. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/aussportsbetting/aussportsbetting_team_model.py +0 -0
  93. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/aussportsbetting/aussportsbetting_venue_model.py +0 -0
  94. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/bet.py +0 -0
  95. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/bookie_model.py +0 -0
  96. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/coach_model.py +0 -0
  97. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/combined/__init__.py +0 -0
  98. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/combined/combined_address_model.py +0 -0
  99. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/combined/combined_coach_model.py +0 -0
  100. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/combined/combined_game_model.py +0 -0
  101. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/combined/combined_player_model.py +0 -0
  102. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/combined/combined_team_model.py +0 -0
  103. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/combined/combined_venue_model.py +0 -0
  104. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/combined/combined_weather_model.py +0 -0
  105. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/combined/null_check.py +0 -0
  106. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/dividend_model.py +0 -0
  107. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/espn/__init__.py +0 -0
  108. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/espn/espn_bookie_model.py +0 -0
  109. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/espn/espn_coach_model.py +0 -0
  110. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/espn/espn_game_model.py +0 -0
  111. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/espn/espn_odds_model.py +0 -0
  112. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/espn/espn_team_model.py +0 -0
  113. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/espn/espn_venue_model.py +0 -0
  114. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/field_type.py +0 -0
  115. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/game_model.py +0 -0
  116. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/google/__init__.py +0 -0
  117. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/google/google_news_model.py +0 -0
  118. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/hkjc/__init__.py +0 -0
  119. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/hkjc/hkjc/__init__.py +0 -0
  120. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/hkjc/hkjc/hkjc_hkjc_bookie_model.py +0 -0
  121. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/hkjc/hkjc/hkjc_hkjc_dividend_model.py +0 -0
  122. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/hkjc/hkjc/hkjc_hkjc_odds_model.py +0 -0
  123. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/hkjc/hkjc/hkjc_hkjc_owner_model.py +0 -0
  124. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/hkjc/hkjc/hkjc_hkjc_venue_model.py +0 -0
  125. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/hkjc/position.py +0 -0
  126. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/league.py +0 -0
  127. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/nba/__init__.py +0 -0
  128. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/nba/combined/__init__.py +0 -0
  129. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/nba/espn/__init__.py +0 -0
  130. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/nba/nba/__init__.py +0 -0
  131. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/nba/nba/nba_nba_game_model.py +0 -0
  132. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/nba/nba/nba_nba_team_model.py +0 -0
  133. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/nba/nbacom/__init__.py +0 -0
  134. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/nba/nbacom/nba_nbacom_game_model.py +0 -0
  135. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/nba/nbacom/nba_nbacom_player_model.py +0 -0
  136. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/nba/nbacom/nba_nbacom_team_model.py +0 -0
  137. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/nba/nbacom/nba_nbacom_venue_model.py +0 -0
  138. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/nba/oddsportal/__init__.py +0 -0
  139. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/nba/position.py +0 -0
  140. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/nba/sportsdb/__init__.py +0 -0
  141. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/nba/sportsreference/__init__.py +0 -0
  142. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/ncaab/__init__.py +0 -0
  143. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/ncaab/combined/__init__.py +0 -0
  144. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/ncaab/espn/__init__.py +0 -0
  145. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/ncaab/oddsportal/__init__.py +0 -0
  146. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/ncaab/sportsreference/__init__.py +0 -0
  147. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/ncaaf/__init__.py +0 -0
  148. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/ncaaf/combined/__init__.py +0 -0
  149. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/ncaaf/espn/__init__.py +0 -0
  150. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/ncaaf/oddsportal/__init__.py +0 -0
  151. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/news_model.py +0 -0
  152. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/nfl/__init__.py +0 -0
  153. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/nfl/aussportsbetting/__init__.py +0 -0
  154. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/nfl/combined/__init__.py +0 -0
  155. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/nfl/espn/__init__.py +0 -0
  156. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/nfl/oddsportal/__init__.py +0 -0
  157. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/nfl/position.py +0 -0
  158. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/nfl/sportsdb/__init__.py +0 -0
  159. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/odds_model.py +0 -0
  160. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/oddsportal/__init__.py +0 -0
  161. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/oddsportal/oddsportal_bookie_model.py +0 -0
  162. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/oddsportal/oddsportal_odds_model.py +0 -0
  163. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/oddsportal/oddsportal_team_model.py +0 -0
  164. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/oddsportal/oddsportal_venue_model.py +0 -0
  165. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/owner_model.py +0 -0
  166. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/player_model.py +0 -0
  167. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/season_type.py +0 -0
  168. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/sex.py +0 -0
  169. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/social_model.py +0 -0
  170. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/species.py +0 -0
  171. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/sportsdb/__init__.py +0 -0
  172. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/sportsdb/sportsdb_game_model.py +0 -0
  173. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/sportsdb/sportsdb_team_model.py +0 -0
  174. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/sportsdb/sportsdb_venue_model.py +0 -0
  175. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/sportsreference/__init__.py +0 -0
  176. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/sportsreference/sportsreference_player_model.py +0 -0
  177. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/sportsreference/sportsreference_venue_model.py +0 -0
  178. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/team_model.py +0 -0
  179. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/venue_model.py +0 -0
  180. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/weather/__init__.py +0 -0
  181. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/weather/gribstream/__init__.py +0 -0
  182. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/weather/gribstream/gribstream_weather_model.py +0 -0
  183. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/weather/multi_weather_model.py +0 -0
  184. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/weather/openmeteo/__init__.py +0 -0
  185. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/weather/openmeteo/openmeteo_weather_model.py +0 -0
  186. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/weather_model.py +0 -0
  187. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/wikipedia/__init__.py +0 -0
  188. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/wikipedia/wikipedia_venue_model.py +0 -0
  189. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/x/__init__.py +0 -0
  190. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/data/x/x_social_model.py +0 -0
  191. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/logger.py +0 -0
  192. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/loglevel.py +0 -0
  193. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/playwright.py +0 -0
  194. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/session.py +0 -0
  195. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/vendor/__init__.py +0 -0
  196. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball/vendor/pygooglenews/__init__.py +0 -0
  197. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball.egg-info/SOURCES.txt +0 -0
  198. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball.egg-info/dependency_links.txt +0 -0
  199. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball.egg-info/entry_points.txt +0 -0
  200. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball.egg-info/not-zip-safe +0 -0
  201. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball.egg-info/requires.txt +0 -0
  202. {sportsball-0.4.12 → sportsball-0.4.14}/sportsball.egg-info/top_level.txt +0 -0
  203. {sportsball-0.4.12 → sportsball-0.4.14}/tests/__init__.py +0 -0
  204. {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/__init__.py +0 -0
  205. {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/afl/__init__.py +0 -0
  206. {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/afl/afl/__init__.py +0 -0
  207. {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/afl/afl/afl_afl_game_model_test.py +0 -0
  208. {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/afl/afl/afl_afl_league_model_test.py +0 -0
  209. {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/afl/afltables/__init__.py +0 -0
  210. {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/afl/afltables/afl_afltables_coach_model_test.py +0 -0
  211. {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/afl/afltables/afl_afltables_game_model_test.py +0 -0
  212. {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/afl/afltables/afl_afltables_league_model_test.py +0 -0
  213. {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/afl/afltables/afl_afltables_player_model_test.py +0 -0
  214. {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/aussportsbetting/__init__.py +0 -0
  215. {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/aussportsbetting/aussportsbetting_game_model_test.py +0 -0
  216. {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/combined/__init__.py +0 -0
  217. {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/combined/combined_game_model_test.py +0 -0
  218. {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/combined/combined_player_model_test.py +0 -0
  219. {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/combined/combined_team_model_test.py +0 -0
  220. {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/combined/combined_venue_model_test.py +0 -0
  221. {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/espn/__init__.py +0 -0
  222. {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/espn/espn_game_model_test.py +0 -0
  223. {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/game_model_test.py +0 -0
  224. {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/google/__init__.py +0 -0
  225. {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/google/google_address_model_test.py +0 -0
  226. {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/google/google_news_model_test.py +0 -0
  227. {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/hkjc/__init__.py +0 -0
  228. {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/hkjc/hkjc/__init__.py +0 -0
  229. {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/nba/__init__.py +0 -0
  230. {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/nba/nba/__init__.py +0 -0
  231. {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/nba/nba/nba_nba_game_model_test.py +0 -0
  232. {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/nba/nba/nba_nba_league_model_test.py +0 -0
  233. {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/nba/nba/nba_nba_team_model_test.py +0 -0
  234. {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/nba/sportsdb/__init__.py +0 -0
  235. {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/nba/sportsdb/nba_sportsdb_league_model_test.py +0 -0
  236. {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/nba/sportsreference/__init__.py +0 -0
  237. {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/nba/sportsreference/nba_sportsreference_league_model_test.py +0 -0
  238. {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/ncaab/__init__.py +0 -0
  239. {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/ncaab/sportsreference/__init__.py +0 -0
  240. {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/ncaab/sportsreference/ncaab_sportsreference_league_model_test.py +0 -0
  241. {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/nfl/__init__.py +0 -0
  242. {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/nfl/sportsdb/__init__.py +0 -0
  243. {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/nfl/sportsdb/nfl_sportsdb_league_model_test.py +0 -0
  244. {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/oddsportal/__init__.py +0 -0
  245. {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/oddsportal/oddsportal_league_model_test.py +0 -0
  246. {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/player_model_test.py +0 -0
  247. {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/social_model_test.py +0 -0
  248. {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/sportsdb/__init__.py +0 -0
  249. {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/sportsdb/sportsdb_game_model_test.py +0 -0
  250. {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/sportsdb/sportsdb_league_model_test.py +0 -0
  251. {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/sportsdb/sportsdb_team_model_test.py +0 -0
  252. {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/sportsdb/sportsdb_venue_model_test.py +0 -0
  253. {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/sportsreference/__init__.py +0 -0
  254. {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/sportsreference/sportsreference_coach_model_test.py +0 -0
  255. {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/sportsreference/sportsreference_game_model_test.py +0 -0
  256. {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/sportsreference/sportsreference_league_model_test.py +0 -0
  257. {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/sportsreference/sportsreference_player_model_test.py +0 -0
  258. {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/sportsreference/sportsreference_venue_model_test.py +0 -0
  259. {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/team_model_test.py +0 -0
  260. {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/x/__init__.py +0 -0
  261. {sportsball-0.4.12 → sportsball-0.4.14}/tests/data/x/x_social_model_test.py +0 -0
  262. {sportsball-0.4.12 → sportsball-0.4.14}/tests/proxy_session_test.py +0 -0
  263. {sportsball-0.4.12 → sportsball-0.4.14}/tests/sportsball_test.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: sportsball
3
- Version: 0.4.12
3
+ Version: 0.4.14
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.12',
29
+ version='0.4.14',
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.12"
7
+ __VERSION__ = "0.4.14"
@@ -7,12 +7,12 @@ import re
7
7
  import urllib.parse
8
8
  from typing import Iterator
9
9
 
10
- import requests_cache
11
10
  from bs4 import BeautifulSoup, Tag
12
11
  from dateutil.parser import parse
13
12
  from playwright.sync_api import Playwright, sync_playwright
14
13
 
15
14
  from ....playwright import ensure_install
15
+ from ....proxy_session import ProxySession
16
16
  from ...game_model import GameModel
17
17
  from ...league import League
18
18
  from ...league_model import LeagueModel
@@ -22,7 +22,7 @@ from .afl_afl_game_model import create_afl_afl_game_model, parse_players_v1
22
22
 
23
23
  def _parse_v1(
24
24
  soup: BeautifulSoup,
25
- session: requests_cache.CachedSession,
25
+ session: ProxySession,
26
26
  ladder: list[str],
27
27
  html_url: str,
28
28
  playwright: Playwright,
@@ -143,7 +143,7 @@ def _parse_v2_soup(
143
143
 
144
144
  def _parse_v2(
145
145
  soup: BeautifulSoup,
146
- session: requests_cache.CachedSession,
146
+ session: ProxySession,
147
147
  ladder: list[str],
148
148
  html_url: str,
149
149
  playwright: Playwright,
@@ -163,7 +163,7 @@ def _parse_v2(
163
163
 
164
164
  def _parse_game_info(
165
165
  html: str,
166
- session: requests_cache.CachedSession,
166
+ session: ProxySession,
167
167
  ladder: list[str],
168
168
  html_url: str,
169
169
  playwright: Playwright,
@@ -180,9 +180,7 @@ def _parse_game_info(
180
180
  class AFLAFLLeagueModel(LeagueModel):
181
181
  """AFL AFL implementation of the league model."""
182
182
 
183
- def __init__(
184
- self, session: requests_cache.CachedSession, position: int | None = None
185
- ) -> None:
183
+ def __init__(self, session: ProxySession, position: int | None = None) -> None:
186
184
  super().__init__(League.AFL, session, position=position)
187
185
 
188
186
  @classmethod
@@ -8,11 +8,11 @@ import urllib.parse
8
8
  from typing import Iterator
9
9
  from urllib.parse import urlparse
10
10
 
11
- import requests_cache
12
11
  import tqdm
13
12
  from bs4 import BeautifulSoup
14
13
  from dateutil import parser
15
14
 
15
+ from ....proxy_session import ProxySession
16
16
  from ...game_model import GameModel
17
17
  from ...league import League
18
18
  from ...league_model import LeagueModel
@@ -42,9 +42,7 @@ def _find_dt(td_text: str, season_url: str) -> datetime.datetime:
42
42
  class AFLAFLTablesLeagueModel(LeagueModel):
43
43
  """AFL AFLTables implementation of the league model."""
44
44
 
45
- def __init__(
46
- self, session: requests_cache.CachedSession, position: int | None = None
47
- ) -> None:
45
+ def __init__(self, session: ProxySession, position: int | None = None) -> None:
48
46
  super().__init__(League.AFL, session)
49
47
 
50
48
  @classmethod
@@ -1,7 +1,6 @@
1
1
  """AFL aussportsbetting league model."""
2
2
 
3
- import requests_cache
4
-
3
+ from ....proxy_session import ProxySession
5
4
  from ...aussportsbetting.aussportsbetting_league_model import \
6
5
  AusSportsBettingLeagueModel
7
6
  from ...league import League
@@ -10,9 +9,7 @@ from ...league import League
10
9
  class AFLAusSportsBettingLeagueModel(AusSportsBettingLeagueModel):
11
10
  """AFL AusSportsBetting implementation of the league model."""
12
11
 
13
- def __init__(
14
- self, session: requests_cache.CachedSession, position: int | None = None
15
- ) -> None:
12
+ def __init__(self, session: ProxySession, position: int | None = None) -> None:
16
13
  super().__init__(League.AFL, session, position=position)
17
14
 
18
15
  @classmethod
@@ -1,7 +1,6 @@
1
1
  """AFL combined league model."""
2
2
 
3
- import requests_cache
4
-
3
+ from ....proxy_session import ProxySession
5
4
  from ...combined.combined_league_model import CombinedLeagueModel
6
5
  from ...league import League
7
6
  from ..afl.afl_afl_league_model import AFLAFLLeagueModel
@@ -269,9 +268,7 @@ AFL_VENUE_IDENTITY_MAP = {
269
268
  class AFLCombinedLeagueModel(CombinedLeagueModel):
270
269
  """AFL combined implementation of the league model."""
271
270
 
272
- def __init__(
273
- self, session: requests_cache.CachedSession, league_filter: str | None
274
- ) -> None:
271
+ def __init__(self, session: ProxySession, league_filter: str | None) -> None:
275
272
  super().__init__(
276
273
  session,
277
274
  League.AFL,
@@ -2,8 +2,7 @@
2
2
 
3
3
  # pylint: disable=line-too-long
4
4
 
5
- import requests_cache
6
-
5
+ from ....proxy_session import ProxySession
7
6
  from ...espn.espn_league_model import ESPNLeagueModel
8
7
  from ...league import League
9
8
 
@@ -13,9 +12,7 @@ _SEASON_URL = "https://sports.core.api.espn.com/v2/sports/australian-football/le
13
12
  class AFLESPNLeagueModel(ESPNLeagueModel):
14
13
  """AFL ESPN implementation of the league model."""
15
14
 
16
- def __init__(
17
- self, session: requests_cache.CachedSession, position: int | None = None
18
- ) -> None:
15
+ def __init__(self, session: ProxySession, position: int | None = None) -> None:
19
16
  super().__init__(_SEASON_URL, League.AFL, session, position=position)
20
17
 
21
18
  @classmethod
@@ -2,8 +2,7 @@
2
2
 
3
3
  # pylint: disable=line-too-long
4
4
 
5
- import requests_cache
6
-
5
+ from ....proxy_session import ProxySession
7
6
  from ...league import League
8
7
  from ...oddsportal.oddsportal_league_model import OddsPortalLeagueModel
9
8
 
@@ -11,9 +10,7 @@ from ...oddsportal.oddsportal_league_model import OddsPortalLeagueModel
11
10
  class AFLOddsPortalLeagueModel(OddsPortalLeagueModel):
12
11
  """AFL OddsPortal implementation of the league model."""
13
12
 
14
- def __init__(
15
- self, session: requests_cache.CachedSession, position: int | None = None
16
- ) -> None:
13
+ def __init__(self, session: ProxySession, position: int | None = None) -> None:
17
14
  super().__init__(League.AFL, session, position=position)
18
15
 
19
16
  @classmethod
@@ -4,11 +4,11 @@
4
4
  from io import BytesIO
5
5
  from typing import Any, Iterator
6
6
 
7
- import requests_cache
8
7
  import tqdm
9
8
  from dateutil.parser import parse
10
9
  from openpyxl import load_workbook
11
10
 
11
+ from ...proxy_session import ProxySession
12
12
  from ..game_model import GameModel
13
13
  from ..league import League
14
14
  from ..league_model import LeagueModel
@@ -21,7 +21,7 @@ class AusSportsBettingLeagueModel(LeagueModel):
21
21
  def __init__(
22
22
  self,
23
23
  league: League,
24
- session: requests_cache.CachedSession,
24
+ session: ProxySession,
25
25
  position: int | None = None,
26
26
  ) -> None:
27
27
  super().__init__(league, session, position=position)
@@ -6,8 +6,7 @@ import multiprocessing
6
6
  from concurrent.futures import ThreadPoolExecutor
7
7
  from typing import Any, Iterator
8
8
 
9
- import requests_cache
10
-
9
+ from ...proxy_session import ProxySession
11
10
  from ..game_model import GameModel
12
11
  from ..league import League
13
12
  from ..league_model import LeagueModel
@@ -23,7 +22,7 @@ class CombinedLeagueModel(LeagueModel):
23
22
 
24
23
  def __init__(
25
24
  self,
26
- session: requests_cache.CachedSession,
25
+ session: ProxySession,
27
26
  league: League,
28
27
  league_models: list[LeagueModel],
29
28
  league_filter: str | None,
@@ -3,9 +3,9 @@
3
3
  # pylint: disable=too-many-locals,too-many-arguments
4
4
  from typing import Any, Iterator
5
5
 
6
- import requests_cache
7
6
  import tqdm
8
7
 
8
+ from ...proxy_session import ProxySession
9
9
  from ..game_model import GameModel
10
10
  from ..league import League
11
11
  from ..league_model import LeagueModel
@@ -32,7 +32,7 @@ class ESPNLeagueModel(LeagueModel):
32
32
  self,
33
33
  start_url: str,
34
34
  league: League,
35
- session: requests_cache.CachedSession,
35
+ session: ProxySession,
36
36
  position: int | None = None,
37
37
  ) -> None:
38
38
  super().__init__(league, session, position=position)
@@ -50,8 +50,7 @@ def _create_espn_player_model(
50
50
  try:
51
51
  birth_date = parse(athlete_dict["dateOfBirth"]).date()
52
52
  except KeyError:
53
- logging.error(athlete_response.url)
54
- raise
53
+ logging.warning("Failed to get birth date for %s", athlete_response.url)
55
54
 
56
55
  birth_place = athlete_dict["birthPlace"]
57
56
  return PlayerModel(
@@ -15543,6 +15543,25 @@ _CACHED_GEOCODES: dict[str, Any] = {
15543
15543
  housenumber="",
15544
15544
  country="Spain",
15545
15545
  ),
15546
+ "Corinthians Arena - Sao Paulo": SportsballGeocodeTuple(
15547
+ city="Sao Paulo",
15548
+ state="",
15549
+ postal="",
15550
+ lat=-23.54525,
15551
+ lng=-46.474278,
15552
+ housenumber="",
15553
+ country="Brazil",
15554
+ ),
15555
+ "AT&T Stadium, Arlington, TX, USA": ATT_STADIUM,
15556
+ "Brandon, MS, USA": SportsballGeocodeTuple(
15557
+ city="Brandon",
15558
+ state="MS",
15559
+ postal="",
15560
+ lat=32.280278,
15561
+ lng=-89.998333,
15562
+ housenumber="",
15563
+ country="USA",
15564
+ ),
15546
15565
  }
15547
15566
 
15548
15567
 
@@ -4,19 +4,18 @@ import io
4
4
 
5
5
  import pandas as pd
6
6
  import pytest_is_running
7
- import requests_cache
8
7
 
9
8
  from ....cache import MEMORY
10
- from ....proxy_session import X_NO_WAYBACK
9
+ from ....proxy_session import ProxySession
11
10
  from ...coach_model import CoachModel
12
11
 
13
12
 
14
13
  def _create_hkjc_hkjc_coach_model(
15
- session: requests_cache.CachedSession,
14
+ session: ProxySession,
16
15
  url: str,
17
16
  ) -> CoachModel:
18
- headers = {X_NO_WAYBACK: "1"}
19
- response = session.get(url, headers=headers)
17
+ with session.wayback_disabled():
18
+ response = session.get(url)
20
19
  response.raise_for_status()
21
20
 
22
21
  handle = io.StringIO()
@@ -49,14 +48,14 @@ def _create_hkjc_hkjc_coach_model(
49
48
 
50
49
  @MEMORY.cache(ignore=["session"])
51
50
  def _cached_create_hkjc_hkjc_coach_model(
52
- session: requests_cache.CachedSession,
51
+ session: ProxySession,
53
52
  url: str,
54
53
  ) -> CoachModel:
55
54
  return _create_hkjc_hkjc_coach_model(session=session, url=url)
56
55
 
57
56
 
58
57
  def create_hkjc_hkjc_coach_model(
59
- session: requests_cache.CachedSession,
58
+ session: ProxySession,
60
59
  url: str,
61
60
  ) -> CoachModel:
62
61
  """Create a coach model based off HKJC."""
@@ -9,11 +9,11 @@ from urllib.parse import urlparse
9
9
 
10
10
  import pandas as pd
11
11
  import pytest_is_running
12
- import requests_cache
13
12
  from bs4 import BeautifulSoup
14
13
  from dateutil.parser import parse
15
14
 
16
15
  from ....cache import MEMORY
16
+ from ....proxy_session import ProxySession
17
17
  from ...game_model import GameModel
18
18
  from ...league import League
19
19
  from ..position import position_from_str
@@ -28,7 +28,7 @@ RACE_COURSE_QUERY_KEY = "Racecourse"
28
28
 
29
29
 
30
30
  def _create_hkjc_hkjc_game_model(
31
- session: requests_cache.CachedSession,
31
+ session: ProxySession,
32
32
  html: str,
33
33
  url: str,
34
34
  ) -> GameModel | None:
@@ -279,7 +279,7 @@ def _create_hkjc_hkjc_game_model(
279
279
 
280
280
  @MEMORY.cache(ignore=["session"])
281
281
  def _cached_create_hkjc_hkjc_game_model(
282
- session: requests_cache.CachedSession,
282
+ session: ProxySession,
283
283
  html: str,
284
284
  url: str,
285
285
  ) -> GameModel | None:
@@ -288,7 +288,7 @@ def _cached_create_hkjc_hkjc_game_model(
288
288
 
289
289
 
290
290
  def create_hkjc_hkjc_game_model(
291
- session: requests_cache.CachedSession,
291
+ session: ProxySession,
292
292
  html: str,
293
293
  url: str,
294
294
  ) -> GameModel | None:
@@ -6,11 +6,10 @@ import urllib.parse
6
6
  from typing import Iterator
7
7
  from urllib.parse import urlparse
8
8
 
9
- import requests_cache
10
9
  import tqdm
11
10
  from bs4 import BeautifulSoup
12
11
 
13
- from ....proxy_session import X_NO_WAYBACK
12
+ from ....proxy_session import ProxySession
14
13
  from ...game_model import GameModel
15
14
  from ...league import League
16
15
  from ...league_model import LeagueModel
@@ -23,9 +22,7 @@ from .hkjc_hkjc_venue_model import HAPPY_VALLEY_VENUE_CODE, SHA_TIN_VENUE_CODE
23
22
  class HKJCHKJCLeagueModel(LeagueModel):
24
23
  """HKJC HKJC implementation of the league model."""
25
24
 
26
- def __init__(
27
- self, session: requests_cache.CachedSession, position: int | None = None
28
- ) -> None:
25
+ def __init__(self, session: ProxySession, position: int | None = None) -> None:
29
26
  super().__init__(League.HKJC, session, position=position)
30
27
 
31
28
  @classmethod
@@ -37,10 +34,10 @@ class HKJCHKJCLeagueModel(LeagueModel):
37
34
  def games_for_date(dt: datetime.date) -> Iterator[GameModel]:
38
35
  dt_str = dt.strftime("%Y/%m/%d")
39
36
  for course in [SHA_TIN_VENUE_CODE, HAPPY_VALLEY_VENUE_CODE]:
40
- response = self.session.get(
41
- f"https://racing.hkjc.com/racing/information/English/Racing/LocalResults.aspx?{RACE_DATE_QUERY_KEY}={dt_str}&{RACE_COURSE_QUERY_KEY}={course}&{RACE_NUMBER_QUERY_KEY}=1",
42
- headers={X_NO_WAYBACK: "1"},
43
- )
37
+ with self.session.wayback_disabled():
38
+ response = self.session.get(
39
+ f"https://racing.hkjc.com/racing/information/English/Racing/LocalResults.aspx?{RACE_DATE_QUERY_KEY}={dt_str}&{RACE_COURSE_QUERY_KEY}={course}&{RACE_NUMBER_QUERY_KEY}=1",
40
+ )
44
41
  response.raise_for_status()
45
42
  game_model = create_hkjc_hkjc_game_model(
46
43
  self.session, response.text, response.url
@@ -61,7 +58,8 @@ class HKJCHKJCLeagueModel(LeagueModel):
61
58
  continue
62
59
  if query[RACE_COURSE_QUERY_KEY][0] != course:
63
60
  continue
64
- response = self.session.get(url, headers={X_NO_WAYBACK: "1"})
61
+ with self.session.wayback_disabled():
62
+ response = self.session.get(url)
65
63
  response.raise_for_status()
66
64
  game_model = create_hkjc_hkjc_game_model(
67
65
  self.session, response.text, response.url
@@ -8,11 +8,10 @@ from urllib.parse import urlparse
8
8
 
9
9
  import pandas as pd
10
10
  import pytest_is_running
11
- import requests_cache
12
11
  from bs4 import BeautifulSoup
13
12
 
14
13
  from ....cache import MEMORY
15
- from ....proxy_session import X_NO_WAYBACK
14
+ from ....proxy_session import ProxySession
16
15
  from ...google.google_address_model import create_google_address_model
17
16
  from ...player_model import PlayerModel
18
17
  from ...sex import sex_from_str
@@ -22,15 +21,15 @@ from .hkjc_hkjc_owner_model import create_hkjc_hkjc_owner_model
22
21
 
23
22
 
24
23
  def _create_hkjc_hkjc_player_model(
25
- session: requests_cache.CachedSession,
24
+ session: ProxySession,
26
25
  url: str,
27
26
  jersey: str | None,
28
27
  handicap_weight: float | None,
29
28
  starting_position: Position | None,
30
29
  weight: float | None,
31
30
  ) -> PlayerModel | None:
32
- headers = {X_NO_WAYBACK: "1"}
33
- response = session.get(url, headers=headers)
31
+ with session.wayback_disabled():
32
+ response = session.get(url)
34
33
  response.raise_for_status()
35
34
 
36
35
  o = urlparse(url)
@@ -42,13 +41,12 @@ def _create_hkjc_hkjc_player_model(
42
41
  dfs = []
43
42
  try:
44
43
  dfs = pd.read_html(handle)
45
- except AttributeError as exc:
46
- logging.warning(str(exc))
47
44
  except ValueError:
48
45
  if not is_sire:
49
46
  logging.error(response.text)
50
47
  logging.error(url)
51
- raise
48
+ logging.error(response.url)
49
+ return None
52
50
 
53
51
  soup = BeautifulSoup(response.text, "lxml")
54
52
  for noscript in soup.find_all("noscript"):
@@ -65,7 +63,7 @@ def _create_hkjc_hkjc_player_model(
65
63
  age = None
66
64
  birth_address = None
67
65
  owner = None
68
- if o.path.endswith("/Horse/Horse.aspx"):
66
+ if o.path.endswith("/Horse/Horse.aspx") or o.path.endswith("/Horse/OtherHorse.aspx"):
69
67
  species = Species.HORSE
70
68
  for count, df in enumerate(dfs):
71
69
  if count == 0:
@@ -124,6 +122,7 @@ def _create_hkjc_hkjc_player_model(
124
122
  logging.error(dfs)
125
123
  logging.error(o.path)
126
124
  logging.error(url)
125
+ logging.error(response.url)
127
126
  raise ValueError("name is null")
128
127
 
129
128
  return PlayerModel(
@@ -177,7 +176,7 @@ def _create_hkjc_hkjc_player_model(
177
176
 
178
177
  @MEMORY.cache(ignore=["session"])
179
178
  def _cached_create_hkjc_hkjc_player_model(
180
- session: requests_cache.CachedSession,
179
+ session: ProxySession,
181
180
  url: str,
182
181
  jersey: str | None,
183
182
  handicap_weight: float | None,
@@ -195,7 +194,7 @@ def _cached_create_hkjc_hkjc_player_model(
195
194
 
196
195
 
197
196
  def create_hkjc_hkjc_player_model(
198
- session: requests_cache.CachedSession,
197
+ session: ProxySession,
199
198
  url: str,
200
199
  jersey: str | None,
201
200
  handicap_weight: float | None,
@@ -4,9 +4,9 @@
4
4
  import datetime
5
5
 
6
6
  import pytest_is_running
7
- import requests_cache
8
7
 
9
8
  from ....cache import MEMORY
9
+ from ....proxy_session import ProxySession
10
10
  from ...odds_model import OddsModel
11
11
  from ...team_model import TeamModel
12
12
  from ..position import Position
@@ -15,7 +15,7 @@ from .hkjc_hkjc_player_model import create_hkjc_hkjc_player_model
15
15
 
16
16
 
17
17
  def _create_hkjc_hkjc_team_model(
18
- session: requests_cache.CachedSession,
18
+ session: ProxySession,
19
19
  horse_url: str,
20
20
  jockey_url: str | None,
21
21
  trainer_url: str | None,
@@ -75,7 +75,7 @@ def _create_hkjc_hkjc_team_model(
75
75
 
76
76
  @MEMORY.cache(ignore=["session"])
77
77
  def _cached_create_hkjc_hkjc_team_model(
78
- session: requests_cache.CachedSession,
78
+ session: ProxySession,
79
79
  horse_url: str,
80
80
  jockey_url: str | None,
81
81
  trainer_url: str | None,
@@ -105,7 +105,7 @@ def _cached_create_hkjc_hkjc_team_model(
105
105
 
106
106
 
107
107
  def create_hkjc_hkjc_team_model(
108
- session: requests_cache.CachedSession,
108
+ session: ProxySession,
109
109
  horse_url: str,
110
110
  jockey_url: str | None,
111
111
  trainer_url: str | None,
@@ -5,11 +5,11 @@ import datetime
5
5
  from typing import Iterator, get_args, get_origin
6
6
 
7
7
  import pandas as pd
8
- import requests_cache
9
8
  import tqdm
10
9
  from flatten_json import flatten # type: ignore
11
10
  from pydantic import BaseModel
12
11
 
12
+ from ..proxy_session import ProxySession
13
13
  from .address_model import ADDRESS_TIMEZONE_COLUMN
14
14
  from .field_type import FieldType
15
15
  from .game_model import GAME_DT_COLUMN, VENUE_COLUMN_PREFIX, GameModel
@@ -76,7 +76,7 @@ class LeagueModel(Model):
76
76
  def __init__(
77
77
  self,
78
78
  league: League,
79
- session: requests_cache.CachedSession,
79
+ session: ProxySession,
80
80
  position: int | None = None,
81
81
  ) -> None:
82
82
  super().__init__(session)
@@ -2,21 +2,20 @@
2
2
 
3
3
  # pylint: disable=too-few-public-methods
4
4
  import pandas as pd
5
- import requests_cache
6
5
 
7
- from ..proxy_session import create_proxy_session
6
+ from ..proxy_session import ProxySession, create_proxy_session
8
7
 
9
8
 
10
9
  class Model:
11
10
  """The base model class."""
12
11
 
13
- _session: requests_cache.CachedSession | None
12
+ _session: ProxySession | None
14
13
 
15
- def __init__(self, session: requests_cache.CachedSession) -> None:
14
+ def __init__(self, session: ProxySession) -> None:
16
15
  self._session = session
17
16
 
18
17
  @property
19
- def session(self) -> requests_cache.CachedSession:
18
+ def session(self) -> ProxySession:
20
19
  """Fetch a session that can never be null."""
21
20
  session = self._session
22
21
  if session is None:
@@ -2,8 +2,7 @@
2
2
 
3
3
  # pylint: disable=line-too-long
4
4
 
5
- import requests_cache
6
-
5
+ from ....proxy_session import ProxySession
7
6
  from ...combined.combined_league_model import CombinedLeagueModel
8
7
  from ...league import League
9
8
  from ..espn.nba_espn_league_model import NBAESPNLeagueModel
@@ -897,9 +896,7 @@ NBA_PLAYER_IDENTITY_MAP: dict[str, str] = {}
897
896
  class NBACombinedLeagueModel(CombinedLeagueModel):
898
897
  """NBA combined implementation of the league model."""
899
898
 
900
- def __init__(
901
- self, session: requests_cache.CachedSession, league_filter: str | None
902
- ) -> None:
899
+ def __init__(self, session: ProxySession, league_filter: str | None) -> None:
903
900
  super().__init__(
904
901
  session,
905
902
  League.NBA,
@@ -1,7 +1,6 @@
1
1
  """NBA ESPN league model."""
2
2
 
3
- import requests_cache
4
-
3
+ from ....proxy_session import ProxySession
5
4
  from ...espn.espn_league_model import ESPNLeagueModel
6
5
  from ...league import League
7
6
  from ..position import Position
@@ -14,9 +13,7 @@ _SEASON_URL = (
14
13
  class NBAESPNLeagueModel(ESPNLeagueModel):
15
14
  """NBA ESPN implementation of the league model."""
16
15
 
17
- def __init__(
18
- self, session: requests_cache.CachedSession, position: int | None = None
19
- ) -> None:
16
+ def __init__(self, session: ProxySession, position: int | None = None) -> None:
20
17
  super().__init__(_SEASON_URL, League.NBA, session, position=position)
21
18
 
22
19
  @classmethod
@@ -4,13 +4,13 @@ import datetime
4
4
  from typing import Iterator, TypedDict
5
5
 
6
6
  import pandas as pd
7
- import requests_cache
8
7
  import tqdm
9
8
  from dateutil.parser import parse
10
9
  from dateutil.relativedelta import relativedelta
11
10
  from nba_api.library.http import NBAHTTP # type: ignore
12
11
  from nba_api.stats.endpoints import leaguegamefinder # type: ignore
13
12
 
13
+ from ....proxy_session import ProxySession
14
14
  from ...game_model import GameModel
15
15
  from ...league import League
16
16
  from ...league_model import LeagueModel
@@ -67,9 +67,7 @@ class NBANBALeagueModel(LeagueModel):
67
67
  start: datetime.datetime
68
68
  games: int
69
69
 
70
- def __init__(
71
- self, session: requests_cache.CachedSession, position: int | None = None
72
- ) -> None:
70
+ def __init__(self, session: ProxySession, position: int | None = None) -> None:
73
71
  super().__init__(League.NBA, session, position=position)
74
72
  self._league_id = "00"
75
73
  NBAHTTP.set_session(session)