Skip to main content

HYROX race data client – retrieve full race results via Python

Project description

pyrox-client

Unofficial Python client for HYROX race results.

Unit Tests Integration Tests Docs PyPI - Version Wheel

Install

uv pip install pyrox-client

or

pip install pyrox-client

Reporting helpers that read the generated DuckDB database are optional:

pip install "pyrox-client[reporting]"

Quickstart

import pyrox

client = pyrox.PyroxClient()

# Discover races
races = client.list_races()
seasons = client.list_seasons()
locations = client.list_locations(season=8)
years = client.list_years(season=8, location="london")

# Fetch one race
london = client.get_race(season=7, location="london")

# Optional filters
london_male_open = client.get_race(
    season=7,
    location="london",
    gender="male",
    division="open",
)

# Total time filter in minutes
sub60 = client.get_race(season=7, location="london", total_time=60)
range_50_60 = client.get_race(season=7, location="london", total_time=(50, 60))

# Athlete lookup in a race
athlete = client.get_athlete_in_race(
    season=7,
    location="london",
    athlete_name="surname, name",
)

Core API

  • list_races(season: int | None = None, force_refresh: bool = False) -> pd.DataFrame
  • list_seasons(force_refresh: bool = False) -> list[int]
  • list_locations(season: int | None = None, force_refresh: bool = False) -> list[str]
  • list_years(season: int | None = None, location: str | None = None, force_refresh: bool = False) -> list[int]
  • get_race(season, location, year=None, gender=None, division=None, total_time=None, use_cache=True) -> pd.DataFrame
  • get_season(season, locations=None, gender=None, division=None, max_workers=8, use_cache=True) -> pd.DataFrame
  • get_athlete_in_race(season, location, athlete_name, year=None, gender=None, division=None, use_cache=True) -> pd.DataFrame
  • clear_cache(pattern="*") -> None
  • cache_info() -> dict

Mistake Recovery

RaceNotFound includes manifest-backed suggestions when a race cannot be found:

from pyrox.errors import RaceNotFound

try:
    client.get_race(season=8, location="londn")
except RaceNotFound as exc:
    print(exc)
    print(exc.suggestions)

Reporting Helpers

The base install keeps the public client lightweight. Install the reporting extra before using ReportingClient:

from pyrox.reporting import ReportingClient

Documentation

Repository Scope

The PyPI package is the pyrox client library.

This repository also contains a reporting service and UI (pyrox_api_service/, ui/) used for project workflows. Those are not part of the published pyrox-client wheel.

Reporting-service contract note:

  • Athlete profile endpoints (/api/athletes/profile and /api/athletes/{athlete_id}/profile) may include optional personal_bests[*].percentile values in [0, 1].
  • average_times[*].percentile may also be present with the same semantics.
  • Missing percentile data is non-fatal and returned by omitting the percentile key for that segment.
  • Profile percentile cohorts are computed against historical results in the same division and gender.

Maintainer-only operational docs:

  • docs/maintainers/README.md
  • docs/maintainers/release.md
  • docs/maintainers/reporting-service.md

Disclaimer

Pyrox is an independent project and is not affiliated with, endorsed, or sponsored by HYROX. HYROX and related marks are trademarks of their respective owners and are used only for descriptive purposes.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pyrox_client-0.2.4.tar.gz (18.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pyrox_client-0.2.4-py3-none-any.whl (19.4 kB view details)

Uploaded Python 3

File details

Details for the file pyrox_client-0.2.4.tar.gz.

File metadata

  • Download URL: pyrox_client-0.2.4.tar.gz
  • Upload date:
  • Size: 18.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pyrox_client-0.2.4.tar.gz
Algorithm Hash digest
SHA256 6d247955656bee2891808510e7145c3f0a5bbdd184ceb4e9d5ac53efb527aa39
MD5 9362fc991fe8ae160dfaa55c21c56889
BLAKE2b-256 8360b1fe5affeceb07d9f0203dd9080485f95d9930a349a8ce5628e0fc548580

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyrox_client-0.2.4.tar.gz:

Publisher: release.yml on vmatei2/pyrox-client

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyrox_client-0.2.4-py3-none-any.whl.

File metadata

  • Download URL: pyrox_client-0.2.4-py3-none-any.whl
  • Upload date:
  • Size: 19.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pyrox_client-0.2.4-py3-none-any.whl
Algorithm Hash digest
SHA256 8304f696ff8811ae5fddd8f58de14f978cc406c8e9f5b16e4ebfc3777f6c4691
MD5 6830ca9949f2cf3133199498b087835a
BLAKE2b-256 3bcf7627415cc751b1eccbf6a4547abeb2bda6d3ae2429872f61425a6ed8a8fb

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyrox_client-0.2.4-py3-none-any.whl:

Publisher: release.yml on vmatei2/pyrox-client

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page