vlrdevapi 1.6.2__tar.gz → 2.0.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.0.0/.gitattributes +7 -0
- vlrdevapi-2.0.0/.github/ISSUE_TEMPLATE/bug_report.md +33 -0
- vlrdevapi-2.0.0/.github/ISSUE_TEMPLATE/feature_request.md +19 -0
- vlrdevapi-2.0.0/.github/workflows/docs-check.yml +29 -0
- vlrdevapi-2.0.0/.github/workflows/publish.yml +77 -0
- vlrdevapi-2.0.0/.github/workflows/test.yml +39 -0
- vlrdevapi-2.0.0/.gitignore +31 -0
- vlrdevapi-2.0.0/.python-version +1 -0
- vlrdevapi-2.0.0/.readthedocs.yaml +15 -0
- vlrdevapi-2.0.0/CHANGELOG.md +69 -0
- vlrdevapi-2.0.0/CODE_OF_CONDUCT.md +19 -0
- vlrdevapi-2.0.0/CONTRIBUTING.md +41 -0
- vlrdevapi-1.6.2/LICENSE → vlrdevapi-2.0.0/LICENCE +2 -2
- vlrdevapi-2.0.0/PKG-INFO +215 -0
- vlrdevapi-2.0.0/README.md +167 -0
- vlrdevapi-2.0.0/SECURITY.md +9 -0
- vlrdevapi-2.0.0/SUPPORT.md +17 -0
- vlrdevapi-2.0.0/pyproject.toml +82 -0
- vlrdevapi-2.0.0/scripts/check_mdx_examples.py +410 -0
- vlrdevapi-2.0.0/scripts/download_fixtures.py +345 -0
- vlrdevapi-2.0.0/src/vlrdevapi/__init__.py +95 -0
- vlrdevapi-2.0.0/src/vlrdevapi/__init__.pyi +86 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_base.py +151 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_cache.py +46 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_client.py +138 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_event/__init__.py +17 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_event/_common.py +15 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_event/info/__init__.py +9 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_event/info/models.py +139 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_event/info/namespace.py +77 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_event/info/namespace.pyi +16 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_event/info/parser.py +379 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_event/list/__init__.py +15 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_event/list/models.py +91 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_event/list/namespace.py +162 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_event/list/namespace.pyi +27 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_event/list/parser.py +324 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_event/matches/__init__.py +9 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_event/matches/models.py +83 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_event/matches/namespace.py +126 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_event/matches/namespace.pyi +23 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_event/matches/parser.py +240 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_event/namespace.py +326 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_event/namespace.pyi +72 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_event/stages/__init__.py +4 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_event/stages/models.py +49 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_event/stages/namespace.py +75 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_event/stages/namespace.pyi +16 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_event/stages/parser.py +345 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_event/standings/__init__.py +9 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_event/standings/models.py +100 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_event/standings/namespace.py +96 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_event/standings/namespace.pyi +16 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_event/standings/parser.py +163 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_event/teams/__init__.py +8 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_event/teams/models.py +63 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_event/teams/namespace.py +87 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_event/teams/namespace.pyi +16 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_event/teams/parser.py +73 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_matches/__init__.py +13 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_matches/common.py +230 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_matches/completed/__init__.py +8 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_matches/completed/models.py +54 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_matches/completed/namespace.py +90 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_matches/completed/namespace.pyi +21 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_matches/completed/parser.py +151 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_matches/live/__init__.py +4 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_matches/live/models.py +47 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_matches/live/namespace.py +67 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_matches/live/namespace.pyi +16 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_matches/live/parser.py +137 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_matches/namespace.py +80 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_matches/namespace.pyi +25 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_matches/upcoming/__init__.py +8 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_matches/upcoming/models.py +53 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_matches/upcoming/namespace.py +85 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_matches/upcoming/namespace.pyi +21 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_matches/upcoming/parser.py +146 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_player/__init__.py +5 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_player/_common_parsing.py +171 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_player/agents/__init__.py +4 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_player/agents/models.py +42 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_player/agents/namespace.py +84 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_player/agents/namespace.pyi +22 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_player/agents/parser.py +29 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_player/info/__init__.py +4 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_player/info/models.py +33 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_player/info/namespace.py +66 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_player/info/namespace.pyi +16 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_player/info/parser.py +52 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_player/matches/__init__.py +9 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_player/matches/models.py +83 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_player/matches/namespace.py +85 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_player/matches/namespace.pyi +16 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_player/matches/parser.py +118 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_player/namespace.py +306 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_player/namespace.pyi +64 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_player/profile/__init__.py +4 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_player/profile/models.py +44 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_player/profile/namespace.py +78 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_player/profile/namespace.pyi +16 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_player/profile/parser.py +89 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_player/teams/__init__.py +9 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_player/teams/models.py +61 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_player/teams/namespace.py +110 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_player/teams/namespace.pyi +22 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_player/teams/parser.py +24 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_series/__init__.py +21 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_series/economy/__init__.py +15 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_series/economy/models.py +85 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_series/economy/namespace.py +106 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_series/economy/namespace.pyi +16 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_series/economy/parser.py +132 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_series/info/__init__.py +4 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_series/info/models.py +113 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_series/info/namespace.py +66 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_series/info/namespace.pyi +16 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_series/info/parser.py +361 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_series/match_namespace.py +220 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_series/match_namespace.pyi +42 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_series/namespace.py +186 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_series/namespace.pyi +39 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_series/performance/__init__.py +19 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_series/performance/models.py +205 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_series/performance/namespace.py +94 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_series/performance/namespace.pyi +16 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_series/performance/parser.py +313 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_series/players/__init__.py +17 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_series/players/models.py +84 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_series/players/namespace.py +70 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_series/players/namespace.pyi +16 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_series/players/parser.py +345 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_series/rounds/__init__.py +4 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_series/rounds/models.py +71 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_series/rounds/namespace.py +100 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_series/rounds/namespace.pyi +16 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_series/rounds/parser.py +108 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_series/vods/__init__.py +4 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_series/vods/models.py +28 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_series/vods/namespace.py +67 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_series/vods/namespace.pyi +16 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_series/vods/parser.py +30 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_team/__init__.py +5 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_team/completed_matches/__init__.py +8 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_team/completed_matches/models.py +43 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_team/completed_matches/namespace.py +100 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_team/completed_matches/namespace.pyi +16 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_team/completed_matches/parser.py +84 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_team/info/__init__.py +4 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_team/info/models.py +44 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_team/info/namespace.py +97 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_team/info/namespace.pyi +16 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_team/info/parser.py +168 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_team/namespace.py +415 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_team/namespace.pyi +89 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_team/placements/__init__.py +8 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_team/placements/models.py +59 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_team/placements/namespace.py +61 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_team/placements/namespace.pyi +16 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_team/placements/parser.py +177 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_team/roster/__init__.py +4 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_team/roster/models.py +40 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_team/roster/namespace.py +61 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_team/roster/namespace.pyi +16 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_team/roster/parser.py +146 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_team/stats/__init__.py +17 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_team/stats/models.py +104 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_team/stats/namespace.py +127 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_team/stats/namespace.pyi +28 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_team/stats/parser.py +504 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_team/transactions/__init__.py +9 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_team/transactions/models.py +52 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_team/transactions/namespace.py +60 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_team/transactions/namespace.pyi +16 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_team/transactions/parser.py +97 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_team/upcoming_matches/__init__.py +8 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_team/upcoming_matches/models.py +40 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_team/upcoming_matches/namespace.py +97 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_team/upcoming_matches/namespace.pyi +16 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_team/upcoming_matches/parser.py +84 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_utils/__init__.py +9 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_utils/pagination.py +37 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_utils/paths.py +83 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_utils/team_enrichment.py +80 -0
- vlrdevapi-2.0.0/src/vlrdevapi/_utils/team_parsing.py +26 -0
- vlrdevapi-2.0.0/src/vlrdevapi/commons/__init__.py +26 -0
- {vlrdevapi-1.6.2/src/vlrdevapi → vlrdevapi-2.0.0/src/vlrdevapi/commons}/countries.py +112 -105
- vlrdevapi-2.0.0/src/vlrdevapi/commons/datetime.py +218 -0
- vlrdevapi-2.0.0/src/vlrdevapi/commons/mappings.py +49 -0
- vlrdevapi-2.0.0/src/vlrdevapi/commons/prizes.py +32 -0
- vlrdevapi-2.0.0/src/vlrdevapi/commons/timezone.py +321 -0
- vlrdevapi-2.0.0/src/vlrdevapi/exceptions.py +89 -0
- vlrdevapi-2.0.0/src/vlrdevapi/fetcher.py +232 -0
- vlrdevapi-2.0.0/src/vlrdevapi/py.typed +0 -0
- vlrdevapi-2.0.0/src/vlrdevapi/validators.py +95 -0
- vlrdevapi-2.0.0/uv.lock +1037 -0
- vlrdevapi-2.0.0/wrangler.jsonc +6 -0
- vlrdevapi-1.6.2/PKG-INFO +0 -202
- vlrdevapi-1.6.2/README.md +0 -144
- vlrdevapi-1.6.2/pyproject.toml +0 -73
- vlrdevapi-1.6.2/setup.cfg +0 -4
- vlrdevapi-1.6.2/src/vlrdevapi/__init__.py +0 -132
- vlrdevapi-1.6.2/src/vlrdevapi/config.py +0 -134
- vlrdevapi-1.6.2/src/vlrdevapi/events/__init__.py +0 -62
- vlrdevapi-1.6.2/src/vlrdevapi/events/info.py +0 -211
- vlrdevapi-1.6.2/src/vlrdevapi/events/list_events.py +0 -273
- vlrdevapi-1.6.2/src/vlrdevapi/events/match_summary.py +0 -140
- vlrdevapi-1.6.2/src/vlrdevapi/events/matches.py +0 -258
- vlrdevapi-1.6.2/src/vlrdevapi/events/models.py +0 -165
- vlrdevapi-1.6.2/src/vlrdevapi/events/stages.py +0 -45
- vlrdevapi-1.6.2/src/vlrdevapi/events/standings.py +0 -191
- vlrdevapi-1.6.2/src/vlrdevapi/events/teams.py +0 -97
- vlrdevapi-1.6.2/src/vlrdevapi/exceptions.py +0 -67
- vlrdevapi-1.6.2/src/vlrdevapi/fetcher.py +0 -654
- vlrdevapi-1.6.2/src/vlrdevapi/matches/__init__.py +0 -16
- vlrdevapi-1.6.2/src/vlrdevapi/matches/_parser.py +0 -201
- vlrdevapi-1.6.2/src/vlrdevapi/matches/completed.py +0 -72
- vlrdevapi-1.6.2/src/vlrdevapi/matches/live.py +0 -43
- vlrdevapi-1.6.2/src/vlrdevapi/matches/models.py +0 -31
- vlrdevapi-1.6.2/src/vlrdevapi/matches/upcoming.py +0 -75
- vlrdevapi-1.6.2/src/vlrdevapi/players/__init__.py +0 -20
- vlrdevapi-1.6.2/src/vlrdevapi/players/_parser.py +0 -40
- vlrdevapi-1.6.2/src/vlrdevapi/players/agent_stats.py +0 -115
- vlrdevapi-1.6.2/src/vlrdevapi/players/matches.py +0 -231
- vlrdevapi-1.6.2/src/vlrdevapi/players/models.py +0 -93
- vlrdevapi-1.6.2/src/vlrdevapi/players/profile.py +0 -183
- vlrdevapi-1.6.2/src/vlrdevapi/search/__init__.py +0 -31
- vlrdevapi-1.6.2/src/vlrdevapi/search/models.py +0 -68
- vlrdevapi-1.6.2/src/vlrdevapi/search/search.py +0 -432
- vlrdevapi-1.6.2/src/vlrdevapi/series/__init__.py +0 -19
- vlrdevapi-1.6.2/src/vlrdevapi/series/_parser.py +0 -125
- vlrdevapi-1.6.2/src/vlrdevapi/series/info.py +0 -203
- vlrdevapi-1.6.2/src/vlrdevapi/series/matches.py +0 -579
- vlrdevapi-1.6.2/src/vlrdevapi/series/models.py +0 -108
- vlrdevapi-1.6.2/src/vlrdevapi/status.py +0 -32
- vlrdevapi-1.6.2/src/vlrdevapi/teams/__init__.py +0 -43
- vlrdevapi-1.6.2/src/vlrdevapi/teams/info.py +0 -152
- vlrdevapi-1.6.2/src/vlrdevapi/teams/matches.py +0 -540
- vlrdevapi-1.6.2/src/vlrdevapi/teams/models.py +0 -135
- vlrdevapi-1.6.2/src/vlrdevapi/teams/placements.py +0 -131
- vlrdevapi-1.6.2/src/vlrdevapi/teams/roster.py +0 -133
- vlrdevapi-1.6.2/src/vlrdevapi/teams/transactions.py +0 -362
- vlrdevapi-1.6.2/src/vlrdevapi/utils.py +0 -227
- vlrdevapi-1.6.2/src/vlrdevapi.egg-info/PKG-INFO +0 -202
- vlrdevapi-1.6.2/src/vlrdevapi.egg-info/SOURCES.txt +0 -51
- vlrdevapi-1.6.2/src/vlrdevapi.egg-info/dependency_links.txt +0 -1
- vlrdevapi-1.6.2/src/vlrdevapi.egg-info/requires.txt +0 -12
- vlrdevapi-1.6.2/src/vlrdevapi.egg-info/top_level.txt +0 -1
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Bug Report
|
|
3
|
+
about: Report a problem with vlrdevapi
|
|
4
|
+
title: ""
|
|
5
|
+
labels: bug
|
|
6
|
+
assignees: ""
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Description
|
|
10
|
+
|
|
11
|
+
A clear description of the bug.
|
|
12
|
+
|
|
13
|
+
## Reproduction
|
|
14
|
+
|
|
15
|
+
```python
|
|
16
|
+
import vlrdevapi
|
|
17
|
+
|
|
18
|
+
# Minimal code to reproduce
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Expected
|
|
22
|
+
|
|
23
|
+
What you expected to happen.
|
|
24
|
+
|
|
25
|
+
## Actual
|
|
26
|
+
|
|
27
|
+
What actually happened (include full traceback).
|
|
28
|
+
|
|
29
|
+
## Environment
|
|
30
|
+
|
|
31
|
+
- Python version:
|
|
32
|
+
- vlrdevapi version:
|
|
33
|
+
- OS:
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Feature Request
|
|
3
|
+
about: Suggest an idea for vlrdevapi
|
|
4
|
+
title: ""
|
|
5
|
+
labels: enhancement
|
|
6
|
+
assignees: ""
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Problem
|
|
10
|
+
|
|
11
|
+
What problem would this feature solve?
|
|
12
|
+
|
|
13
|
+
## Proposed Solution
|
|
14
|
+
|
|
15
|
+
How would you like this to work?
|
|
16
|
+
|
|
17
|
+
## Alternatives
|
|
18
|
+
|
|
19
|
+
What alternatives have you considered?
|
|
@@ -0,0 +1,29 @@
|
|
|
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
|
+
|
|
22
|
+
with:
|
|
23
|
+
python-version: '3.12'
|
|
24
|
+
|
|
25
|
+
- name: Install package
|
|
26
|
+
run: uv sync --group dev
|
|
27
|
+
|
|
28
|
+
- name: Run MDX examples check
|
|
29
|
+
run: uv run scripts/check_mdx_examples.py
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
name: Publish to PyPI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
release:
|
|
5
|
+
types: [published]
|
|
6
|
+
|
|
7
|
+
permissions:
|
|
8
|
+
contents: read
|
|
9
|
+
|
|
10
|
+
jobs:
|
|
11
|
+
test:
|
|
12
|
+
name: Test on Python ${{ matrix.python-version }}
|
|
13
|
+
runs-on: ubuntu-latest
|
|
14
|
+
strategy:
|
|
15
|
+
matrix:
|
|
16
|
+
python-version: ['3.11', '3.12', '3.13', '3.14']
|
|
17
|
+
|
|
18
|
+
steps:
|
|
19
|
+
- uses: actions/checkout@v7
|
|
20
|
+
|
|
21
|
+
- uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b
|
|
22
|
+
with:
|
|
23
|
+
python-version: ${{ matrix.python-version }}
|
|
24
|
+
|
|
25
|
+
- name: Install dependencies
|
|
26
|
+
run: uv sync --group dev
|
|
27
|
+
|
|
28
|
+
- name: Download fixtures
|
|
29
|
+
run: uv run python scripts/download_fixtures.py
|
|
30
|
+
|
|
31
|
+
- name: Run tests
|
|
32
|
+
run: uv run pytest
|
|
33
|
+
|
|
34
|
+
release-build:
|
|
35
|
+
name: Build release distributions
|
|
36
|
+
runs-on: ubuntu-latest
|
|
37
|
+
needs:
|
|
38
|
+
- test
|
|
39
|
+
|
|
40
|
+
steps:
|
|
41
|
+
- uses: actions/checkout@v7
|
|
42
|
+
|
|
43
|
+
- uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b
|
|
44
|
+
with:
|
|
45
|
+
python-version: "3.12"
|
|
46
|
+
|
|
47
|
+
- name: Build package
|
|
48
|
+
run: uv build
|
|
49
|
+
|
|
50
|
+
- name: Upload distributions
|
|
51
|
+
uses: actions/upload-artifact@v4
|
|
52
|
+
with:
|
|
53
|
+
name: release-dists
|
|
54
|
+
path: dist/
|
|
55
|
+
|
|
56
|
+
pypi-publish:
|
|
57
|
+
name: Publish to PyPI
|
|
58
|
+
runs-on: ubuntu-latest
|
|
59
|
+
needs:
|
|
60
|
+
- release-build
|
|
61
|
+
|
|
62
|
+
permissions:
|
|
63
|
+
id-token: write
|
|
64
|
+
|
|
65
|
+
environment:
|
|
66
|
+
name: pypi
|
|
67
|
+
url: https://pypi.org/project/vlrdevapi/
|
|
68
|
+
|
|
69
|
+
steps:
|
|
70
|
+
- name: Retrieve release distributions
|
|
71
|
+
uses: actions/download-artifact@v4
|
|
72
|
+
with:
|
|
73
|
+
name: release-dists
|
|
74
|
+
path: dist/
|
|
75
|
+
|
|
76
|
+
- name: Publish to PyPI
|
|
77
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
name: Test
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
paths:
|
|
6
|
+
- 'src/**'
|
|
7
|
+
- 'tests/**'
|
|
8
|
+
- 'scripts/download_fixtures.py'
|
|
9
|
+
- '.github/workflows/test.yml'
|
|
10
|
+
push:
|
|
11
|
+
branches: [main]
|
|
12
|
+
paths:
|
|
13
|
+
- 'src/**'
|
|
14
|
+
- 'tests/**'
|
|
15
|
+
- 'scripts/download_fixtures.py'
|
|
16
|
+
- '.github/workflows/test.yml'
|
|
17
|
+
|
|
18
|
+
jobs:
|
|
19
|
+
test:
|
|
20
|
+
runs-on: ubuntu-latest
|
|
21
|
+
strategy:
|
|
22
|
+
matrix:
|
|
23
|
+
python-version: ['3.11', '3.12', '3.13', '3.14']
|
|
24
|
+
|
|
25
|
+
steps:
|
|
26
|
+
- uses: actions/checkout@v7
|
|
27
|
+
|
|
28
|
+
- uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b
|
|
29
|
+
with:
|
|
30
|
+
python-version: ${{ matrix.python-version }}
|
|
31
|
+
|
|
32
|
+
- name: Install dependencies
|
|
33
|
+
run: uv sync --group dev
|
|
34
|
+
|
|
35
|
+
- name: Download fixtures
|
|
36
|
+
run: uv run python scripts/download_fixtures.py
|
|
37
|
+
|
|
38
|
+
- name: Run tests
|
|
39
|
+
run: uv run pytest
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Python-generated files
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[oc]
|
|
4
|
+
build/
|
|
5
|
+
dist/
|
|
6
|
+
wheels/
|
|
7
|
+
*.egg-info
|
|
8
|
+
|
|
9
|
+
# Virtual environments
|
|
10
|
+
.venv
|
|
11
|
+
tests/test_html/
|
|
12
|
+
|
|
13
|
+
nul
|
|
14
|
+
.pytest_cache/
|
|
15
|
+
.ruff_cache
|
|
16
|
+
.kilo
|
|
17
|
+
|
|
18
|
+
# Sphinx build output
|
|
19
|
+
docs-py/_build/
|
|
20
|
+
|
|
21
|
+
# Zensical build output
|
|
22
|
+
docs-py/site/
|
|
23
|
+
|
|
24
|
+
# Debug script
|
|
25
|
+
main.py
|
|
26
|
+
|
|
27
|
+
# Official docs dependencies
|
|
28
|
+
official-docs/node_modules/
|
|
29
|
+
|
|
30
|
+
# Zensical cache
|
|
31
|
+
docs-py/.cache/
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3.12
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
version: 2
|
|
2
|
+
|
|
3
|
+
build:
|
|
4
|
+
os: ubuntu-24.04
|
|
5
|
+
tools:
|
|
6
|
+
python: latest
|
|
7
|
+
jobs:
|
|
8
|
+
install:
|
|
9
|
+
- pip install zensical mkdocstrings mkdocstrings-python
|
|
10
|
+
build:
|
|
11
|
+
html:
|
|
12
|
+
- cd docs-py && zensical build
|
|
13
|
+
post_build:
|
|
14
|
+
- mkdir -p $READTHEDOCS_OUTPUT/html/
|
|
15
|
+
- cp --recursive docs-py/site/* $READTHEDOCS_OUTPUT/html/
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/).
|
|
7
|
+
|
|
8
|
+
## [2.0.0] - 2026-07-07
|
|
9
|
+
|
|
10
|
+
### Major Rewrite
|
|
11
|
+
|
|
12
|
+
Complete rewrite of the library. v2.0.0 replaces the asynchronous
|
|
13
|
+
aiohttp-based v1.x with a synchronous httpx-based architecture.
|
|
14
|
+
The API surface, module structure, and type system are all new.
|
|
15
|
+
|
|
16
|
+
### Added
|
|
17
|
+
|
|
18
|
+
- **Sync-first client** - `VLRClient` with context manager support and
|
|
19
|
+
thread-safe parallel enrichment for bulk operations.
|
|
20
|
+
- **Curried access pattern** - bind a player/team/series/event ID once,
|
|
21
|
+
then chain sub-methods without re-passing the ID.
|
|
22
|
+
- **Event namespace** - list with pagination and filtering (tier, region,
|
|
23
|
+
status), plus info, matches, stages, standings, and teams.
|
|
24
|
+
- **Match listing namespace** - live, upcoming (paginated), and completed
|
|
25
|
+
(paginated) match feeds with team enrichment.
|
|
26
|
+
- **Player namespace** - info, teams (current/past), agent stats
|
|
27
|
+
(30d/60d/90d/all), match history (paginated), and consolidated profile.
|
|
28
|
+
- **Series namespace** - info (veto, games, scores), player stats per game,
|
|
29
|
+
round-by-round data, performance (kill matrices, advanced stats),
|
|
30
|
+
economy (buy types, spend analysis), and VOD links.
|
|
31
|
+
- **Team namespace** - info, roster, stats (per-map with optional agent
|
|
32
|
+
composition), placements, transactions, completed and upcoming matches.
|
|
33
|
+
- **Pydantic v2 models** - fully typed with Google-style docstrings and
|
|
34
|
+
field descriptions.
|
|
35
|
+
- **Built-in resilience** - configurable retry with exponential/linear/
|
|
36
|
+
constant backoff, jitter, and token-bucket rate limiting.
|
|
37
|
+
- **Thread-safe LRU cache** - bounded `LRUCache` for team data to avoid
|
|
38
|
+
redundant HTTP requests during enrichment.
|
|
39
|
+
- **Input validation** - `@sanitize_and_validate` decorator with positive-ID
|
|
40
|
+
checks and Pydantic type coercion.
|
|
41
|
+
- **Custom exceptions** - typed hierarchy (`NotFoundError`, `RateLimitError`,
|
|
42
|
+
`ParsingError`, `ValidationError`, etc.) for clean error handling.
|
|
43
|
+
- **Documentation** - Zensical/MkDocs site via `docs-py/` (ReadTheDocs)
|
|
44
|
+
with auto-generated API reference from docstrings.
|
|
45
|
+
- **Official website** - Next.js + Fumadocs site via `official-docs/`
|
|
46
|
+
(Cloudflare Pages) with interactive code examples.
|
|
47
|
+
- **Doc validation** - `scripts/check_mdx_examples.py` validates syntax,
|
|
48
|
+
imports, and live execution of all code examples in docs.
|
|
49
|
+
|
|
50
|
+
### Changed
|
|
51
|
+
|
|
52
|
+
- **Architecture** - migrated from async aiohttp to synchronous httpx.
|
|
53
|
+
No more `await` or `async with` required.
|
|
54
|
+
- **No explicit session management** - `VLRClient` handles connection
|
|
55
|
+
pooling, retries, and rate limiting internally.
|
|
56
|
+
- **Type system** - replaced raw dict returns with Pydantic v2 models
|
|
57
|
+
for all endpoints.
|
|
58
|
+
- **Build system** - moved from setuptools to hatchling with `uv` for
|
|
59
|
+
dependency management.
|
|
60
|
+
- **Python requirement** - raised minimum to 3.11.
|
|
61
|
+
|
|
62
|
+
### Removed
|
|
63
|
+
|
|
64
|
+
- All v1.x async endpoints (`get_event`, `get_team`, `get_player`, etc.)
|
|
65
|
+
are removed. See the new module-level or client-based API.
|
|
66
|
+
- `aiohttp` and `asyncio` dependencies.
|
|
67
|
+
- v1.x match/event/team parsing modules.
|
|
68
|
+
|
|
69
|
+
[2.0.0]: https://github.com/Vanshbordia/vlrdevapi/compare/v1.6.2...v2.0.0
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Contributor Covenant Code of Conduct
|
|
2
|
+
|
|
3
|
+
## Our Pledge
|
|
4
|
+
|
|
5
|
+
We as members, contributors, and leaders pledge to make participation in our
|
|
6
|
+
community a harassment-free experience for everyone, regardless of age, body
|
|
7
|
+
size, visible or invisible disability, ethnicity, sex characteristics, gender
|
|
8
|
+
identity and expression, level of experience, education, socio-economic status,
|
|
9
|
+
nationality, personal appearance, race, religion, or sexual identity and
|
|
10
|
+
orientation.
|
|
11
|
+
|
|
12
|
+
We pledge to act and interact in ways that contribute to an open, welcoming,
|
|
13
|
+
diverse, inclusive, and healthy community.
|
|
14
|
+
|
|
15
|
+
## Enforcement
|
|
16
|
+
|
|
17
|
+
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
|
18
|
+
reported to the project maintainers at vanshb@riftwatch.org. All complaints
|
|
19
|
+
will be reviewed and investigated.
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Contributing to vlrdevapi
|
|
2
|
+
|
|
3
|
+
Thank you for your interest in contributing!
|
|
4
|
+
|
|
5
|
+
## Development Setup
|
|
6
|
+
|
|
7
|
+
1. Clone the repo: `git clone https://github.com/Vanshbordia/vlrdevapi`
|
|
8
|
+
2. Install dependencies: `uv sync --group dev`
|
|
9
|
+
3. Run pre-checks: `ruff check src/` and `ty check src/vlrdevapi/`
|
|
10
|
+
|
|
11
|
+
## Pull Request Guidelines
|
|
12
|
+
|
|
13
|
+
- Keep PRs focused on a single concern.
|
|
14
|
+
- Add or update tests for any changed behavior.
|
|
15
|
+
- Run `ruff check src/ tests/` and `ty check src/vlrdevapi/` before pushing.
|
|
16
|
+
- Update the CHANGELOG.md under the next version header.
|
|
17
|
+
- If changing documentation (.mdx files), run `uv run scripts/check_mdx_examples.py` and ensure all checks pass.
|
|
18
|
+
|
|
19
|
+
## Code Style
|
|
20
|
+
|
|
21
|
+
- Follow PEP 8 with `ruff` defaults (120-char lines, double quotes).
|
|
22
|
+
- Use Google-style docstrings on all public methods.
|
|
23
|
+
- Annotate all function signatures with type hints.
|
|
24
|
+
- Use `Literal` over `Union[Literal, str]` — validation is handled at runtime.
|
|
25
|
+
|
|
26
|
+
## Project Structure
|
|
27
|
+
|
|
28
|
+
```
|
|
29
|
+
src/vlrdevapi/
|
|
30
|
+
_base.py # SyncNamespace base class
|
|
31
|
+
_cache.py # LRUCache
|
|
32
|
+
client.py # VLRClient
|
|
33
|
+
commons/ # Shared utilities (mappings, datetime, countries)
|
|
34
|
+
event/ # Event/tournament endpoints
|
|
35
|
+
matches/ # Match listing endpoints (live / upcoming / completed)
|
|
36
|
+
player/ # Player endpoints (info / teams / agents / matches / profile)
|
|
37
|
+
series/ # Series (match detail) endpoints
|
|
38
|
+
team/ # Team endpoints (info / roster / placements / etc.)
|
|
39
|
+
validators.py # Input sanitization / validation
|
|
40
|
+
fetcher.py # HTTP fetching with retries and rate limiting
|
|
41
|
+
```
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
MIT License
|
|
2
2
|
|
|
3
|
-
Copyright (c)
|
|
3
|
+
Copyright (c) 2026 Vansh Bordia
|
|
4
4
|
|
|
5
5
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
6
|
of this software and associated documentation files (the "Software"), to deal
|
|
@@ -18,4 +18,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
|
18
18
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
19
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
20
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
-
SOFTWARE.
|
|
21
|
+
SOFTWARE.
|
vlrdevapi-2.0.0/PKG-INFO
ADDED
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: vlrdevapi
|
|
3
|
+
Version: 2.0.0
|
|
4
|
+
Summary: A Python library to scrape data from vlr.gg
|
|
5
|
+
Project-URL: Homepage, https://vlrdevapi.pages.dev/
|
|
6
|
+
Project-URL: Repository, https://github.com/Vanshbordia/vlrdevapi
|
|
7
|
+
Project-URL: Documentation, https://vlrdevapi.pages.dev/docs
|
|
8
|
+
License: MIT License
|
|
9
|
+
|
|
10
|
+
Copyright (c) 2026 Vansh Bordia
|
|
11
|
+
|
|
12
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
13
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
14
|
+
in the Software without restriction, including without limitation the rights
|
|
15
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
16
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
17
|
+
furnished to do so, subject to the following conditions:
|
|
18
|
+
|
|
19
|
+
The above copyright notice and this permission notice shall be included in all
|
|
20
|
+
copies or substantial portions of the Software.
|
|
21
|
+
|
|
22
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
23
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
24
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
25
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
26
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
27
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
28
|
+
SOFTWARE.
|
|
29
|
+
License-File: LICENCE
|
|
30
|
+
Classifier: Development Status :: 3 - Alpha
|
|
31
|
+
Classifier: Intended Audience :: Developers
|
|
32
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
33
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
34
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
35
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
36
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
37
|
+
Classifier: Topic :: Games/Entertainment
|
|
38
|
+
Classifier: Topic :: Internet :: WWW/HTTP
|
|
39
|
+
Requires-Python: >=3.11
|
|
40
|
+
Requires-Dist: httpx>=0.28.1
|
|
41
|
+
Requires-Dist: pydantic>=2.12.5
|
|
42
|
+
Requires-Dist: selectolax>=0.4.7
|
|
43
|
+
Provides-Extra: test
|
|
44
|
+
Requires-Dist: pytest-cov>=7.1.0; extra == 'test'
|
|
45
|
+
Requires-Dist: pytest>=8.0; extra == 'test'
|
|
46
|
+
Requires-Dist: respx>=0.23.1; extra == 'test'
|
|
47
|
+
Description-Content-Type: text/markdown
|
|
48
|
+
|
|
49
|
+
<div align="center">
|
|
50
|
+
|
|
51
|
+
<img src="official-docs/public/logo.svg" width="120" alt="vlrdevapi logo">
|
|
52
|
+
|
|
53
|
+
# vlrdevapi
|
|
54
|
+
|
|
55
|
+
**Python library for VLR.gg Valorant esports data**
|
|
56
|
+
|
|
57
|
+
[](https://pypi.org/project/vlrdevapi/)
|
|
58
|
+
[](https://pypi.org/project/vlrdevapi/)
|
|
59
|
+
[](https://opensource.org/licenses/MIT)
|
|
60
|
+
|
|
61
|
+
[Documentation](https://vlrdevapi.pages.dev/docs) · [ReadTheDocs](https://vlrdevapi.readthedocs.io/) · [PyPI](https://pypi.org/project/vlrdevapi/) · [GitHub](https://github.com/Vanshbordia/vlrdevapi)
|
|
62
|
+
|
|
63
|
+
</div>
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
Access Valorant esports data from VLR.gg with a clean, type-safe Python API. Get tournament info, match schedules, player stats, team data, and series/match-level details.
|
|
68
|
+
|
|
69
|
+
## Features
|
|
70
|
+
|
|
71
|
+
- **Complete Data Access** - Events, matches, players, teams, and series
|
|
72
|
+
- **Type-Safe** - Pydantic models with rich type hints and field descriptions
|
|
73
|
+
- **Production-Ready** - Retry logic, rate limiting, and LRU-cached enrichment
|
|
74
|
+
- **Curried Access** - Bind a player/team/series ID once, then call sub-methods without re-passing
|
|
75
|
+
- **Managed with [uv](https://docs.astral.sh/uv/)** - Fast dependency resolution and virtual environment management
|
|
76
|
+
|
|
77
|
+
## Installation
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
# Using uv (recommended)
|
|
81
|
+
uv add vlrdevapi
|
|
82
|
+
|
|
83
|
+
# Using pip
|
|
84
|
+
pip install vlrdevapi
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
Requires Python 3.11+
|
|
88
|
+
|
|
89
|
+
## Quick Start
|
|
90
|
+
|
|
91
|
+
### Module-level (no client needed)
|
|
92
|
+
|
|
93
|
+
```python
|
|
94
|
+
import vlrdevapi
|
|
95
|
+
|
|
96
|
+
# Single-shot fetches via module-level access
|
|
97
|
+
info = vlrdevapi.player.info(player_id=11225)
|
|
98
|
+
print(f"{info.name} - {info.country}")
|
|
99
|
+
|
|
100
|
+
series = vlrdevapi.series.info(series_id=542272)
|
|
101
|
+
print(f"{series.team1.name} vs {series.team2.name}")
|
|
102
|
+
|
|
103
|
+
event = vlrdevapi.event.info(event_id=2863)
|
|
104
|
+
print(f"{event.name} - {event.subtitle}")
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### Sync client
|
|
108
|
+
|
|
109
|
+
```python
|
|
110
|
+
from vlrdevapi import VLRClient
|
|
111
|
+
|
|
112
|
+
with VLRClient() as client:
|
|
113
|
+
# Curried access - bind a player once
|
|
114
|
+
player = client.player(11225)
|
|
115
|
+
print(player.info().name)
|
|
116
|
+
print(player.teams().current_teams)
|
|
117
|
+
print(player.agents(timespan="all").agents[:3])
|
|
118
|
+
|
|
119
|
+
# Team data
|
|
120
|
+
team = client.team(1034)
|
|
121
|
+
roster = team.roster()
|
|
122
|
+
placements = team.placements()
|
|
123
|
+
|
|
124
|
+
# Event data
|
|
125
|
+
event = client.event(2863)
|
|
126
|
+
stages = event.stages()
|
|
127
|
+
matches = event.matches()
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
## API Modules
|
|
131
|
+
|
|
132
|
+
### Matches
|
|
133
|
+
|
|
134
|
+
```python
|
|
135
|
+
matches = client.matches.upcoming(page=1)
|
|
136
|
+
live = client.matches.live()
|
|
137
|
+
completed = client.matches.completed(page=1)
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
### Players
|
|
141
|
+
|
|
142
|
+
```python
|
|
143
|
+
p = client.player(11225)
|
|
144
|
+
info = p.info() # Basic info
|
|
145
|
+
teams = p.teams() # Current / past teams
|
|
146
|
+
agents = p.agents(timespan="60d") # Agent stats
|
|
147
|
+
matches = p.matches(limit=20) # Match history
|
|
148
|
+
profile = p.profile() # Consolidated profile
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
### Teams
|
|
152
|
+
|
|
153
|
+
```python
|
|
154
|
+
t = client.team(1034)
|
|
155
|
+
info = t.info() # Name, tag, socials
|
|
156
|
+
roster = t.roster() # Players + staff
|
|
157
|
+
placements = t.placements() # Event placements + winnings
|
|
158
|
+
transactions = t.transactions() # Join / leave history
|
|
159
|
+
completed = t.completed_matches() # Completed match results
|
|
160
|
+
upcoming = t.upcoming_matches() # Upcoming match schedule
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
### Events
|
|
164
|
+
|
|
165
|
+
```python
|
|
166
|
+
e = client.event(2863)
|
|
167
|
+
info = e.info() # Event details
|
|
168
|
+
matches = e.matches() # Match list
|
|
169
|
+
standings = e.standings() # Standings / prize distribution
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
### Series
|
|
173
|
+
|
|
174
|
+
```python
|
|
175
|
+
s = client.series(542272)
|
|
176
|
+
info = s.info() # Series overview
|
|
177
|
+
vods = s.vods() # VOD links
|
|
178
|
+
players = s.players(game_id=1) # Per-game player stats
|
|
179
|
+
rounds = s.rounds(game_id=1) # Round-by-round data
|
|
180
|
+
performance = s.performance() # Advanced performance stats
|
|
181
|
+
economy = s.economy(game_id=1) # Economy data
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
## Documentation
|
|
185
|
+
|
|
186
|
+
- **Official Docs** - [vlrdevapi.pages.dev/docs](https://vlrdevapi.pages.dev/docs)
|
|
187
|
+
- **ReadTheDocs** - [vlrdevapi.readthedocs.io](https://vlrdevapi.readthedocs.io/)
|
|
188
|
+
|
|
189
|
+
## Development
|
|
190
|
+
|
|
191
|
+
This project uses [uv](https://docs.astral.sh/uv/) for dependency management.
|
|
192
|
+
|
|
193
|
+
```bash
|
|
194
|
+
# Clone and set up
|
|
195
|
+
git clone https://github.com/Vanshbordia/vlrdevapi
|
|
196
|
+
cd vlrdevapi
|
|
197
|
+
uv sync --group dev
|
|
198
|
+
|
|
199
|
+
# Lint & type check
|
|
200
|
+
ruff check src/ tests/
|
|
201
|
+
ty check src/vlrdevapi/
|
|
202
|
+
|
|
203
|
+
# Run tests
|
|
204
|
+
uv run pytest tests/ -v
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md) for the full contribution guide.
|
|
208
|
+
|
|
209
|
+
## License
|
|
210
|
+
|
|
211
|
+
MIT License - see the [LICENCE](LICENCE) file.
|
|
212
|
+
|
|
213
|
+
---
|
|
214
|
+
|
|
215
|
+
**Disclaimer:** Not affiliated with VLR.gg or Riot Games. Use responsibly.
|