Skip to main content

ddapi-rs

A small async Rust library for working with the DDNet and DDStats public APIs.

Features

  • ddnet (default) - DDNet API (ddnet.org)
  • ddstats - DDStats API (ddstats.tw)
  • cache - in-memory cache for responses (uses moka)
  • full - enables ddnet, ddstats, cache

Installation

Default (DDNet only):

cargo add ddapi-rs

Enable DDStats too:

cargo add ddapi-rs -F ddstats

Enable caching:

cargo add ddapi-rs -F cache

Everything:

cargo add ddapi-rs -F full

Usage

The crate is async and uses tokio.

DDNet example (enabled by default):

use ddapi_rs::prelude::*;

#[tokio::main]
async fn main() -> Result<()> {
    let api = DDApi::new();

    // ddnet: player points
    let player = api.player("nameless tee").await?;
    println!("{}: {}", player.player, player.points.points.unwrap_or(0));
    Ok(())
}

DDStats example (requires -F ddstats):

use ddapi_rs::prelude::*;

#[tokio::main]
async fn main() -> Result<()> {
    let api = DDApi::new();

    // ddstats: profile info
    let profile = api.profile("ByFox").await?;
    println!("{} ({})", profile.name, profile.clan.unwrap_or_default());
    Ok(())
}

Optional: only use one API

If you do not want a combined client, you can use DDnetClient / DDstatsClient.

use ddapi_rs::prelude::*;

#[tokio::main]
async fn main() -> Result<()> {
    let ddnet = DDnetClient::new();
    let p = ddnet.player("nameless tee").await?;
    println!("{}: {}", p.player, p.points.points.unwrap_or(0));
    Ok(())
}

Caching (feature cache)

use ddapi_rs::prelude::*;
use std::time::Duration;

#[tokio::main]
async fn main() -> Result<()> {
    let mut api = DDApi::new();
    api.set_cache(1000, Duration::from_secs(60 * 5));

    // Will be cached based on URL + TTL
    let _ = api.status().await?;
    Ok(())
}

Custom reqwest client

use ddapi_rs::prelude::*;
use reqwest::Client;

fn main() {
    let client = Client::builder()
        .timeout(std::time::Duration::from_secs(10))
        .build()
        .unwrap();

    let _api = DDApi::new_with_client(client);
}

Python (PyPI package ddapi)

pip install ddapi

The Python package mirrors the Rust API. All methods are async and return typed dataclasses (ddapi.ddnet.* / ddapi.ddstats.*) instead of raw dicts. Fields that may be absent in the API response are None.

import asyncio

import ddapi


async def main():
    api = ddapi.DDApi()

    # ddnet: player points
    player = await api.player("nameless tee")
    print(player.player, player.points.points)  # fields, not dict keys

    # optional data is None - no KeyError
    if player.team_rank is not None:
        print(player.team_rank.rank)

    # ddstats: profile info
    stats = ddapi.DDstatsClient()
    profile = await stats.profile("ByFox")
    print(profile.name, profile.clan)


asyncio.run(main())

Exposed API:

  • DDApi - combined client (DDNet methods take precedence)
  • DDnetClient - DDNet API only: master, custom_master, skins, player, query, query_map, query_mapper, map, releases_map, status, latest_finish, latest_finish_with_latest
  • DDstatsClient - DDStats API only: player, map, maps, profile, teero
  • ddapi.ddnet / ddapi.ddstats - dataclass models (e.g. ddapi.ddnet.Player)
  • DDError - exception raised on API errors
  • __version__ - matches the Rust crate version

Notes:

  • custom_master takes a master server index (1-4).
  • Timestamps arrive as datetime (UTC); dates as date.
  • Optional per-client in-memory cache:
api = ddapi.DDApi()
api.set_cache(10_000, 600)  # capacity, ttl in seconds

Metadata

Release files for ddapi 2.0.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for ddapi 2.0.2
File Size Uploaded
ddapi-2.0.2.tar.gz 78.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for ddapi 2.0.2
File Interpreter ABI Platform
ddapi-2.0.2-cp38-abi3-manylinux_2_38_x86_64.whl CPython 3.8 abi3 Linux glibc 2.38+ x86-64 Details

Total release size: 3.2 MB

Release files / ddapi-2.0.2.tar.gz

Download URL ddapi-2.0.2.tar.gz
Size 78.7 kB
Tags Source
SHA-256 checksum
How to use checksums
3f6420b1bdc123617ab8ef922eba65ee43b87a57603b8eeb6f50ed65963c1081
BLAKE2b-256 checksum
How to use checksums
988ecd1f1a5b4cb4ef10ffa4468f5c2eacadb60e9cdb36f59b106ace9c1a2feb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release files / ddapi-2.0.2-cp38-abi3-manylinux_2_38_x86_64.whl

Download URL ddapi-2.0.2-cp38-abi3-manylinux_2_38_x86_64.whl
Size 3.1 MB
Tags CPython 3.8 Linux glibc 2.38+ x86-64 abi3
SHA-256 checksum
How to use checksums
16834009eb8cb6a5e37ce40e63ab3afbc4f46ed236bfec7995b09cf3321c921f
BLAKE2b-256 checksum
How to use checksums
4285dcdb380fb131bd5f43186e49492b19ba08a52c1b37d92a951442696af7db
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/1.15.0

Release history Release notifications | RSS feed

This release

2.0.2 This release

2 release files

2.0.1

2 release files

0.14.3

2 release files

0.14.2

2 release files

0.14.1

2 release files

0.14.0

2 release files

0.13.1

2 release files

0.13.0

2 release files

0.9.3

2 release files

0.9.2

2 release files

0.9.1

2 release files

0.9.0

2 release files

0.8.1

2 release files

0.8.0

2 release files

0.7.2

2 release files

0.7.1

2 release files

0.7.0

2 release files

0.6.0

2 release files

0.5.2

2 release files

0.5.1

2 release files

0.5.0

2 release files

0.4.9

2 release files

0.4.8

2 release files

0.4.7

2 release files

0.4.6

2 release files

0.1.2

2 release files

0.1.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page