brlib 0.2.0__tar.gz → 0.3.0__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 (486) hide show
  1. brlib-0.3.0/.github/workflows/full-test.yml +47 -0
  2. {brlib-0.2.0 → brlib-0.3.0}/.github/workflows/publish.yml +9 -9
  3. brlib-0.3.0/.github/workflows/test.yml +49 -0
  4. {brlib-0.2.0 → brlib-0.3.0}/PKG-INFO +34 -17
  5. {brlib-0.2.0 → brlib-0.3.0}/README.md +13 -5
  6. {brlib-0.2.0 → brlib-0.3.0}/pyproject.toml +33 -13
  7. brlib-0.3.0/scripts/wiki.py +57 -0
  8. {brlib-0.2.0 → brlib-0.3.0}/src/brlib/__init__.py +11 -4
  9. brlib-0.3.0/src/brlib/_helpers/__init__.py +4 -0
  10. {brlib-0.2.0 → brlib-0.3.0}/src/brlib/_helpers/abbreviations_manager.py +63 -61
  11. {brlib-0.2.0 → brlib-0.3.0}/src/brlib/_helpers/constants.py +236 -79
  12. {brlib-0.2.0 → brlib-0.3.0}/src/brlib/_helpers/inputs.py +38 -20
  13. {brlib-0.2.0 → brlib-0.3.0}/src/brlib/_helpers/no_hitter_dicts.py +101 -60
  14. brlib-0.3.0/src/brlib/_helpers/requests_manager.py +72 -0
  15. {brlib-0.2.0 → brlib-0.3.0}/src/brlib/_helpers/singleton.py +2 -2
  16. {brlib-0.2.0 → brlib-0.3.0}/src/brlib/_helpers/utils.py +28 -34
  17. brlib-0.2.0/src/brlib/all_major_leaguers.py → brlib-0.3.0/src/brlib/all_players.py +10 -11
  18. {brlib-0.2.0 → brlib-0.3.0}/src/brlib/find_asg.py +15 -8
  19. {brlib-0.2.0 → brlib-0.3.0}/src/brlib/find_games.py +73 -52
  20. {brlib-0.2.0 → brlib-0.3.0}/src/brlib/find_teams.py +26 -16
  21. {brlib-0.2.0 → brlib-0.3.0}/src/brlib/game.py +330 -230
  22. {brlib-0.2.0 → brlib-0.3.0}/src/brlib/game_set.py +79 -57
  23. brlib-0.3.0/src/brlib/get_games.py +126 -0
  24. brlib-0.3.0/src/brlib/get_players.py +112 -0
  25. brlib-0.3.0/src/brlib/get_teams.py +121 -0
  26. {brlib-0.2.0 → brlib-0.3.0}/src/brlib/options.py +61 -63
  27. {brlib-0.2.0 → brlib-0.3.0}/src/brlib/player.py +229 -163
  28. {brlib-0.2.0 → brlib-0.3.0}/src/brlib/player_set.py +54 -40
  29. {brlib-0.2.0 → brlib-0.3.0}/src/brlib/team.py +145 -95
  30. {brlib-0.2.0 → brlib-0.3.0}/src/brlib/team_set.py +71 -48
  31. {brlib-0.2.0 → brlib-0.3.0}/tests/_helpers/test_abbreviations_manager.py +18 -9
  32. brlib-0.3.0/tests/_helpers/test_inputs.py +132 -0
  33. {brlib-0.2.0 → brlib-0.3.0}/tests/_helpers/test_no_hitter_dicts.py +24 -14
  34. {brlib-0.2.0 → brlib-0.3.0}/tests/_helpers/test_utils.py +11 -9
  35. {brlib-0.2.0 → brlib-0.3.0}/tests/conftest.py +111 -46
  36. {brlib-0.2.0/tests/expected/games/updated → brlib-0.3.0/tests/expected/games/original}/1961-allstar-game-1/batting.csv +1 -1
  37. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/1961-allstar-game-1/fielding.csv +1 -1
  38. brlib-0.3.0/tests/expected/games/original/1961-allstar-game-1/info.csv +2 -0
  39. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/2025-allstar-game/batting.csv +42 -42
  40. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/2025-allstar-game/fielding.csv +60 -60
  41. brlib-0.3.0/tests/expected/games/original/2025-allstar-game/info.csv +2 -0
  42. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/2025-allstar-game/pitching.csv +26 -26
  43. brlib-0.3.0/tests/expected/games/original/2025-allstar-game/team_info.csv +3 -0
  44. {brlib-0.2.0/tests/expected/games/updated → brlib-0.3.0/tests/expected/games/original}/ANA202305090/batting.csv +1 -1
  45. {brlib-0.2.0/tests/expected/games/updated → brlib-0.3.0/tests/expected/games/original}/ANA202305090/fielding.csv +1 -1
  46. {brlib-0.2.0/tests/expected/games/updated → brlib-0.3.0/tests/expected/games/original}/ANA202305090/info.csv +2 -2
  47. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/BOS201708250/batting.csv +1 -1
  48. {brlib-0.2.0/tests/expected/games/updated → brlib-0.3.0/tests/expected/games/original}/BOS201708250/fielding.csv +1 -1
  49. {brlib-0.2.0/tests/expected/games/updated → brlib-0.3.0/tests/expected/games/original}/BOS201708250/info.csv +2 -2
  50. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/FLO199407290/batting.csv +1 -1
  51. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/FLO199407290/fielding.csv +1 -1
  52. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/FLO199407290/info.csv +2 -2
  53. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/MLA190105301/batting.csv +1 -1
  54. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/MLA190105301/fielding.csv +1 -1
  55. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/MLA190105301/info.csv +2 -2
  56. {brlib-0.2.0/tests/expected/games/updated → brlib-0.3.0/tests/expected/games/original}/NYN200908230/batting.csv +1 -1
  57. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/NYN200908230/fielding.csv +1 -1
  58. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/NYN200908230/info.csv +2 -2
  59. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/PHI202211020/batting.csv +1 -1
  60. {brlib-0.2.0/tests/expected/games/updated → brlib-0.3.0/tests/expected/games/original}/PHI202211020/fielding.csv +1 -1
  61. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/PHI202211020/info.csv +2 -2
  62. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/PIT192010023/batting.csv +1 -1
  63. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/PIT192010023/fielding.csv +1 -1
  64. {brlib-0.2.0/tests/expected/games/updated → brlib-0.3.0/tests/expected/games/original}/PIT192010023/info.csv +2 -2
  65. {brlib-0.2.0/tests/expected/games/updated → brlib-0.3.0/tests/expected/games/original}/SEA197805231/batting.csv +1 -1
  66. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/SEA197805231/fielding.csv +1 -1
  67. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/SEA197805231/info.csv +2 -2
  68. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/SEA201208150/batting.csv +1 -1
  69. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/SEA201208150/fielding.csv +1 -1
  70. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/SEA201208150/info.csv +2 -2
  71. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/SEA201804190/batting.csv +1 -1
  72. {brlib-0.2.0/tests/expected/games/updated → brlib-0.3.0/tests/expected/games/original}/SEA201804190/fielding.csv +1 -1
  73. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/SEA201804190/info.csv +2 -2
  74. {brlib-0.2.0/tests/expected/games/updated → brlib-0.3.0/tests/expected/games/original}/SEA201905270/batting.csv +1 -1
  75. {brlib-0.2.0/tests/expected/games/updated → brlib-0.3.0/tests/expected/games/original}/SEA201905270/fielding.csv +1 -1
  76. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/SEA201905270/info.csv +2 -2
  77. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/SEA202210150/batting.csv +1 -1
  78. {brlib-0.2.0/tests/expected/games/updated → brlib-0.3.0/tests/expected/games/original}/SEA202210150/fielding.csv +1 -1
  79. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/SEA202210150/info.csv +2 -2
  80. {brlib-0.2.0/tests/expected/games/updated → brlib-0.3.0/tests/expected/games/original}/SLN190710051/batting.csv +1 -1
  81. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/SLN190710051/fielding.csv +1 -1
  82. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/SLN190710051/info.csv +2 -2
  83. brlib-0.3.0/tests/expected/games/records.csv +20 -0
  84. {brlib-0.2.0/tests/expected/games/original → brlib-0.3.0/tests/expected/games/updated}/1961-allstar-game-1/batting.csv +1 -1
  85. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/updated/1961-allstar-game-1/fielding.csv +1 -1
  86. brlib-0.3.0/tests/expected/games/updated/1961-allstar-game-1/info.csv +2 -0
  87. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/updated/2025-allstar-game/batting.csv +42 -42
  88. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/updated/2025-allstar-game/fielding.csv +60 -60
  89. brlib-0.3.0/tests/expected/games/updated/2025-allstar-game/info.csv +2 -0
  90. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/updated/2025-allstar-game/pitching.csv +26 -26
  91. brlib-0.3.0/tests/expected/games/updated/2025-allstar-game/team_info.csv +3 -0
  92. {brlib-0.2.0/tests/expected/games/original → brlib-0.3.0/tests/expected/games/updated}/ANA202305090/batting.csv +1 -1
  93. {brlib-0.2.0/tests/expected/games/original → brlib-0.3.0/tests/expected/games/updated}/ANA202305090/fielding.csv +1 -1
  94. {brlib-0.2.0/tests/expected/games/original → brlib-0.3.0/tests/expected/games/updated}/ANA202305090/info.csv +2 -2
  95. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/updated/BOS201708250/batting.csv +1 -1
  96. {brlib-0.2.0/tests/expected/games/original → brlib-0.3.0/tests/expected/games/updated}/BOS201708250/fielding.csv +1 -1
  97. {brlib-0.2.0/tests/expected/games/original → brlib-0.3.0/tests/expected/games/updated}/BOS201708250/info.csv +2 -2
  98. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/updated/FLO199407290/batting.csv +1 -1
  99. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/updated/FLO199407290/fielding.csv +1 -1
  100. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/updated/FLO199407290/info.csv +2 -2
  101. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/updated/MLA190105301/batting.csv +1 -1
  102. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/updated/MLA190105301/fielding.csv +1 -1
  103. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/updated/MLA190105301/info.csv +2 -2
  104. {brlib-0.2.0/tests/expected/games/original → brlib-0.3.0/tests/expected/games/updated}/NYN200908230/batting.csv +1 -1
  105. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/updated/NYN200908230/fielding.csv +1 -1
  106. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/updated/NYN200908230/info.csv +2 -2
  107. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/updated/PHI202211020/batting.csv +1 -1
  108. {brlib-0.2.0/tests/expected/games/original → brlib-0.3.0/tests/expected/games/updated}/PHI202211020/fielding.csv +1 -1
  109. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/updated/PHI202211020/info.csv +2 -2
  110. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/updated/PIT192010023/batting.csv +1 -1
  111. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/updated/PIT192010023/fielding.csv +1 -1
  112. {brlib-0.2.0/tests/expected/games/original → brlib-0.3.0/tests/expected/games/updated}/PIT192010023/info.csv +2 -2
  113. {brlib-0.2.0/tests/expected/games/original → brlib-0.3.0/tests/expected/games/updated}/SEA197805231/batting.csv +1 -1
  114. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/updated/SEA197805231/fielding.csv +1 -1
  115. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/updated/SEA197805231/info.csv +2 -2
  116. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/updated/SEA201208150/batting.csv +1 -1
  117. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/updated/SEA201208150/fielding.csv +1 -1
  118. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/updated/SEA201208150/info.csv +2 -2
  119. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/updated/SEA201804190/batting.csv +1 -1
  120. {brlib-0.2.0/tests/expected/games/original → brlib-0.3.0/tests/expected/games/updated}/SEA201804190/fielding.csv +1 -1
  121. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/updated/SEA201804190/info.csv +2 -2
  122. {brlib-0.2.0/tests/expected/games/original → brlib-0.3.0/tests/expected/games/updated}/SEA201905270/batting.csv +1 -1
  123. {brlib-0.2.0/tests/expected/games/original → brlib-0.3.0/tests/expected/games/updated}/SEA201905270/fielding.csv +1 -1
  124. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/updated/SEA201905270/info.csv +2 -2
  125. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/updated/SEA202210150/batting.csv +1 -1
  126. {brlib-0.2.0/tests/expected/games/original → brlib-0.3.0/tests/expected/games/updated}/SEA202210150/fielding.csv +1 -1
  127. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/updated/SEA202210150/info.csv +2 -2
  128. {brlib-0.2.0/tests/expected/games/original → brlib-0.3.0/tests/expected/games/updated}/SLN190710051/batting.csv +1 -1
  129. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/updated/SLN190710051/fielding.csv +1 -1
  130. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/updated/SLN190710051/info.csv +2 -2
  131. brlib-0.3.0/tests/expected/players/original/aloumo01/info.csv +2 -0
  132. brlib-0.3.0/tests/expected/players/original/bendech01/info.csv +2 -0
  133. brlib-0.3.0/tests/expected/players/original/colli05/info.csv +2 -0
  134. brlib-0.3.0/tests/expected/players/original/cormirh01/batting.csv +31 -0
  135. brlib-0.3.0/tests/expected/players/original/cormirh01/bling.csv +2 -0
  136. brlib-0.3.0/tests/expected/players/original/cormirh01/fielding.csv +23 -0
  137. brlib-0.3.0/tests/expected/players/original/cormirh01/info.csv +2 -0
  138. brlib-0.3.0/tests/expected/players/original/cormirh01/pitching.csv +32 -0
  139. brlib-0.3.0/tests/expected/players/original/cormirh01/teams.json +1 -0
  140. brlib-0.3.0/tests/expected/players/original/gibsojo99/info.csv +2 -0
  141. brlib-0.3.0/tests/expected/players/original/hallaro01/info.csv +2 -0
  142. brlib-0.3.0/tests/expected/players/original/jacksre01/info.csv +2 -0
  143. brlib-0.3.0/tests/expected/players/original/kigerma01/info.csv +2 -0
  144. brlib-0.3.0/tests/expected/players/original/pressry01/info.csv +2 -0
  145. brlib-0.3.0/tests/expected/players/original/vogtst01/info.csv +2 -0
  146. brlib-0.3.0/tests/expected/players/original/vogtst01/relatives.json +1 -0
  147. brlib-0.3.0/tests/expected/players/updated/aloumo01/info.csv +2 -0
  148. brlib-0.3.0/tests/expected/players/updated/bendech01/info.csv +2 -0
  149. brlib-0.3.0/tests/expected/players/updated/colli05/info.csv +2 -0
  150. brlib-0.3.0/tests/expected/players/updated/cormirh01/info.csv +2 -0
  151. brlib-0.3.0/tests/expected/players/updated/cormirh01/pitching.csv +32 -0
  152. brlib-0.3.0/tests/expected/players/updated/gibsojo99/info.csv +2 -0
  153. brlib-0.3.0/tests/expected/players/updated/hallaro01/info.csv +2 -0
  154. brlib-0.3.0/tests/expected/players/updated/jacksre01/info.csv +2 -0
  155. brlib-0.3.0/tests/expected/players/updated/kigerma01/info.csv +2 -0
  156. brlib-0.3.0/tests/expected/players/updated/pressry01/info.csv +2 -0
  157. brlib-0.3.0/tests/expected/players/updated/vogtst01/info.csv +2 -0
  158. brlib-0.3.0/tests/expected/teams/original/BBB1924/info.csv +2 -0
  159. brlib-0.3.0/tests/expected/teams/original/BEG1939/info.csv +2 -0
  160. brlib-0.3.0/tests/expected/teams/original/CHC2020/info.csv +2 -0
  161. brlib-0.3.0/tests/expected/teams/original/COT1932/info.csv +2 -0
  162. brlib-0.3.0/tests/expected/teams/original/HOU2022/info.csv +2 -0
  163. brlib-0.3.0/tests/expected/teams/original/LAA2012/info.csv +2 -0
  164. brlib-0.3.0/tests/expected/teams/original/SEA2012/info.csv +2 -0
  165. brlib-0.3.0/tests/expected/teams/original/WSH1904/info.csv +2 -0
  166. brlib-0.3.0/tests/expected/teams/records.csv +9 -0
  167. brlib-0.3.0/tests/expected/teams/updated/BBB1924/info.csv +2 -0
  168. brlib-0.3.0/tests/expected/teams/updated/BEG1939/info.csv +2 -0
  169. brlib-0.3.0/tests/expected/teams/updated/CHC2020/info.csv +2 -0
  170. brlib-0.3.0/tests/expected/teams/updated/COT1932/info.csv +2 -0
  171. brlib-0.3.0/tests/expected/teams/updated/HOU2022/info.csv +2 -0
  172. brlib-0.3.0/tests/expected/teams/updated/LAA2012/info.csv +2 -0
  173. brlib-0.3.0/tests/expected/teams/updated/SEA2012/info.csv +2 -0
  174. brlib-0.3.0/tests/expected/teams/updated/WSH1904/info.csv +2 -0
  175. brlib-0.3.0/tests/get_expected.py +45 -0
  176. brlib-0.3.0/tests/test_all_players.py +36 -0
  177. brlib-0.3.0/tests/test_find_asg.py +41 -0
  178. brlib-0.3.0/tests/test_find_games.py +112 -0
  179. brlib-0.3.0/tests/test_find_teams.py +76 -0
  180. brlib-0.3.0/tests/test_game.py +148 -0
  181. brlib-0.3.0/tests/test_game_set.py +89 -0
  182. brlib-0.3.0/tests/test_player.py +90 -0
  183. brlib-0.3.0/tests/test_player_set.py +54 -0
  184. brlib-0.3.0/tests/test_team.py +92 -0
  185. brlib-0.3.0/tests/test_team_set.py +65 -0
  186. brlib-0.2.0/.github/workflows/test.yml +0 -34
  187. brlib-0.2.0/src/brlib/_helpers/__init__.py +0 -0
  188. brlib-0.2.0/src/brlib/_helpers/requests_manager.py +0 -62
  189. brlib-0.2.0/src/brlib/get_games.py +0 -74
  190. brlib-0.2.0/src/brlib/get_players.py +0 -70
  191. brlib-0.2.0/src/brlib/get_teams.py +0 -70
  192. brlib-0.2.0/tests/expected/games/original/1961-allstar-game-1/info.csv +0 -2
  193. brlib-0.2.0/tests/expected/games/original/2025-allstar-game/info.csv +0 -2
  194. brlib-0.2.0/tests/expected/games/original/2025-allstar-game/team_info.csv +0 -3
  195. brlib-0.2.0/tests/expected/games/updated/1961-allstar-game-1/info.csv +0 -2
  196. brlib-0.2.0/tests/expected/games/updated/2025-allstar-game/info.csv +0 -2
  197. brlib-0.2.0/tests/expected/games/updated/2025-allstar-game/team_info.csv +0 -3
  198. brlib-0.2.0/tests/expected/players/original/aloumo01/info.csv +0 -2
  199. brlib-0.2.0/tests/expected/players/original/bendech01/info.csv +0 -2
  200. brlib-0.2.0/tests/expected/players/original/colli05/info.csv +0 -2
  201. brlib-0.2.0/tests/expected/players/original/gibsojo99/info.csv +0 -2
  202. brlib-0.2.0/tests/expected/players/original/hallaro01/info.csv +0 -2
  203. brlib-0.2.0/tests/expected/players/original/jacksre01/info.csv +0 -2
  204. brlib-0.2.0/tests/expected/players/original/kigerma01/info.csv +0 -2
  205. brlib-0.2.0/tests/expected/players/original/pressry01/info.csv +0 -2
  206. brlib-0.2.0/tests/expected/players/original/vogtst01/info.csv +0 -2
  207. brlib-0.2.0/tests/expected/players/updated/aloumo01/info.csv +0 -2
  208. brlib-0.2.0/tests/expected/players/updated/bendech01/info.csv +0 -2
  209. brlib-0.2.0/tests/expected/players/updated/colli05/info.csv +0 -2
  210. brlib-0.2.0/tests/expected/players/updated/gibsojo99/info.csv +0 -2
  211. brlib-0.2.0/tests/expected/players/updated/hallaro01/info.csv +0 -2
  212. brlib-0.2.0/tests/expected/players/updated/jacksre01/info.csv +0 -2
  213. brlib-0.2.0/tests/expected/players/updated/kigerma01/info.csv +0 -2
  214. brlib-0.2.0/tests/expected/players/updated/pressry01/info.csv +0 -2
  215. brlib-0.2.0/tests/expected/players/updated/vogtst01/info.csv +0 -2
  216. brlib-0.2.0/tests/expected/teams/original/BBB1924/info.csv +0 -2
  217. brlib-0.2.0/tests/expected/teams/original/BEG1939/info.csv +0 -2
  218. brlib-0.2.0/tests/expected/teams/original/CHC2020/info.csv +0 -2
  219. brlib-0.2.0/tests/expected/teams/original/COT1932/info.csv +0 -2
  220. brlib-0.2.0/tests/expected/teams/original/HOU2022/info.csv +0 -2
  221. brlib-0.2.0/tests/expected/teams/original/LAA2012/info.csv +0 -2
  222. brlib-0.2.0/tests/expected/teams/original/SEA2012/info.csv +0 -2
  223. brlib-0.2.0/tests/expected/teams/original/WSH1904/info.csv +0 -2
  224. brlib-0.2.0/tests/expected/teams/updated/BBB1924/info.csv +0 -2
  225. brlib-0.2.0/tests/expected/teams/updated/BEG1939/info.csv +0 -2
  226. brlib-0.2.0/tests/expected/teams/updated/CHC2020/info.csv +0 -2
  227. brlib-0.2.0/tests/expected/teams/updated/COT1932/info.csv +0 -2
  228. brlib-0.2.0/tests/expected/teams/updated/HOU2022/info.csv +0 -2
  229. brlib-0.2.0/tests/expected/teams/updated/LAA2012/info.csv +0 -2
  230. brlib-0.2.0/tests/expected/teams/updated/SEA2012/info.csv +0 -2
  231. brlib-0.2.0/tests/expected/teams/updated/WSH1904/info.csv +0 -2
  232. brlib-0.2.0/tests/test_all_major_leaguers.py +0 -23
  233. brlib-0.2.0/tests/test_game.py +0 -119
  234. brlib-0.2.0/tests/test_player.py +0 -79
  235. brlib-0.2.0/tests/test_team.py +0 -75
  236. {brlib-0.2.0 → brlib-0.3.0}/LICENSE.txt +0 -0
  237. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/1961-allstar-game-1/linescore.csv +0 -0
  238. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/1961-allstar-game-1/pitching.csv +0 -0
  239. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/1961-allstar-game-1/players.json +0 -0
  240. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/1961-allstar-game-1/team_info.csv +0 -0
  241. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/1961-allstar-game-1/teams.json +0 -0
  242. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/1961-allstar-game-1/ump_info.csv +0 -0
  243. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/2025-allstar-game/linescore.csv +0 -0
  244. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/2025-allstar-game/players.json +0 -0
  245. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/2025-allstar-game/teams.json +0 -0
  246. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/2025-allstar-game/ump_info.csv +0 -0
  247. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/ANA202305090/linescore.csv +0 -0
  248. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/ANA202305090/pitching.csv +0 -0
  249. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/ANA202305090/players.json +0 -0
  250. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/ANA202305090/team_info.csv +0 -0
  251. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/ANA202305090/teams.json +0 -0
  252. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/ANA202305090/ump_info.csv +0 -0
  253. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/BOS201708250/linescore.csv +0 -0
  254. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/BOS201708250/pitching.csv +0 -0
  255. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/BOS201708250/players.json +0 -0
  256. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/BOS201708250/team_info.csv +0 -0
  257. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/BOS201708250/teams.json +0 -0
  258. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/BOS201708250/ump_info.csv +0 -0
  259. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/FLO199407290/linescore.csv +0 -0
  260. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/FLO199407290/pitching.csv +0 -0
  261. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/FLO199407290/players.json +0 -0
  262. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/FLO199407290/team_info.csv +0 -0
  263. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/FLO199407290/teams.json +0 -0
  264. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/FLO199407290/ump_info.csv +0 -0
  265. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/MLA190105301/linescore.csv +0 -0
  266. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/MLA190105301/pitching.csv +0 -0
  267. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/MLA190105301/players.json +0 -0
  268. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/MLA190105301/team_info.csv +0 -0
  269. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/MLA190105301/teams.json +0 -0
  270. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/MLA190105301/ump_info.csv +0 -0
  271. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/NYN200908230/linescore.csv +0 -0
  272. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/NYN200908230/pitching.csv +0 -0
  273. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/NYN200908230/players.json +0 -0
  274. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/NYN200908230/team_info.csv +0 -0
  275. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/NYN200908230/teams.json +0 -0
  276. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/NYN200908230/ump_info.csv +0 -0
  277. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/PHI202211020/linescore.csv +0 -0
  278. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/PHI202211020/pitching.csv +0 -0
  279. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/PHI202211020/players.json +0 -0
  280. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/PHI202211020/team_info.csv +0 -0
  281. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/PHI202211020/teams.json +0 -0
  282. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/PHI202211020/ump_info.csv +0 -0
  283. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/PIT192010023/linescore.csv +0 -0
  284. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/PIT192010023/pitching.csv +0 -0
  285. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/PIT192010023/players.json +0 -0
  286. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/PIT192010023/team_info.csv +0 -0
  287. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/PIT192010023/teams.json +0 -0
  288. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/PIT192010023/ump_info.csv +0 -0
  289. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/SEA197805231/linescore.csv +0 -0
  290. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/SEA197805231/pitching.csv +0 -0
  291. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/SEA197805231/players.json +0 -0
  292. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/SEA197805231/team_info.csv +0 -0
  293. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/SEA197805231/teams.json +0 -0
  294. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/SEA197805231/ump_info.csv +0 -0
  295. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/SEA201208150/linescore.csv +0 -0
  296. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/SEA201208150/pitching.csv +0 -0
  297. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/SEA201208150/players.json +0 -0
  298. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/SEA201208150/team_info.csv +0 -0
  299. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/SEA201208150/teams.json +0 -0
  300. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/SEA201208150/ump_info.csv +0 -0
  301. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/SEA201804190/linescore.csv +0 -0
  302. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/SEA201804190/pitching.csv +0 -0
  303. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/SEA201804190/players.json +0 -0
  304. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/SEA201804190/team_info.csv +0 -0
  305. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/SEA201804190/teams.json +0 -0
  306. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/SEA201804190/ump_info.csv +0 -0
  307. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/SEA201905270/linescore.csv +0 -0
  308. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/SEA201905270/pitching.csv +0 -0
  309. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/SEA201905270/players.json +0 -0
  310. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/SEA201905270/team_info.csv +0 -0
  311. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/SEA201905270/teams.json +0 -0
  312. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/SEA201905270/ump_info.csv +0 -0
  313. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/SEA202210150/linescore.csv +0 -0
  314. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/SEA202210150/pitching.csv +0 -0
  315. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/SEA202210150/players.json +0 -0
  316. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/SEA202210150/team_info.csv +0 -0
  317. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/SEA202210150/teams.json +0 -0
  318. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/SEA202210150/ump_info.csv +0 -0
  319. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/SLN190710051/linescore.csv +0 -0
  320. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/SLN190710051/pitching.csv +0 -0
  321. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/SLN190710051/players.json +0 -0
  322. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/SLN190710051/team_info.csv +0 -0
  323. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/SLN190710051/teams.json +0 -0
  324. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/original/SLN190710051/ump_info.csv +0 -0
  325. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/updated/1961-allstar-game-1/linescore.csv +0 -0
  326. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/updated/1961-allstar-game-1/pitching.csv +0 -0
  327. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/updated/1961-allstar-game-1/team_info.csv +0 -0
  328. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/updated/2025-allstar-game/linescore.csv +0 -0
  329. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/updated/ANA202305090/linescore.csv +0 -0
  330. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/updated/ANA202305090/pitching.csv +0 -0
  331. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/updated/ANA202305090/team_info.csv +0 -0
  332. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/updated/BOS201708250/linescore.csv +0 -0
  333. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/updated/BOS201708250/pitching.csv +0 -0
  334. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/updated/BOS201708250/team_info.csv +0 -0
  335. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/updated/FLO199407290/linescore.csv +0 -0
  336. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/updated/FLO199407290/pitching.csv +0 -0
  337. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/updated/FLO199407290/team_info.csv +0 -0
  338. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/updated/MLA190105301/linescore.csv +0 -0
  339. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/updated/MLA190105301/pitching.csv +0 -0
  340. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/updated/MLA190105301/team_info.csv +0 -0
  341. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/updated/NYN200908230/linescore.csv +0 -0
  342. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/updated/NYN200908230/pitching.csv +0 -0
  343. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/updated/NYN200908230/team_info.csv +0 -0
  344. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/updated/PHI202211020/linescore.csv +0 -0
  345. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/updated/PHI202211020/pitching.csv +0 -0
  346. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/updated/PHI202211020/team_info.csv +0 -0
  347. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/updated/PIT192010023/linescore.csv +0 -0
  348. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/updated/PIT192010023/pitching.csv +0 -0
  349. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/updated/PIT192010023/team_info.csv +0 -0
  350. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/updated/SEA197805231/linescore.csv +0 -0
  351. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/updated/SEA197805231/pitching.csv +0 -0
  352. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/updated/SEA197805231/team_info.csv +0 -0
  353. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/updated/SEA201208150/linescore.csv +0 -0
  354. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/updated/SEA201208150/pitching.csv +0 -0
  355. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/updated/SEA201208150/team_info.csv +0 -0
  356. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/updated/SEA201804190/linescore.csv +0 -0
  357. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/updated/SEA201804190/pitching.csv +0 -0
  358. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/updated/SEA201804190/team_info.csv +0 -0
  359. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/updated/SEA201905270/linescore.csv +0 -0
  360. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/updated/SEA201905270/pitching.csv +0 -0
  361. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/updated/SEA201905270/team_info.csv +0 -0
  362. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/updated/SEA202210150/linescore.csv +0 -0
  363. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/updated/SEA202210150/pitching.csv +0 -0
  364. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/updated/SEA202210150/team_info.csv +0 -0
  365. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/updated/SLN190710051/linescore.csv +0 -0
  366. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/updated/SLN190710051/pitching.csv +0 -0
  367. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/games/updated/SLN190710051/team_info.csv +0 -0
  368. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/players/original/aloumo01/batting.csv +0 -0
  369. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/players/original/aloumo01/bling.csv +0 -0
  370. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/players/original/aloumo01/fielding.csv +0 -0
  371. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/players/original/aloumo01/pitching.csv +0 -0
  372. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/players/original/aloumo01/relatives.json +0 -0
  373. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/players/original/aloumo01/teams.json +0 -0
  374. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/players/original/bendech01/batting.csv +0 -0
  375. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/players/original/bendech01/bling.csv +0 -0
  376. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/players/original/bendech01/fielding.csv +0 -0
  377. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/players/original/bendech01/pitching.csv +0 -0
  378. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/players/original/bendech01/relatives.json +0 -0
  379. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/players/original/bendech01/teams.json +0 -0
  380. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/players/original/colli05/batting.csv +0 -0
  381. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/players/original/colli05/bling.csv +0 -0
  382. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/players/original/colli05/fielding.csv +0 -0
  383. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/players/original/colli05/pitching.csv +0 -0
  384. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/players/original/colli05/relatives.json +0 -0
  385. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/players/original/colli05/teams.json +0 -0
  386. {brlib-0.2.0/tests/expected/players/original/gibsojo99 → brlib-0.3.0/tests/expected/players/original/cormirh01}/relatives.json +0 -0
  387. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/players/original/gibsojo99/batting.csv +0 -0
  388. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/players/original/gibsojo99/bling.csv +0 -0
  389. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/players/original/gibsojo99/fielding.csv +0 -0
  390. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/players/original/gibsojo99/pitching.csv +0 -0
  391. {brlib-0.2.0/tests/expected/players/original/hallaro01 → brlib-0.3.0/tests/expected/players/original/gibsojo99}/relatives.json +0 -0
  392. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/players/original/gibsojo99/teams.json +0 -0
  393. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/players/original/hallaro01/batting.csv +0 -0
  394. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/players/original/hallaro01/bling.csv +0 -0
  395. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/players/original/hallaro01/fielding.csv +0 -0
  396. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/players/original/hallaro01/pitching.csv +0 -0
  397. {brlib-0.2.0/tests/expected/players/original/kigerma01 → brlib-0.3.0/tests/expected/players/original/hallaro01}/relatives.json +0 -0
  398. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/players/original/hallaro01/teams.json +0 -0
  399. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/players/original/jacksre01/batting.csv +0 -0
  400. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/players/original/jacksre01/bling.csv +0 -0
  401. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/players/original/jacksre01/fielding.csv +0 -0
  402. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/players/original/jacksre01/pitching.csv +0 -0
  403. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/players/original/jacksre01/relatives.json +0 -0
  404. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/players/original/jacksre01/teams.json +0 -0
  405. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/players/original/kigerma01/batting.csv +0 -0
  406. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/players/original/kigerma01/bling.csv +0 -0
  407. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/players/original/kigerma01/fielding.csv +0 -0
  408. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/players/original/kigerma01/pitching.csv +0 -0
  409. {brlib-0.2.0/tests/expected/players/original/pressry01 → brlib-0.3.0/tests/expected/players/original/kigerma01}/relatives.json +0 -0
  410. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/players/original/kigerma01/teams.json +0 -0
  411. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/players/original/pressry01/batting.csv +0 -0
  412. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/players/original/pressry01/bling.csv +0 -0
  413. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/players/original/pressry01/fielding.csv +0 -0
  414. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/players/original/pressry01/pitching.csv +0 -0
  415. {brlib-0.2.0/tests/expected/players/original/vogtst01 → brlib-0.3.0/tests/expected/players/original/pressry01}/relatives.json +0 -0
  416. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/players/original/pressry01/teams.json +0 -0
  417. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/players/original/vogtst01/batting.csv +0 -0
  418. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/players/original/vogtst01/bling.csv +0 -0
  419. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/players/original/vogtst01/fielding.csv +0 -0
  420. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/players/original/vogtst01/pitching.csv +0 -0
  421. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/players/original/vogtst01/teams.json +0 -0
  422. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/players/updated/aloumo01/pitching.csv +0 -0
  423. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/players/updated/bendech01/pitching.csv +0 -0
  424. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/players/updated/colli05/pitching.csv +0 -0
  425. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/players/updated/gibsojo99/pitching.csv +0 -0
  426. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/players/updated/hallaro01/pitching.csv +0 -0
  427. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/players/updated/jacksre01/pitching.csv +0 -0
  428. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/players/updated/kigerma01/pitching.csv +0 -0
  429. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/players/updated/pressry01/pitching.csv +0 -0
  430. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/players/updated/vogtst01/pitching.csv +0 -0
  431. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/teams/original/BBB1924/batting.csv +0 -0
  432. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/teams/original/BBB1924/fielding.csv +0 -0
  433. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/teams/original/BBB1924/pitching.csv +0 -0
  434. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/teams/original/BBB1924/players.json +0 -0
  435. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/teams/original/BEG1939/batting.csv +0 -0
  436. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/teams/original/BEG1939/fielding.csv +0 -0
  437. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/teams/original/BEG1939/pitching.csv +0 -0
  438. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/teams/original/BEG1939/players.json +0 -0
  439. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/teams/original/CHC2020/batting.csv +0 -0
  440. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/teams/original/CHC2020/fielding.csv +0 -0
  441. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/teams/original/CHC2020/pitching.csv +0 -0
  442. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/teams/original/CHC2020/players.json +0 -0
  443. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/teams/original/COT1932/batting.csv +0 -0
  444. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/teams/original/COT1932/fielding.csv +0 -0
  445. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/teams/original/COT1932/pitching.csv +0 -0
  446. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/teams/original/COT1932/players.json +0 -0
  447. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/teams/original/HOU2022/batting.csv +0 -0
  448. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/teams/original/HOU2022/fielding.csv +0 -0
  449. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/teams/original/HOU2022/pitching.csv +0 -0
  450. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/teams/original/HOU2022/players.json +0 -0
  451. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/teams/original/LAA2012/batting.csv +0 -0
  452. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/teams/original/LAA2012/fielding.csv +0 -0
  453. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/teams/original/LAA2012/pitching.csv +0 -0
  454. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/teams/original/LAA2012/players.json +0 -0
  455. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/teams/original/SEA2012/batting.csv +0 -0
  456. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/teams/original/SEA2012/fielding.csv +0 -0
  457. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/teams/original/SEA2012/pitching.csv +0 -0
  458. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/teams/original/SEA2012/players.json +0 -0
  459. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/teams/original/WSH1904/batting.csv +0 -0
  460. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/teams/original/WSH1904/fielding.csv +0 -0
  461. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/teams/original/WSH1904/pitching.csv +0 -0
  462. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/teams/original/WSH1904/players.json +0 -0
  463. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/teams/updated/BBB1924/batting.csv +0 -0
  464. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/teams/updated/BBB1924/fielding.csv +0 -0
  465. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/teams/updated/BBB1924/pitching.csv +0 -0
  466. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/teams/updated/BEG1939/batting.csv +0 -0
  467. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/teams/updated/BEG1939/fielding.csv +0 -0
  468. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/teams/updated/BEG1939/pitching.csv +0 -0
  469. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/teams/updated/CHC2020/batting.csv +0 -0
  470. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/teams/updated/CHC2020/fielding.csv +0 -0
  471. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/teams/updated/CHC2020/pitching.csv +0 -0
  472. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/teams/updated/COT1932/batting.csv +0 -0
  473. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/teams/updated/COT1932/fielding.csv +0 -0
  474. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/teams/updated/COT1932/pitching.csv +0 -0
  475. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/teams/updated/HOU2022/batting.csv +0 -0
  476. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/teams/updated/HOU2022/fielding.csv +0 -0
  477. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/teams/updated/HOU2022/pitching.csv +0 -0
  478. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/teams/updated/LAA2012/batting.csv +0 -0
  479. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/teams/updated/LAA2012/fielding.csv +0 -0
  480. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/teams/updated/LAA2012/pitching.csv +0 -0
  481. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/teams/updated/SEA2012/batting.csv +0 -0
  482. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/teams/updated/SEA2012/fielding.csv +0 -0
  483. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/teams/updated/SEA2012/pitching.csv +0 -0
  484. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/teams/updated/WSH1904/batting.csv +0 -0
  485. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/teams/updated/WSH1904/fielding.csv +0 -0
  486. {brlib-0.2.0 → brlib-0.3.0}/tests/expected/teams/updated/WSH1904/pitching.csv +0 -0
@@ -0,0 +1,47 @@
1
+ name: Full Tests
2
+
3
+ on:
4
+ # to be run before releases
5
+ workflow_dispatch:
6
+
7
+ jobs:
8
+ pytest:
9
+ runs-on: ${{ matrix.os }}
10
+
11
+ strategy:
12
+ matrix:
13
+ os: [ubuntu-latest, windows-latest, macos-latest]
14
+ python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"]
15
+ resolution: ['highest']
16
+ include:
17
+ - os: ubuntu-latest
18
+ python-version: "3.10"
19
+ resolution: 'lowest-direct'
20
+ - os: windows-latest
21
+ python-version: "3.10"
22
+ resolution: 'lowest-direct'
23
+ - os: macos-latest
24
+ # there's no 3.10 wheel for lxml on ARM64 macOS
25
+ python-version: "3.11"
26
+ resolution: 'lowest-direct'
27
+
28
+ steps:
29
+ - name: Checkout code
30
+ uses: actions/checkout@v6
31
+
32
+ - name: Install uv
33
+ uses: astral-sh/setup-uv@v7
34
+ with:
35
+ enable-cache: true
36
+
37
+ - name: Install Python ${{ matrix.python-version }}
38
+ run: uv python install ${{ matrix.python-version }}
39
+
40
+ - name: Create virtual environment
41
+ run: uv venv
42
+
43
+ - name: Install brlib
44
+ run: uv pip install --resolution ${{ matrix.resolution }} -e .[dev]
45
+
46
+ - name: Run pytest
47
+ run: uv run pytest
@@ -16,7 +16,7 @@ jobs:
16
16
  - name: Set up Python
17
17
  uses: actions/setup-python@v6
18
18
  with:
19
- python-version: "3.x"
19
+ python-version: "3.14"
20
20
 
21
21
  - name: Install pypa/build
22
22
  run: python3 -m pip install build --user
@@ -25,7 +25,7 @@ jobs:
25
25
  run: python3 -m build
26
26
 
27
27
  - name: Store the distribution packages
28
- uses: actions/upload-artifact@v5
28
+ uses: actions/upload-artifact@v6
29
29
  with:
30
30
  name: python-package-distributions
31
31
  path: dist/
@@ -41,10 +41,10 @@ jobs:
41
41
  id-token: write
42
42
 
43
43
  steps:
44
- - name: Download the dists
45
- uses: actions/download-artifact@v6
46
- with:
47
- name: python-package-distributions
48
- path: dist/
49
- - name: Publish distribution
50
- uses: pypa/gh-action-pypi-publish@release/v1
44
+ - name: Download the dists
45
+ uses: actions/download-artifact@v6
46
+ with:
47
+ name: python-package-distributions
48
+ path: dist/
49
+ - name: Publish distribution
50
+ uses: pypa/gh-action-pypi-publish@release/v1
@@ -0,0 +1,49 @@
1
+ name: Tests
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - '**'
7
+ schedule:
8
+ # run at 12 UTC, hopefully after BR's daily in-season updates
9
+ # run weekly, because anything more would be overkill
10
+ - cron: '0 12 * * 6'
11
+
12
+ jobs:
13
+ pytest:
14
+ runs-on: ${{ matrix.os }}
15
+
16
+ strategy:
17
+ matrix:
18
+ os: [ubuntu-latest, windows-latest]
19
+ python-version: ["3.10", "3.14"]
20
+ exclude:
21
+ - os: windows-latest
22
+ python-version: "3.10"
23
+
24
+ steps:
25
+ - name: Checkout code
26
+ uses: actions/checkout@v6
27
+
28
+ - name: Install uv
29
+ uses: astral-sh/setup-uv@v7
30
+ with:
31
+ enable-cache: true
32
+
33
+ - name: Install Python ${{ matrix.python-version }}
34
+ run: uv python install ${{ matrix.python-version }}
35
+
36
+ - name: Create virtual environment
37
+ run: uv venv
38
+
39
+ - name: Install brlib
40
+ run: uv pip install --resolution highest -e .[dev]
41
+
42
+ - name: Check import sorting with isort
43
+ run: uv run isort --check-only .
44
+
45
+ - name: Check formatting with Black
46
+ run: uv run black --check .
47
+
48
+ - name: Run pytest
49
+ run: uv run pytest
@@ -1,50 +1,66 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: brlib
3
- Version: 0.2.0
3
+ Version: 0.3.0
4
4
  Summary: A library for collecting baseball statistics from Baseball Reference
5
- Project-URL: Homepage, https://github.com/john-bieren/brlib
6
5
  Project-URL: Documentation, https://github.com/john-bieren/brlib/wiki
7
- Project-URL: Repository, https://github.com/john-bieren/brlib.git
6
+ Project-URL: GitHub, https://github.com/john-bieren/brlib
8
7
  Project-URL: Issues, https://github.com/john-bieren/brlib/issues
8
+ Project-URL: Release Notes, https://github.com/john-bieren/brlib/releases
9
9
  Author-email: John Bieren <jbieren64@gmail.com>
10
10
  License-Expression: MIT
11
11
  License-File: LICENSE.txt
12
- Keywords: baseball,baseball reference,baseball stats,mlb
12
+ Keywords: baseball,baseball reference,baseball stats,mlb,mlb stats
13
13
  Classifier: Development Status :: 4 - Beta
14
14
  Classifier: Intended Audience :: Developers
15
+ Classifier: Intended Audience :: Science/Research
16
+ Classifier: License :: OSI Approved :: MIT License
15
17
  Classifier: Operating System :: OS Independent
16
18
  Classifier: Programming Language :: Python
17
19
  Classifier: Programming Language :: Python :: 3
20
+ Classifier: Programming Language :: Python :: 3 :: Only
21
+ Classifier: Programming Language :: Python :: 3.10
22
+ Classifier: Programming Language :: Python :: 3.11
18
23
  Classifier: Programming Language :: Python :: 3.12
19
24
  Classifier: Programming Language :: Python :: 3.13
20
25
  Classifier: Programming Language :: Python :: 3.14
26
+ Classifier: Topic :: Internet :: WWW/HTTP :: Indexing/Search
27
+ Classifier: Topic :: Scientific/Engineering :: Information Analysis
21
28
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
22
- Requires-Python: >=3.12
23
- Requires-Dist: beautifulsoup4<5.0.0,>=4.14.0
24
- Requires-Dist: curl-cffi<1.0.0,>=0.13.0
25
- Requires-Dist: lxml<7.0.0,>=6.0.2
26
- Requires-Dist: pandas<3.0.0,>=2.3.0
27
- Requires-Dist: platformdirs<5.0.0,>=4.5.0
28
- Requires-Dist: tqdm<5.0.0,>=4.67.1
29
+ Requires-Python: >=3.10
30
+ Requires-Dist: beautifulsoup4<4.15.0,>=4.12.0
31
+ Requires-Dist: curl-cffi<0.15.0,>=0.11.1
32
+ Requires-Dist: lxml<7.0.0,>=5.0.0
33
+ Requires-Dist: pandas<3.0.0,>=2.2.0
34
+ Requires-Dist: platformdirs<5.0.0,>=4.0.0
35
+ Requires-Dist: tqdm<5.0.0,>=4.66.0
29
36
  Provides-Extra: dev
30
- Requires-Dist: pytest>=9.0.0; extra == 'dev'
37
+ Requires-Dist: black==26.1.0; extra == 'dev'
38
+ Requires-Dist: isort==7.0.0; extra == 'dev'
39
+ Requires-Dist: pytest>=7.0.0; extra == 'dev'
31
40
  Description-Content-Type: text/markdown
32
41
 
33
42
  # brlib
34
43
 
35
44
  [![Tests](https://github.com/john-bieren/brlib/actions/workflows/test.yml/badge.svg)](https://github.com/john-bieren/brlib/actions/workflows/test.yml)
36
45
  [![PyPI Latest Release](https://img.shields.io/pypi/v/brlib?label=PyPI&logo=pypi&logoColor=ffe873&color=0073b7)](https://pypi.org/project/brlib)
46
+ [![Python Versions](https://img.shields.io/pypi/pyversions/brlib?label=Python%20Versions)](https://pypi.org/project/brlib)
47
+ [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
48
+ [![Imports: isort](https://img.shields.io/badge/%20imports-isort-%231674b1?style=flat&labelColor=ef8336)](https://pycqa.github.io/isort/)
37
49
 
38
- A library for collecting baseball statistics from [Baseball Reference](https://www.baseball-reference.com).
50
+ A library for collecting baseball statistics from
51
+ [Baseball Reference](https://www.baseball-reference.com).
39
52
 
40
53
  > [!IMPORTANT]
41
54
  > brlib is in beta, breaking changes are possible until the release of version 1.
42
55
 
43
56
  ## Key Features
44
57
 
45
- * `Game`, `Player`, and `Team` classes give you easy access to all associated data in one place, with attributes for stats tables, information, and more.
46
- * Aggregate these into `GameSet`, `PlayerSet`, or `TeamSet` classes, which have similar attributes, for easy analysis of larger samples.
47
- * Quickly search for games, players, and teams of interest, and gather their stats without violating the [rate limit](https://www.sports-reference.com/429.html).
58
+ * `Game`, `Player`, and `Team` classes give you easy access to all associated data in one place,
59
+ with attributes for stats tables, information, and more.
60
+ * Aggregate these into `GameSet`, `PlayerSet`, or `TeamSet` classes, which have similar attributes,
61
+ for easy analysis of larger samples.
62
+ * Quickly search for games, players, and teams of interest, and gather their stats without violating
63
+ the [rate limit](https://www.sports-reference.com/429.html).
48
64
 
49
65
  Learn more by reading the documentation on the [wiki](https://github.com/john-bieren/brlib/wiki).
50
66
 
@@ -72,4 +88,5 @@ import brlib as br
72
88
 
73
89
  ## Data Use
74
90
 
75
- Since brlib gathers data from Baseball Reference, your use of this data is subject to their [data use policy](https://www.sports-reference.com/data_use.html).
91
+ Since brlib gathers data from Baseball Reference, your use of this data is subject to their
92
+ [data use policy](https://www.sports-reference.com/data_use.html).
@@ -2,17 +2,24 @@
2
2
 
3
3
  [![Tests](https://github.com/john-bieren/brlib/actions/workflows/test.yml/badge.svg)](https://github.com/john-bieren/brlib/actions/workflows/test.yml)
4
4
  [![PyPI Latest Release](https://img.shields.io/pypi/v/brlib?label=PyPI&logo=pypi&logoColor=ffe873&color=0073b7)](https://pypi.org/project/brlib)
5
+ [![Python Versions](https://img.shields.io/pypi/pyversions/brlib?label=Python%20Versions)](https://pypi.org/project/brlib)
6
+ [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
7
+ [![Imports: isort](https://img.shields.io/badge/%20imports-isort-%231674b1?style=flat&labelColor=ef8336)](https://pycqa.github.io/isort/)
5
8
 
6
- A library for collecting baseball statistics from [Baseball Reference](https://www.baseball-reference.com).
9
+ A library for collecting baseball statistics from
10
+ [Baseball Reference](https://www.baseball-reference.com).
7
11
 
8
12
  > [!IMPORTANT]
9
13
  > brlib is in beta, breaking changes are possible until the release of version 1.
10
14
 
11
15
  ## Key Features
12
16
 
13
- * `Game`, `Player`, and `Team` classes give you easy access to all associated data in one place, with attributes for stats tables, information, and more.
14
- * Aggregate these into `GameSet`, `PlayerSet`, or `TeamSet` classes, which have similar attributes, for easy analysis of larger samples.
15
- * Quickly search for games, players, and teams of interest, and gather their stats without violating the [rate limit](https://www.sports-reference.com/429.html).
17
+ * `Game`, `Player`, and `Team` classes give you easy access to all associated data in one place,
18
+ with attributes for stats tables, information, and more.
19
+ * Aggregate these into `GameSet`, `PlayerSet`, or `TeamSet` classes, which have similar attributes,
20
+ for easy analysis of larger samples.
21
+ * Quickly search for games, players, and teams of interest, and gather their stats without violating
22
+ the [rate limit](https://www.sports-reference.com/429.html).
16
23
 
17
24
  Learn more by reading the documentation on the [wiki](https://github.com/john-bieren/brlib/wiki).
18
25
 
@@ -40,4 +47,5 @@ import brlib as br
40
47
 
41
48
  ## Data Use
42
49
 
43
- Since brlib gathers data from Baseball Reference, your use of this data is subject to their [data use policy](https://www.sports-reference.com/data_use.html).
50
+ Since brlib gathers data from Baseball Reference, your use of this data is subject to their
51
+ [data use policy](https://www.sports-reference.com/data_use.html).
@@ -7,14 +7,14 @@ name = "brlib"
7
7
  description = "A library for collecting baseball statistics from Baseball Reference"
8
8
  authors = [{ name = "John Bieren", email = "jbieren64@gmail.com" }]
9
9
  dynamic = ["version"]
10
- requires-python = ">=3.12"
10
+ requires-python = ">=3.10"
11
11
  dependencies = [
12
- "pandas>=2.3.0,<3.0.0",
13
- "beautifulsoup4>=4.14.0,<5.0.0",
14
- "tqdm>=4.67.1,<5.0.0",
15
- "curl-cffi>=0.13.0,<1.0.0",
16
- "lxml>=6.0.2,<7.0.0",
17
- "platformdirs>=4.5.0,<5.0.0"
12
+ "beautifulsoup4>=4.12.0,<4.15.0",
13
+ "curl-cffi>=0.11.1,<0.15.0",
14
+ "lxml>=5.0.0,<7.0.0",
15
+ "pandas>=2.2.0,<3.0.0",
16
+ "platformdirs>=4.0.0,<5.0.0",
17
+ "tqdm>=4.66.0,<5.0.0"
18
18
  ]
19
19
  readme = "README.md"
20
20
  license = "MIT"
@@ -22,24 +22,35 @@ license-files = ["LICENSE.txt"]
22
22
  classifiers = [
23
23
  "Development Status :: 4 - Beta",
24
24
  "Intended Audience :: Developers",
25
- "Topic :: Software Development :: Libraries :: Python Modules",
25
+ "Intended Audience :: Science/Research",
26
+ "License :: OSI Approved :: MIT License",
27
+ "Operating System :: OS Independent",
26
28
  "Programming Language :: Python",
27
29
  "Programming Language :: Python :: 3",
30
+ "Programming Language :: Python :: 3 :: Only",
31
+ "Programming Language :: Python :: 3.10",
32
+ "Programming Language :: Python :: 3.11",
28
33
  "Programming Language :: Python :: 3.12",
29
34
  "Programming Language :: Python :: 3.13",
30
35
  "Programming Language :: Python :: 3.14",
31
- "Operating System :: OS Independent",
36
+ "Topic :: Internet :: WWW/HTTP :: Indexing/Search",
37
+ "Topic :: Scientific/Engineering :: Information Analysis",
38
+ "Topic :: Software Development :: Libraries :: Python Modules",
32
39
  ]
33
- keywords = ["baseball reference", "baseball", "baseball stats", "mlb"]
40
+ keywords = ["baseball reference", "baseball", "baseball stats", "mlb", "mlb stats"]
34
41
 
35
42
  [project.optional-dependencies]
36
- dev = ["pytest>=9.0.0"]
43
+ dev = [
44
+ "black==26.1.0",
45
+ "isort==7.0.0",
46
+ "pytest>=7.0.0"
47
+ ]
37
48
 
38
49
  [project.urls]
39
- Homepage = "https://github.com/john-bieren/brlib"
40
50
  Documentation = "https://github.com/john-bieren/brlib/wiki"
41
- Repository = "https://github.com/john-bieren/brlib.git"
51
+ GitHub = "https://github.com/john-bieren/brlib"
42
52
  Issues = "https://github.com/john-bieren/brlib/issues"
53
+ "Release Notes" = "https://github.com/john-bieren/brlib/releases"
43
54
 
44
55
  [tool.hatch.version]
45
56
  path = "src/brlib/__init__.py"
@@ -47,3 +58,12 @@ path = "src/brlib/__init__.py"
47
58
  [tool.pytest.ini_options]
48
59
  testpaths = ["tests"]
49
60
  pythonpath = ["src"]
61
+
62
+ [tool.black]
63
+ line-length = 100
64
+ target-version = ["py310", "py311", "py312", "py313", "py314"]
65
+
66
+ [tool.isort]
67
+ profile = "black"
68
+ line_length = 100
69
+ known_first_party = ["brlib"]
@@ -0,0 +1,57 @@
1
+ #!/usr/bin/env python3
2
+
3
+ """
4
+ Copies public member docstrings into Markdown files in an adjacent "wiki" directory,
5
+ presumably a clone of brlib's GitHub wiki repo. This is used to refresh the wiki's contents.
6
+ """
7
+
8
+ import inspect
9
+ from pathlib import Path
10
+
11
+ import brlib
12
+
13
+
14
+ def main() -> None:
15
+ """
16
+ Copies public member docstrings into Markdown files in an adjacent "wiki" directory,
17
+ presumably a clone of brlib's GitHub wiki repo. This is used to refresh the wiki's contents.
18
+ """
19
+ wiki_dir = Path(__file__).parent.parent / "wiki"
20
+ public_members = {
21
+ name: mem for name, mem in inspect.getmembers(brlib) if not name.startswith("_")
22
+ }
23
+
24
+ for member_name, member in public_members.items():
25
+ if inspect.ismodule(member):
26
+ continue
27
+ file_path = wiki_dir / f"{member_name}.md"
28
+ file_path.write_text(clean_docstring(member.__doc__), encoding="UTF-8")
29
+
30
+ # for classes or variables which are the instantiation of a singleton class
31
+ if not inspect.isfunction(member):
32
+ # create files for each of the class's public methods
33
+ methods = inspect.getmembers(member, predicate=is_function_or_method)
34
+ public_methods = {name: mem for name, mem in methods if not name.startswith("_")}
35
+ for method_name, method in public_methods.items():
36
+ file_path = wiki_dir / f"{member_name}.{method_name}.md"
37
+ file_path.write_text(clean_docstring(method.__doc__), encoding="UTF-8")
38
+
39
+
40
+ def clean_docstring(docstring: str) -> str:
41
+ """Reformat whitespace in `docstring`."""
42
+ # remove leading newline
43
+ if docstring[0] == "\n":
44
+ docstring = docstring[1:]
45
+ return docstring
46
+
47
+
48
+ def is_function_or_method(member: object) -> bool:
49
+ """
50
+ Checks whether `inspect.isfunction` or `inspect.ismethod` is `True`. `isfunction` finds methods
51
+ if `member` is a class, and `ismethod` finds methods if `member` is a class instance.
52
+ """
53
+ return inspect.isfunction(member) or inspect.ismethod(member)
54
+
55
+
56
+ if __name__ == "__main__":
57
+ main()
@@ -1,4 +1,11 @@
1
- from .all_major_leaguers import all_major_leaguers
1
+ """
2
+ A library for collecting baseball statistics from [Baseball
3
+ Reference](https://www.baseball-reference.com).
4
+
5
+ Documentation can be found on the [wiki](https://github.com/john-bieren/brlib/wiki).
6
+ """
7
+
8
+ from .all_players import all_players
2
9
  from .find_asg import find_asg
3
10
  from .find_games import find_games
4
11
  from .find_teams import find_teams
@@ -13,10 +20,10 @@ from .player_set import PlayerSet
13
20
  from .team import Team
14
21
  from .team_set import TeamSet
15
22
 
16
- __version__ = "0.2.0"
23
+ __version__ = "0.3.0"
17
24
 
18
25
  __all__ = [
19
- "all_major_leaguers",
26
+ "all_players",
20
27
  "find_asg",
21
28
  "find_games",
22
29
  "find_teams",
@@ -29,5 +36,5 @@ __all__ = [
29
36
  "Player",
30
37
  "PlayerSet",
31
38
  "Team",
32
- "TeamSet"
39
+ "TeamSet",
33
40
  ]
@@ -0,0 +1,4 @@
1
+ """
2
+ Functions, classes, and constants internal to the codebase.
3
+ External use of this module is strongly discouraged, and its API may change without notice.
4
+ """
@@ -1,6 +1,4 @@
1
- #!/usr/bin/env python3
2
-
3
- """Defines and instantiates AbbreviationsManager singleton."""
1
+ """Defines and instantiates `AbbreviationsManager` singleton."""
4
2
 
5
3
  import functools
6
4
  import os
@@ -8,15 +6,21 @@ from datetime import datetime
8
6
 
9
7
  import pandas as pd
10
8
  from bs4 import BeautifulSoup as bs
11
- from curl_cffi import Response
9
+ from curl_cffi.requests import Response
12
10
 
13
11
  from ..options import write
14
- from .constants import (BML_FRANCHISE_ABVS, CACHE_DIR, CACHE_TIMEZONE,
15
- CURRENT_YEAR, CY_BASEBALL, FIRST_GAMES_YEAR,
16
- SEASON_START_DATE, TEAM_ALIASES)
12
+ from .constants import (
13
+ BML_FRANCHISE_ABVS,
14
+ CACHE_DIR,
15
+ CACHE_TIMEZONE,
16
+ CURRENT_YEAR,
17
+ CY_BASEBALL,
18
+ FIRST_GAMES_YEAR,
19
+ SEASON_START_DATE,
20
+ TEAM_ALIASES,
21
+ )
17
22
  from .requests_manager import req_man
18
23
  from .singleton import Singleton
19
- from .utils import report_on_exc
20
24
 
21
25
 
22
26
  class AbbreviationsManager(Singleton):
@@ -25,6 +29,7 @@ class AbbreviationsManager(Singleton):
25
29
  franchise abbreviations used by Baseball Reference. Manages retrieval and caching of the data,
26
30
  loads data on import of brlib. Has methods for working with these abbreviations.
27
31
  """
32
+
28
33
  def __init__(self) -> None:
29
34
  self._cache_file = CACHE_DIR / "abv_data_v1.csv"
30
35
  self.df = pd.DataFrame()
@@ -68,7 +73,6 @@ class AbbreviationsManager(Singleton):
68
73
  self.df.to_csv(self._cache_file, index=False)
69
74
  self.df.rename({"Team ID": "Team", "Franchise ID": "Franchise"}, axis=1, inplace=True)
70
75
 
71
- @report_on_exc()
72
76
  def _gather_abbreviations(self, page: Response) -> None:
73
77
  """Scrapes team_IDs page and create `self.df`."""
74
78
  soup = bs(page.content, "lxml")
@@ -82,12 +86,13 @@ class AbbreviationsManager(Singleton):
82
86
  record = [ele.text.strip() for ele in row.find_all(["th", "td"])]
83
87
  if record[4] == "Present":
84
88
  record[4] = str(CURRENT_YEAR + CY_BASEBALL - 1)
85
- del record[2] # remove the column of full team names
89
+ del record[2] # remove the column of full team names
86
90
 
87
91
  # create indicator column for major Negro League teams
88
92
  if i == 0:
89
93
  record.append("BML")
90
94
  else:
95
+ # noinspection PyTypeChecker
91
96
  record.append(record[0] in BML_FRANCHISE_ABVS)
92
97
  records.append(record)
93
98
 
@@ -111,73 +116,69 @@ class AbbreviationsManager(Singleton):
111
116
 
112
117
  @functools.cache
113
118
  def _find_correct_teams(
114
- self,
115
- abbreviation: str,
116
- season: int,
117
- era_adjustment: bool
118
- ) -> pd.DataFrame:
119
+ self,
120
+ abbreviation: str,
121
+ season: int,
122
+ era_adjustment: bool,
123
+ ) -> pd.DataFrame:
119
124
  """
120
125
  Returns the team row associated with `abbreviation` during `season`.
121
126
  Can return an empty DataFrame if there is no match.
122
127
 
123
- If `era_adjustment` is True, the return DataFrame will contain the row associated with
128
+ If `era_adjustment` is `True`, the return DataFrame will contain the row associated with
124
129
  `abbreviation`'s franchise during `season` even if the abbreviation is not correct.
125
- For example, `self._find_correct_teams("FLA", 2025, True)` returns the `MIA` team row.
126
- There can be multiple rows in the return DataFrame if an abbreviation, e.g. `BAL`,
130
+ For example, `self._find_correct_teams("FLA", 2025, True)` returns the MIA team row.
131
+ There can be multiple rows in the return DataFrame if an abbreviation, e.g. BAL,
127
132
  is valid during a season, e.g. 1915, and is also associated with a franchise that
128
- is active during that year, e.g. `SLB` which uses `BAL` in later years. In this case,
129
- `self._find_correct_teams("BAL", 1915, True)`, the `BAL` and `SLB` team rows are returned.
133
+ is active during that year, e.g. SLB which uses BAL in later years. In this case,
134
+ `self._find_correct_teams("BAL", 1915, True)`, the BAL and SLB team rows are returned.
130
135
  """
131
136
  abv_rows = self.df.loc[self.df["Team"] == abbreviation]
132
137
 
133
138
  if era_adjustment:
139
+ # handle potential overlap of abbreviations (e.g. BAL, 1915)
134
140
  potential_franchises = abv_rows["Franchise"].values
135
141
  franchise_rows = self.df.loc[self.df["Franchise"].isin(potential_franchises)]
136
- mask = ((franchise_rows["First Year"] <= season) &
137
- (franchise_rows["Last Year"] >= season))
138
- matching_franchises = franchise_rows.loc[mask]["Franchise"]
142
+ matching_franchises = franchise_rows.loc[
143
+ (franchise_rows["First Year"] <= season) & (franchise_rows["Last Year"] >= season)
144
+ ]["Franchise"]
139
145
  correct_rows = abv_rows.loc[abv_rows["Franchise"].isin(matching_franchises)]
140
- return self._fix_discontinuities(correct_rows, season)
141
-
142
- mask = (abv_rows["First Year"] <= season) & (abv_rows["Last Year"] >= season)
143
- correct_row = abv_rows.loc[mask]
144
- assert len(correct_row) <= 1
145
- return self._fix_discontinuities(correct_row, season)
146
-
147
- def _fix_discontinuities(self, team_rows: pd.DataFrame, season: int) -> pd.DataFrame:
148
- """
149
- For each row in `team_rows`, returns the team row with the shortest year range that
150
- includes `season` within the same franchise.
151
- For example, `LAA` is listed as 1961-present, but `CAL` and `ANA` were also used
152
- during that time. The rows returned should reflect the abbreviation used during `season`.
153
- It is assumed that all year ranges in `team_rows` include `season`.
154
- """
155
- team_rows.reset_index(drop=True, inplace=True)
156
- for i, row in team_rows.iterrows():
146
+ # handle the special case of the 1939 Toledo Crawfords, who changed leagues mid-season
147
+ # these are treated as separate teams and have different abbreviations (TC and TC2)
148
+ if season == 1939 and "PC" in matching_franchises.values:
149
+ correct_rows = correct_rows.loc[correct_rows["Franchise"] != "PC"]
150
+ tc_rows = self.df.loc[self.df["Team"].isin({"TC", "TC2"})]
151
+ correct_rows = pd.concat([correct_rows, tc_rows], ignore_index=True)
152
+ else:
153
+ # check whether abbreviation is valid for season, if so pass that row forward
154
+ mask = (abv_rows["First Year"] <= season) & (abv_rows["Last Year"] >= season)
155
+ correct_rows = abv_rows.loc[mask]
156
+ assert len(correct_rows) <= 1
157
+
158
+ # For each row in correct_rows, find the team row with the shortest year range that
159
+ # includes season within the same franchise.
160
+ # This corrects abbreviations for era (if applicable), and also fixes discontinuities.
161
+ # For example, LAA is listed as 1961-present, but CAL and ANA were also used during
162
+ # parts of that time. The rows returned should reflect the abbreviations used during season.
163
+ correct_rows.reset_index(drop=True, inplace=True)
164
+ for i, row in correct_rows.iterrows():
157
165
  franchise_rows = self.df.loc[self.df["Franchise"] == row["Franchise"]]
158
- mask = ((franchise_rows["First Year"] <= season) &
159
- (franchise_rows["Last Year"] >= season))
160
- franchise_rows = franchise_rows.loc[mask]
161
- years_col = franchise_rows["Last Year"] - franchise_rows["First Year"]
162
- correct_row = franchise_rows.loc[years_col == years_col.min()]
163
- team_rows.iloc[i] = correct_row.reset_index(drop=True).iloc[0]
164
- return team_rows
165
-
166
- def correct_abvs(
167
- self,
168
- abbreviation: str,
169
- season: int,
170
- era_adjustment: bool
171
- ) -> list[str]:
166
+ franchise_rows = franchise_rows.loc[
167
+ (franchise_rows["First Year"] <= season) & (franchise_rows["Last Year"] >= season)
168
+ ]
169
+ # for the 1939 Crawfords, skip the normal process to enable the prior workaround
170
+ if not (season == 1939 and row["Franchise"] == "PC"):
171
+ years_col = franchise_rows["Last Year"] - franchise_rows["First Year"]
172
+ correct_row = franchise_rows.loc[years_col == years_col.min()]
173
+ correct_rows.iloc[i] = correct_row.reset_index(drop=True).iloc[0]
174
+ return correct_rows
175
+
176
+ def correct_abvs(self, abbreviation: str, season: int, era_adjustment: bool) -> list[str]:
172
177
  """Returns the team abbreviations from `self._find_correct_teams`."""
173
178
  team_rows = self._find_correct_teams(abbreviation, season, era_adjustment)
174
179
  return team_rows["Team"].values.tolist()
175
180
 
176
- def franchise_abv(
177
- self,
178
- abbreviation: str,
179
- season: int
180
- ) -> str:
181
+ def franchise_abv(self, abbreviation: str, season: int) -> str:
181
182
  """Returns the franchise abbreviation for the team at `abbreviation` and `season`."""
182
183
  team_row = self._find_correct_teams(abbreviation, season, era_adjustment=False)
183
184
  if team_row.empty:
@@ -187,7 +188,7 @@ class AbbreviationsManager(Singleton):
187
188
  def all_team_abvs(self, abbreviation: str, season: int) -> list[str]:
188
189
  """
189
190
  Returns all team abbreviations used by the franchise which is associated with the team at
190
- `abbreviation` and `season`, e.g. ("ATH", 2025) returns ["PHA", "KCA", "OAK", "ATH"].
191
+ `abbreviation` and `season`, e.g. `("ATH", 2025)` returns `["PHA", "KCA", "OAK", "ATH"]`.
191
192
  """
192
193
  franchise_abv = self.franchise_abv(abbreviation, season)
193
194
  franchise_df = self.df.loc[self.df["Franchise"] == franchise_abv]
@@ -215,7 +216,7 @@ class AbbreviationsManager(Singleton):
215
216
  """
216
217
  # some aliases, e.g. KCA, are valid team abvs, these should be left alone
217
218
  team_row = self._find_correct_teams(abbreviation, season, era_adjustment=False)
218
- if not team_row.empty: # this is a valid team abbreviation for season
219
+ if not team_row.empty: # this is a valid team abbreviation for season
219
220
  return team_row["Team"].values[0]
220
221
 
221
222
  # otherwise, convert alias to team abv
@@ -226,4 +227,5 @@ class AbbreviationsManager(Singleton):
226
227
  return abbreviation
227
228
  return correct_row["Team"].values[0]
228
229
 
230
+
229
231
  abv_man = AbbreviationsManager()