vlrdevapi 2.0.1__tar.gz → 2.2.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 (200) hide show
  1. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/.gitattributes +5 -1
  2. vlrdevapi-2.2.0/.github/workflows/cleanup-caches.yml +31 -0
  3. vlrdevapi-2.2.0/.github/workflows/docs-check.yml +102 -0
  4. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/.gitignore +2 -0
  5. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/CHANGELOG.md +52 -0
  6. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/PKG-INFO +1 -1
  7. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/pyproject.toml +1 -1
  8. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/scripts/check_mdx_examples.py +287 -46
  9. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/__init__.py +1 -1
  10. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_event/info/parser.py +2 -3
  11. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_event/list/models.py +10 -2
  12. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_event/namespace.py +6 -2
  13. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_event/stages/parser.py +4 -6
  14. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_event/teams/__init__.py +2 -1
  15. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_event/teams/models.py +22 -1
  16. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_event/teams/namespace.py +4 -2
  17. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_event/teams/parser.py +30 -3
  18. vlrdevapi-2.2.0/src/vlrdevapi/_series/_utils.py +134 -0
  19. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_series/economy/namespace.py +3 -2
  20. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_series/economy/parser.py +10 -3
  21. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_series/match_namespace.py +4 -2
  22. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_series/performance/models.py +3 -3
  23. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_series/performance/namespace.py +12 -6
  24. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_series/performance/parser.py +47 -19
  25. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_series/players/namespace.py +2 -1
  26. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_series/players/parser.py +5 -3
  27. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_series/rounds/namespace.py +3 -2
  28. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_series/rounds/parser.py +10 -2
  29. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/commons/datetime.py +20 -11
  30. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/commons/timezone.py +9 -2
  31. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/uv.lock +241 -229
  32. vlrdevapi-2.0.1/.github/workflows/docs-check.yml +0 -29
  33. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  34. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  35. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/.github/workflows/publish.yml +0 -0
  36. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/.github/workflows/test.yml +0 -0
  37. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/.python-version +0 -0
  38. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/.readthedocs.yaml +0 -0
  39. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/CODE_OF_CONDUCT.md +0 -0
  40. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/CONTRIBUTING.md +0 -0
  41. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/LICENCE +0 -0
  42. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/README.md +0 -0
  43. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/SECURITY.md +0 -0
  44. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/SUPPORT.md +0 -0
  45. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/scripts/download_fixtures.py +0 -0
  46. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/__init__.pyi +0 -0
  47. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_base.py +0 -0
  48. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_cache.py +0 -0
  49. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_client.py +0 -0
  50. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_event/__init__.py +0 -0
  51. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_event/_common.py +0 -0
  52. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_event/info/__init__.py +0 -0
  53. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_event/info/models.py +0 -0
  54. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_event/info/namespace.py +0 -0
  55. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_event/info/namespace.pyi +0 -0
  56. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_event/list/__init__.py +0 -0
  57. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_event/list/namespace.py +0 -0
  58. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_event/list/namespace.pyi +0 -0
  59. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_event/list/parser.py +0 -0
  60. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_event/matches/__init__.py +0 -0
  61. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_event/matches/models.py +0 -0
  62. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_event/matches/namespace.py +0 -0
  63. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_event/matches/namespace.pyi +0 -0
  64. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_event/matches/parser.py +0 -0
  65. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_event/namespace.pyi +0 -0
  66. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_event/stages/__init__.py +0 -0
  67. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_event/stages/models.py +0 -0
  68. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_event/stages/namespace.py +0 -0
  69. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_event/stages/namespace.pyi +0 -0
  70. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_event/standings/__init__.py +0 -0
  71. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_event/standings/models.py +0 -0
  72. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_event/standings/namespace.py +0 -0
  73. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_event/standings/namespace.pyi +0 -0
  74. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_event/standings/parser.py +0 -0
  75. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_event/teams/namespace.pyi +0 -0
  76. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_matches/__init__.py +0 -0
  77. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_matches/common.py +0 -0
  78. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_matches/completed/__init__.py +0 -0
  79. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_matches/completed/models.py +0 -0
  80. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_matches/completed/namespace.py +0 -0
  81. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_matches/completed/namespace.pyi +0 -0
  82. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_matches/completed/parser.py +0 -0
  83. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_matches/live/__init__.py +0 -0
  84. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_matches/live/models.py +0 -0
  85. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_matches/live/namespace.py +0 -0
  86. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_matches/live/namespace.pyi +0 -0
  87. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_matches/live/parser.py +0 -0
  88. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_matches/namespace.py +0 -0
  89. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_matches/namespace.pyi +0 -0
  90. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_matches/upcoming/__init__.py +0 -0
  91. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_matches/upcoming/models.py +0 -0
  92. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_matches/upcoming/namespace.py +0 -0
  93. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_matches/upcoming/namespace.pyi +0 -0
  94. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_matches/upcoming/parser.py +0 -0
  95. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_player/__init__.py +0 -0
  96. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_player/_common_parsing.py +0 -0
  97. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_player/agents/__init__.py +0 -0
  98. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_player/agents/models.py +0 -0
  99. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_player/agents/namespace.py +0 -0
  100. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_player/agents/namespace.pyi +0 -0
  101. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_player/agents/parser.py +0 -0
  102. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_player/info/__init__.py +0 -0
  103. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_player/info/models.py +0 -0
  104. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_player/info/namespace.py +0 -0
  105. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_player/info/namespace.pyi +0 -0
  106. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_player/info/parser.py +0 -0
  107. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_player/matches/__init__.py +0 -0
  108. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_player/matches/models.py +0 -0
  109. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_player/matches/namespace.py +0 -0
  110. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_player/matches/namespace.pyi +0 -0
  111. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_player/matches/parser.py +0 -0
  112. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_player/namespace.py +0 -0
  113. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_player/namespace.pyi +0 -0
  114. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_player/profile/__init__.py +0 -0
  115. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_player/profile/models.py +0 -0
  116. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_player/profile/namespace.py +0 -0
  117. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_player/profile/namespace.pyi +0 -0
  118. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_player/profile/parser.py +0 -0
  119. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_player/teams/__init__.py +0 -0
  120. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_player/teams/models.py +0 -0
  121. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_player/teams/namespace.py +0 -0
  122. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_player/teams/namespace.pyi +0 -0
  123. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_player/teams/parser.py +0 -0
  124. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_series/__init__.py +0 -0
  125. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_series/economy/__init__.py +0 -0
  126. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_series/economy/models.py +0 -0
  127. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_series/economy/namespace.pyi +0 -0
  128. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_series/info/__init__.py +0 -0
  129. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_series/info/models.py +0 -0
  130. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_series/info/namespace.py +0 -0
  131. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_series/info/namespace.pyi +0 -0
  132. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_series/info/parser.py +0 -0
  133. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_series/match_namespace.pyi +0 -0
  134. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_series/namespace.py +0 -0
  135. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_series/namespace.pyi +0 -0
  136. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_series/performance/__init__.py +0 -0
  137. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_series/performance/namespace.pyi +0 -0
  138. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_series/players/__init__.py +0 -0
  139. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_series/players/models.py +0 -0
  140. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_series/players/namespace.pyi +0 -0
  141. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_series/rounds/__init__.py +0 -0
  142. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_series/rounds/models.py +0 -0
  143. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_series/rounds/namespace.pyi +0 -0
  144. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_series/vods/__init__.py +0 -0
  145. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_series/vods/models.py +0 -0
  146. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_series/vods/namespace.py +0 -0
  147. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_series/vods/namespace.pyi +0 -0
  148. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_series/vods/parser.py +0 -0
  149. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_team/__init__.py +0 -0
  150. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_team/completed_matches/__init__.py +0 -0
  151. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_team/completed_matches/models.py +0 -0
  152. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_team/completed_matches/namespace.py +0 -0
  153. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_team/completed_matches/namespace.pyi +0 -0
  154. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_team/completed_matches/parser.py +0 -0
  155. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_team/info/__init__.py +0 -0
  156. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_team/info/models.py +0 -0
  157. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_team/info/namespace.py +0 -0
  158. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_team/info/namespace.pyi +0 -0
  159. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_team/info/parser.py +0 -0
  160. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_team/namespace.py +0 -0
  161. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_team/namespace.pyi +0 -0
  162. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_team/placements/__init__.py +0 -0
  163. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_team/placements/models.py +0 -0
  164. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_team/placements/namespace.py +0 -0
  165. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_team/placements/namespace.pyi +0 -0
  166. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_team/placements/parser.py +0 -0
  167. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_team/roster/__init__.py +0 -0
  168. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_team/roster/models.py +0 -0
  169. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_team/roster/namespace.py +0 -0
  170. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_team/roster/namespace.pyi +0 -0
  171. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_team/roster/parser.py +0 -0
  172. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_team/stats/__init__.py +0 -0
  173. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_team/stats/models.py +0 -0
  174. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_team/stats/namespace.py +0 -0
  175. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_team/stats/namespace.pyi +0 -0
  176. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_team/stats/parser.py +0 -0
  177. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_team/transactions/__init__.py +0 -0
  178. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_team/transactions/models.py +0 -0
  179. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_team/transactions/namespace.py +0 -0
  180. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_team/transactions/namespace.pyi +0 -0
  181. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_team/transactions/parser.py +0 -0
  182. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_team/upcoming_matches/__init__.py +0 -0
  183. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_team/upcoming_matches/models.py +0 -0
  184. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_team/upcoming_matches/namespace.py +0 -0
  185. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_team/upcoming_matches/namespace.pyi +0 -0
  186. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_team/upcoming_matches/parser.py +0 -0
  187. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_utils/__init__.py +0 -0
  188. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_utils/pagination.py +0 -0
  189. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_utils/paths.py +0 -0
  190. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_utils/team_enrichment.py +0 -0
  191. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/_utils/team_parsing.py +0 -0
  192. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/commons/__init__.py +0 -0
  193. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/commons/countries.py +0 -0
  194. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/commons/mappings.py +0 -0
  195. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/commons/prizes.py +0 -0
  196. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/exceptions.py +0 -0
  197. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/fetcher.py +0 -0
  198. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/py.typed +0 -0
  199. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/src/vlrdevapi/validators.py +0 -0
  200. {vlrdevapi-2.0.1 → vlrdevapi-2.2.0}/wrangler.jsonc +0 -0
@@ -4,4 +4,8 @@ docs-py/** linguist-vendored
4
4
 
5
5
  # Exclude test fixtures
6
6
  tests/test_html/** linguist-vendored
7
- tests/test_html/** linguist-detectable=false
7
+ tests/test_html/** linguist-detectable=false
8
+
9
+ # Normalize workflow YAML line endings
10
+ *.yml text eol=lf
11
+ *.yaml text eol=lf
@@ -0,0 +1,31 @@
1
+ name: Cleanup docs-check caches on closed PRs
2
+
3
+ on:
4
+ pull_request:
5
+ types:
6
+ - closed
7
+
8
+ permissions:
9
+ actions: write
10
+
11
+ jobs:
12
+ cleanup:
13
+ runs-on: ubuntu-latest
14
+ steps:
15
+ - name: Delete PR caches
16
+ env:
17
+ GH_TOKEN: ${{ github.token }}
18
+ GH_REPO: ${{ github.repository }}
19
+ BRANCH: refs/pull/${{ github.event.pull_request.number }}/merge
20
+ run: |
21
+ echo "Fetching list of cache keys"
22
+ cacheKeysForPR=$(gh cache list --ref $BRANCH --limit 100 --json id --jq '.[].id')
23
+
24
+ ## Setting this to not fail the workflow while deleting cache keys.
25
+ set +e
26
+ echo "Deleting caches..."
27
+ for cacheKey in $cacheKeysForPR
28
+ do
29
+ gh cache delete $cacheKey
30
+ done
31
+ echo "Done"
@@ -0,0 +1,102 @@
1
+ name: Docs Check
2
+
3
+ on:
4
+ pull_request:
5
+ paths:
6
+ - 'official-docs/**'
7
+ - 'docs-py/**'
8
+ push:
9
+ branches: [main]
10
+ paths:
11
+ - 'official-docs/**'
12
+ - 'docs-py/**'
13
+
14
+ jobs:
15
+ check:
16
+ runs-on: ubuntu-latest
17
+ steps:
18
+ - uses: actions/checkout@v7
19
+
20
+ - uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b
21
+ with:
22
+ python-version: '3.12'
23
+
24
+ - name: Install package
25
+ run: uv sync --group dev
26
+
27
+ # main always validates live against fresh vlr.gg data; never uses the
28
+ # cache. Branch/PR runs reuse fixtures cached by earlier runs in the
29
+ # same PR (within a 2h TTL), falling back to live fetches for anything
30
+ # missing, so the check is correct even with a partially-stale cache.
31
+ - name: Run MDX examples check (main, live)
32
+ if: github.ref_name == 'main'
33
+ run: uv run scripts/check_mdx_examples.py --live
34
+
35
+ # actions/cache v6.1.0, pinned to a reviewed commit SHA.
36
+ - name: Restore fixture cache (branch)
37
+ id: mdx-fixtures
38
+ if: github.ref_name != 'main'
39
+ uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9
40
+ with:
41
+ path: fixtures.tar.gz
42
+ key: mdx-fixtures-${{ github.ref_name }}-run-${{ github.run_id }}
43
+ restore-keys: |
44
+ mdx-fixtures-${{ github.ref_name }}-
45
+
46
+ - name: Unpack fixtures (branch)
47
+ if: github.ref_name != 'main'
48
+ run: |
49
+ if [ -f fixtures.tar.gz ]; then
50
+ mkdir -p .cache
51
+ tar -C .cache -xzf fixtures.tar.gz
52
+ fi
53
+
54
+ - name: Check fixture cache age (branch, 2h TTL)
55
+ id: cache-age
56
+ if: github.ref_name != 'main'
57
+ run: |
58
+ matched="${{ steps.mdx-fixtures.outputs.cache-matched-key }}"
59
+ now=$(date +%s)
60
+ if [ -n "$matched" ]; then
61
+ epoch="${matched##*-}"
62
+ age=$(( now - epoch ))
63
+ else
64
+ age=999999
65
+ fi
66
+ if [ "$age" -gt 7200 ]; then
67
+ rm -rf .cache/mdx-html
68
+ rm -f fixtures.tar.gz
69
+ mkdir -p .cache/mdx-html
70
+ echo "fresh=false" >> "$GITHUB_OUTPUT"
71
+ else
72
+ echo "fresh=true" >> "$GITHUB_OUTPUT"
73
+ fi
74
+ echo "now=$now" >> "$GITHUB_OUTPUT"
75
+
76
+ - name: Run MDX examples check (branch)
77
+ if: github.ref_name != 'main'
78
+ run: |
79
+ if [ "${{ steps.cache-age.outputs.fresh }}" == "true" ]; then
80
+ uv run scripts/check_mdx_examples.py --skip-warm
81
+ else
82
+ uv run scripts/check_mdx_examples.py
83
+ fi
84
+
85
+ # always(): a run that fails validation still saved its warm fixtures,
86
+ # so the next fix commit restores and validates fast instead of warming.
87
+ - name: Package fixtures (branch)
88
+ if: always() && github.ref_name != 'main' && steps.cache-age.outputs.fresh == 'false'
89
+ run: |
90
+ mkdir -p .cache/mdx-html
91
+ if [ -n "$(ls -A .cache/mdx-html)" ]; then
92
+ tar -C .cache -czf fixtures.tar.gz mdx-html
93
+ else
94
+ rm -f fixtures.tar.gz
95
+ fi
96
+
97
+ - name: Save fixture cache (branch)
98
+ if: always() && github.ref_name != 'main' && steps.cache-age.outputs.fresh == 'false'
99
+ uses: actions/cache/save@55cc8345863c7cc4c66a329aec7e433d2d1c52a9
100
+ with:
101
+ path: fixtures.tar.gz
102
+ key: mdx-fixtures-${{ github.ref_name }}-${{ steps.cache-age.outputs.now }}
@@ -9,6 +9,8 @@ wheels/
9
9
  # Virtual environments
10
10
  .venv
11
11
  tests/test_html/
12
+ .cache/mdx-html/
13
+ fixtures.tar.gz
12
14
 
13
15
  nul
14
16
  .pytest_cache/
@@ -5,6 +5,56 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/).
7
7
 
8
+ ## [2.2.0] - 2026-08-11
9
+
10
+ ### Changed
11
+
12
+ - **Events list dates without a year** — `event.list()` dates are rendered
13
+ on vlr.gg without a year (e.g. `"Jul 9 – Aug 23"`). These now use a
14
+ sentinel year of `2019` instead of the current year. Any parsed date with
15
+ `year < 2020` means the source omitted the year, so guard with
16
+ `event.start_date.year < 2020` before relying on it.
17
+ - **Series performance field renames (breaking)** — `AdvStatsEntry` fields
18
+ were renamed to descriptive names: `econ` → `economy`, `pl` → `plants`,
19
+ and `de` → `defuses`. Update any code referencing the old field names.
20
+ The series performance reference docs were updated to match.
21
+
22
+ ### Fixed
23
+
24
+ - **Python 3.13/3.15 date parsing deprecation** — `datetime.strptime` emits
25
+ a `DeprecationWarning` when parsing a day-of-month without a year (and will
26
+ change behavior in Python 3.15). All such parses now supply an explicit
27
+ year derived from context (reference date, page-header year, or the
28
+ sentinel above).
29
+ - **Series per-game stats by game number** — `players()`, `rounds()`,
30
+ `performance()`, and `economy()` game identifiers can now be a 1-based
31
+ game number within the series, resolved to the real VLR game ID from the
32
+ page's game nav tabs. A real VLR game ID is still accepted unchanged;
33
+ previously passing a game number produced empty results.
34
+ - **Series economy and rounds scope** — economy and round-by-round data are
35
+ now parsed from the selected game's section only. The economy parser
36
+ previously collected tables from the whole page, so a per-game request
37
+ could include data from other maps.
38
+ - **Series performance player IDs** — the performance tab renders player
39
+ cells without links, leaving player IDs as `0`. IDs are now recovered from
40
+ the series overview tab (keyed by team abbreviation and player name) and
41
+ attached to kill-matrix entries, advanced stats, and notable-round victims.
42
+
43
+ ## [2.1.0] - 2026-08-07
44
+
45
+ ### Added
46
+
47
+ - **Event teams player rosters** — `event.teams()` now includes a `players`
48
+ list on each `Team`, containing each player's `name` and `id` parsed from
49
+ the event page. The `players` field is always present and defaults to `[]`
50
+ when roster data is unavailable. A new `TeamPlayer` model was added and exposed
51
+ from the `_event.teams` submodule.
52
+
53
+ ### Changed
54
+
55
+ - **Documentation** — event teams reference updated with the new `players`
56
+ field, a `TeamPlayer` fields table, and a roster iteration example.
57
+
8
58
  ## [2.0.1] - 2026-07-29
9
59
 
10
60
  ### Fixed
@@ -92,5 +142,7 @@ The API surface, module structure, and type system are all new.
92
142
  - `aiohttp` and `asyncio` dependencies.
93
143
  - v1.x match/event/team parsing modules.
94
144
 
145
+ [2.2.0]: https://github.com/Vanshbordia/vlrdevapi/compare/v2.1.0...v2.2.0
146
+ [2.1.0]: https://github.com/Vanshbordia/vlrdevapi/compare/v2.0.1...v2.1.0
95
147
  [2.0.1]: https://github.com/Vanshbordia/vlrdevapi/compare/v2.0.0...v2.0.1
96
148
  [2.0.0]: https://github.com/Vanshbordia/vlrdevapi/compare/v1.6.2...v2.0.0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: vlrdevapi
3
- Version: 2.0.1
3
+ Version: 2.2.0
4
4
  Summary: A Python library to scrape data from vlr.gg
5
5
  Project-URL: Homepage, https://vlrdevapi.pages.dev/
6
6
  Project-URL: Repository, https://github.com/Vanshbordia/vlrdevapi
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "vlrdevapi"
7
- version = "2.0.1"
7
+ version = "2.2.0"
8
8
  description = "A Python library to scrape data from vlr.gg"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"