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.