vlrdevapi 2.1.0__tar.gz → 2.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.
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/.gitattributes +5 -1
- vlrdevapi-2.3.0/.github/workflows/cleanup-caches.yml +31 -0
- vlrdevapi-2.3.0/.github/workflows/docs-check.yml +102 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/.gitignore +2 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/CHANGELOG.md +71 -1
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/PKG-INFO +13 -2
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/README.md +12 -1
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/pyproject.toml +1 -1
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/scripts/check_mdx_examples.py +287 -46
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/scripts/download_fixtures.py +10 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/__init__.py +17 -7
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/__init__.pyi +15 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_client.py +2 -0
- vlrdevapi-2.3.0/src/vlrdevapi/_news/__init__.py +5 -0
- vlrdevapi-2.3.0/src/vlrdevapi/_news/article/__init__.py +4 -0
- vlrdevapi-2.3.0/src/vlrdevapi/_news/article/models.py +41 -0
- vlrdevapi-2.3.0/src/vlrdevapi/_news/article/namespace.py +86 -0
- vlrdevapi-2.3.0/src/vlrdevapi/_news/article/namespace.pyi +19 -0
- vlrdevapi-2.3.0/src/vlrdevapi/_news/article/parser.py +457 -0
- vlrdevapi-2.3.0/src/vlrdevapi/_news/common.py +48 -0
- vlrdevapi-2.3.0/src/vlrdevapi/_news/list/__init__.py +4 -0
- vlrdevapi-2.3.0/src/vlrdevapi/_news/list/models.py +55 -0
- vlrdevapi-2.3.0/src/vlrdevapi/_news/list/namespace.py +85 -0
- vlrdevapi-2.3.0/src/vlrdevapi/_news/list/namespace.pyi +19 -0
- vlrdevapi-2.3.0/src/vlrdevapi/_news/list/parser.py +109 -0
- vlrdevapi-2.3.0/src/vlrdevapi/_news/namespace.py +127 -0
- vlrdevapi-2.3.0/src/vlrdevapi/_news/namespace.pyi +21 -0
- vlrdevapi-2.3.0/src/vlrdevapi/_series/_utils.py +134 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_series/economy/namespace.py +3 -2
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_series/economy/parser.py +10 -3
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_series/match_namespace.py +4 -2
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_series/performance/models.py +3 -3
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_series/performance/namespace.py +12 -6
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_series/performance/parser.py +47 -19
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_series/players/namespace.py +2 -1
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_series/players/parser.py +5 -3
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_series/rounds/namespace.py +3 -2
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_series/rounds/parser.py +10 -2
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_utils/paths.py +13 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/commons/__init__.py +9 -1
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/commons/datetime.py +32 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/validators.py +1 -1
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/uv.lock +1 -1
- vlrdevapi-2.1.0/.github/workflows/docs-check.yml +0 -29
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/.github/workflows/publish.yml +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/.github/workflows/test.yml +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/.python-version +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/.readthedocs.yaml +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/CODE_OF_CONDUCT.md +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/CONTRIBUTING.md +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/LICENCE +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/SECURITY.md +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/SUPPORT.md +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_base.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_cache.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_event/__init__.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_event/_common.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_event/info/__init__.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_event/info/models.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_event/info/namespace.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_event/info/namespace.pyi +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_event/info/parser.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_event/list/__init__.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_event/list/models.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_event/list/namespace.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_event/list/namespace.pyi +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_event/list/parser.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_event/matches/__init__.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_event/matches/models.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_event/matches/namespace.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_event/matches/namespace.pyi +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_event/matches/parser.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_event/namespace.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_event/namespace.pyi +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_event/stages/__init__.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_event/stages/models.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_event/stages/namespace.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_event/stages/namespace.pyi +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_event/stages/parser.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_event/standings/__init__.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_event/standings/models.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_event/standings/namespace.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_event/standings/namespace.pyi +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_event/standings/parser.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_event/teams/__init__.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_event/teams/models.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_event/teams/namespace.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_event/teams/namespace.pyi +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_event/teams/parser.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_matches/__init__.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_matches/common.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_matches/completed/__init__.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_matches/completed/models.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_matches/completed/namespace.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_matches/completed/namespace.pyi +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_matches/completed/parser.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_matches/live/__init__.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_matches/live/models.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_matches/live/namespace.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_matches/live/namespace.pyi +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_matches/live/parser.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_matches/namespace.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_matches/namespace.pyi +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_matches/upcoming/__init__.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_matches/upcoming/models.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_matches/upcoming/namespace.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_matches/upcoming/namespace.pyi +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_matches/upcoming/parser.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_player/__init__.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_player/_common_parsing.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_player/agents/__init__.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_player/agents/models.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_player/agents/namespace.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_player/agents/namespace.pyi +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_player/agents/parser.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_player/info/__init__.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_player/info/models.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_player/info/namespace.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_player/info/namespace.pyi +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_player/info/parser.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_player/matches/__init__.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_player/matches/models.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_player/matches/namespace.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_player/matches/namespace.pyi +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_player/matches/parser.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_player/namespace.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_player/namespace.pyi +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_player/profile/__init__.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_player/profile/models.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_player/profile/namespace.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_player/profile/namespace.pyi +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_player/profile/parser.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_player/teams/__init__.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_player/teams/models.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_player/teams/namespace.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_player/teams/namespace.pyi +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_player/teams/parser.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_series/__init__.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_series/economy/__init__.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_series/economy/models.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_series/economy/namespace.pyi +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_series/info/__init__.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_series/info/models.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_series/info/namespace.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_series/info/namespace.pyi +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_series/info/parser.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_series/match_namespace.pyi +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_series/namespace.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_series/namespace.pyi +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_series/performance/__init__.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_series/performance/namespace.pyi +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_series/players/__init__.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_series/players/models.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_series/players/namespace.pyi +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_series/rounds/__init__.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_series/rounds/models.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_series/rounds/namespace.pyi +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_series/vods/__init__.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_series/vods/models.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_series/vods/namespace.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_series/vods/namespace.pyi +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_series/vods/parser.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_team/__init__.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_team/completed_matches/__init__.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_team/completed_matches/models.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_team/completed_matches/namespace.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_team/completed_matches/namespace.pyi +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_team/completed_matches/parser.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_team/info/__init__.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_team/info/models.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_team/info/namespace.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_team/info/namespace.pyi +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_team/info/parser.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_team/namespace.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_team/namespace.pyi +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_team/placements/__init__.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_team/placements/models.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_team/placements/namespace.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_team/placements/namespace.pyi +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_team/placements/parser.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_team/roster/__init__.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_team/roster/models.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_team/roster/namespace.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_team/roster/namespace.pyi +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_team/roster/parser.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_team/stats/__init__.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_team/stats/models.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_team/stats/namespace.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_team/stats/namespace.pyi +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_team/stats/parser.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_team/transactions/__init__.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_team/transactions/models.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_team/transactions/namespace.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_team/transactions/namespace.pyi +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_team/transactions/parser.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_team/upcoming_matches/__init__.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_team/upcoming_matches/models.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_team/upcoming_matches/namespace.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_team/upcoming_matches/namespace.pyi +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_team/upcoming_matches/parser.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_utils/__init__.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_utils/pagination.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_utils/team_enrichment.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/_utils/team_parsing.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/commons/countries.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/commons/mappings.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/commons/prizes.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/commons/timezone.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/exceptions.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/fetcher.py +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.0}/src/vlrdevapi/py.typed +0 -0
- {vlrdevapi-2.1.0 → vlrdevapi-2.3.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 }}
|
|
@@ -5,7 +5,58 @@ 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
|
-
## [
|
|
8
|
+
## [2.3.0] - 2026-08-11
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- **News namespace** — `vlrdevapi.news(page=1)` lists news items from
|
|
13
|
+
vlr.gg/news, each with `title`, `subtitle`, `link`, `country_name`,
|
|
14
|
+
`date`, and `author`, plus `has_next_page` and `page_number` on the
|
|
15
|
+
returned page.
|
|
16
|
+
- **News article content** — `vlrdevapi.news.article(article_id)` fetches
|
|
17
|
+
a single news article with its `title`, `author`, `date`, associated
|
|
18
|
+
`event_name`/`event_link`, and the full `content` body text. The body
|
|
19
|
+
is also available as Markdown via `content_md`, preserving headings,
|
|
20
|
+
lists, links, emphasis, and clip embeds.
|
|
21
|
+
- **News out-of-range pages** — requesting a news page beyond the last
|
|
22
|
+
available page (e.g. `page=176`) now raises `NotFoundError` instead of
|
|
23
|
+
silently returning an empty result.
|
|
24
|
+
|
|
25
|
+
### Changed
|
|
26
|
+
|
|
27
|
+
- **News article Markdown links are absolute** — links in `content_md` are
|
|
28
|
+
prefixed with `https://www.vlr.gg` when they were relative (e.g.
|
|
29
|
+
`/player/5132/mada` → `https://www.vlr.gg/player/5132/mada`). Absolute
|
|
30
|
+
and `www.`-prefixed URLs are left untouched. `NewsArticle.event_link` is
|
|
31
|
+
now an absolute URL as well.
|
|
32
|
+
|
|
33
|
+
### Fixed
|
|
34
|
+
|
|
35
|
+
- **News article clip embeds** — `content_md` clip embeds now link to the
|
|
36
|
+
directly openable watch URL (e.g. `https://clips.twitch.tv/<slug>`) for
|
|
37
|
+
Twitch clips, Twitch VODs, YouTube, and Soop embeds, instead of the embed
|
|
38
|
+
URL which could not be opened in a new tab.
|
|
39
|
+
- **News article Markdown whitespace/emphasis** — inline emphasis and bold
|
|
40
|
+
render correctly around links: source indentation whitespace no longer
|
|
41
|
+
produces double spaces, and `*`/`**` markers no longer wrap whitespace.
|
|
42
|
+
- **News article dates are timezone-aware** — the article date is parsed
|
|
43
|
+
through the shared `commons.parse_vlr_iso_datetime` helper. Offset-aware
|
|
44
|
+
`datetime` attributes are converted to UTC as-is; naive values are
|
|
45
|
+
localised to the client's `source_tz` (or UTC) instead of the local
|
|
46
|
+
machine timezone.
|
|
47
|
+
- **Unknown article IDs raise `NotFoundError`** — vlr.gg returns a generic
|
|
48
|
+
HTTP 200 page for non-existent article IDs; `news.article()` now detects
|
|
49
|
+
the missing article card and raises `NotFoundError` instead of returning
|
|
50
|
+
an empty article.
|
|
51
|
+
- **News article Markdown fidelity** — `content_md` now renders nested
|
|
52
|
+
lists, tables (as pipe tables), and inline `code` verbatim (whitespace
|
|
53
|
+
preserved). Links whose href is `www.`-prefixed are upgraded to
|
|
54
|
+
`https://`, fixing broken relative links in Markdown.
|
|
55
|
+
- **Documentation** — news reference pages updated (article, list, index),
|
|
56
|
+
plus the getting-started guide, main docs index, and README now cover the
|
|
57
|
+
news namespace; model/parser docstrings describe the current behaviour.
|
|
58
|
+
|
|
59
|
+
## [2.2.0] - 2026-08-11
|
|
9
60
|
|
|
10
61
|
### Changed
|
|
11
62
|
|
|
@@ -14,6 +65,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/).
|
|
|
14
65
|
sentinel year of `2019` instead of the current year. Any parsed date with
|
|
15
66
|
`year < 2020` means the source omitted the year, so guard with
|
|
16
67
|
`event.start_date.year < 2020` before relying on it.
|
|
68
|
+
- **Series performance field renames (breaking)** — `AdvStatsEntry` fields
|
|
69
|
+
were renamed to descriptive names: `econ` → `economy`, `pl` → `plants`,
|
|
70
|
+
and `de` → `defuses`. Update any code referencing the old field names.
|
|
71
|
+
The series performance reference docs were updated to match.
|
|
17
72
|
|
|
18
73
|
### Fixed
|
|
19
74
|
|
|
@@ -22,6 +77,19 @@ and this project adheres to [Semantic Versioning](https://semver.org/).
|
|
|
22
77
|
change behavior in Python 3.15). All such parses now supply an explicit
|
|
23
78
|
year derived from context (reference date, page-header year, or the
|
|
24
79
|
sentinel above).
|
|
80
|
+
- **Series per-game stats by game number** — `players()`, `rounds()`,
|
|
81
|
+
`performance()`, and `economy()` game identifiers can now be a 1-based
|
|
82
|
+
game number within the series, resolved to the real VLR game ID from the
|
|
83
|
+
page's game nav tabs. A real VLR game ID is still accepted unchanged;
|
|
84
|
+
previously passing a game number produced empty results.
|
|
85
|
+
- **Series economy and rounds scope** — economy and round-by-round data are
|
|
86
|
+
now parsed from the selected game's section only. The economy parser
|
|
87
|
+
previously collected tables from the whole page, so a per-game request
|
|
88
|
+
could include data from other maps.
|
|
89
|
+
- **Series performance player IDs** — the performance tab renders player
|
|
90
|
+
cells without links, leaving player IDs as `0`. IDs are now recovered from
|
|
91
|
+
the series overview tab (keyed by team abbreviation and player name) and
|
|
92
|
+
attached to kill-matrix entries, advanced stats, and notable-round victims.
|
|
25
93
|
|
|
26
94
|
## [2.1.0] - 2026-08-07
|
|
27
95
|
|
|
@@ -125,6 +193,8 @@ The API surface, module structure, and type system are all new.
|
|
|
125
193
|
- `aiohttp` and `asyncio` dependencies.
|
|
126
194
|
- v1.x match/event/team parsing modules.
|
|
127
195
|
|
|
196
|
+
[2.3.0]: https://github.com/Vanshbordia/vlrdevapi/compare/v2.2.0...v2.3.0
|
|
197
|
+
[2.2.0]: https://github.com/Vanshbordia/vlrdevapi/compare/v2.1.0...v2.2.0
|
|
128
198
|
[2.1.0]: https://github.com/Vanshbordia/vlrdevapi/compare/v2.0.1...v2.1.0
|
|
129
199
|
[2.0.1]: https://github.com/Vanshbordia/vlrdevapi/compare/v2.0.0...v2.0.1
|
|
130
200
|
[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.
|
|
3
|
+
Version: 2.3.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
|
|
@@ -68,7 +68,7 @@ Access Valorant esports data from VLR.gg with a clean, type-safe Python API. Get
|
|
|
68
68
|
|
|
69
69
|
## Features
|
|
70
70
|
|
|
71
|
-
- **Complete Data Access** - Events, matches, players, teams, and
|
|
71
|
+
- **Complete Data Access** - Events, matches, players, teams, series, and news
|
|
72
72
|
- **Type-Safe** - Pydantic models with rich type hints and field descriptions
|
|
73
73
|
- **Production-Ready** - Retry logic, rate limiting, and LRU-cached enrichment
|
|
74
74
|
- **Curried Access** - Bind a player/team/series ID once, then call sub-methods without re-passing
|
|
@@ -181,6 +181,17 @@ performance = s.performance() # Advanced performance stats
|
|
|
181
181
|
economy = s.economy(game_id=1) # Economy data
|
|
182
182
|
```
|
|
183
183
|
|
|
184
|
+
### News
|
|
185
|
+
|
|
186
|
+
```python
|
|
187
|
+
page = client.news(page=1) # Browse the news listing
|
|
188
|
+
for item in page.news[:5]:
|
|
189
|
+
print(item.title)
|
|
190
|
+
|
|
191
|
+
article = client.news.article(734100) # Fetch a full article
|
|
192
|
+
print(article.content_md) # Article body as Markdown
|
|
193
|
+
```
|
|
194
|
+
|
|
184
195
|
## Documentation
|
|
185
196
|
|
|
186
197
|
- **Official Docs** - [vlrdevapi.pages.dev/docs](https://vlrdevapi.pages.dev/docs)
|
|
@@ -20,7 +20,7 @@ Access Valorant esports data from VLR.gg with a clean, type-safe Python API. Get
|
|
|
20
20
|
|
|
21
21
|
## Features
|
|
22
22
|
|
|
23
|
-
- **Complete Data Access** - Events, matches, players, teams, and
|
|
23
|
+
- **Complete Data Access** - Events, matches, players, teams, series, and news
|
|
24
24
|
- **Type-Safe** - Pydantic models with rich type hints and field descriptions
|
|
25
25
|
- **Production-Ready** - Retry logic, rate limiting, and LRU-cached enrichment
|
|
26
26
|
- **Curried Access** - Bind a player/team/series ID once, then call sub-methods without re-passing
|
|
@@ -133,6 +133,17 @@ performance = s.performance() # Advanced performance stats
|
|
|
133
133
|
economy = s.economy(game_id=1) # Economy data
|
|
134
134
|
```
|
|
135
135
|
|
|
136
|
+
### News
|
|
137
|
+
|
|
138
|
+
```python
|
|
139
|
+
page = client.news(page=1) # Browse the news listing
|
|
140
|
+
for item in page.news[:5]:
|
|
141
|
+
print(item.title)
|
|
142
|
+
|
|
143
|
+
article = client.news.article(734100) # Fetch a full article
|
|
144
|
+
print(article.content_md) # Article body as Markdown
|
|
145
|
+
```
|
|
146
|
+
|
|
136
147
|
## Documentation
|
|
137
148
|
|
|
138
149
|
- **Official Docs** - [vlrdevapi.pages.dev/docs](https://vlrdevapi.pages.dev/docs)
|