Python SDK
dyogg — Python client sync + async, Pydantic v2 models, ready for asyncio.
Install
pip install dyogg
poetry add dyogg
uv add dyogg
Requires Python 3.10+.
Quick Start (sync)
from dyogg import DyoClient
dyo = DyoClient(api_key="dyo_live_...")
player = dyo.player.get(game="genshin", uid="816973814")
print(player.nickname, player.trust_score.tier)
# Character
acheron = dyo.character.get(game="hsr", avatar_id=1308, lang="id")
Async
import asyncio
from dyogg import AsyncDyoClient
async def main():
async with AsyncDyoClient(api_key="dyo_live_...") as dyo:
player = await dyo.player.get(game="genshin", uid="816973814")
chars = await asyncio.gather(*[
dyo.character.get(game="hsr", avatar_id=aid) for aid in [1308, 1309, 1310]
])
print(player.nickname, [c.name for c in chars])
asyncio.run(main())
Configuration
DyoClient(
api_key: str, # required
api_version: str = "v1",
base_url: str = "https://api.dyogg.com",
timeout: float = 15.0,
max_retries: int = 3,
proxies: dict | None = None,
http_client: httpx.Client | None = None, # inject custom
)
Models (Pydantic v2)
Semua response otomatis di-parse ke Pydantic models:
from dyogg import DyoClient
from dyogg.models import Player, Character, BuildAnalyzerRequest
player: Player = dyo.player.get(game="genshin", uid="816973814")
assert player.trust_score.score >= 0
assert player.showcase[0].element in {"Pyro", "Hydro", "Electro", ...}
Field yang tidak dikenali di response diabaikan (backward-compatible).
Error handling
from dyogg.errors import DyoApiError, DyoRateLimitError
try:
dyo.player.get(game="genshin", uid="816973814")
except DyoRateLimitError as e:
print(f"Retry in {e.retry_after_seconds}s")
except DyoApiError as e:
print(e.code, e.message, e.request_id)
Streaming
for entry in dyo.leaderboard.stream_top(game="hsr", avatar_id=1308, limit=500):
print(entry.rank, entry.uid, entry.metric_value)
# async
async for entry in async_dyo.leaderboard.stream_top(game="hsr", avatar_id=1308):
print(entry.rank)
Type hints
Semua method fully typed — enable strict mode di pyright/mypy untuk safety maksimum.