Skip to main content

Python client for the QDash API

Project description

qdash.client README

qdash.client is a Python client for calling the QDash API.

  • services: domain logic such as authentication, retries, and response normalization
  • rest: low-level HTTP communication

This package follows the same approach as oqtopus-client, separating the transport layer from the service layer. For user-facing examples, see docs/user-guide/qdash-client.md.

Installation

Install the lightweight client package when only programmatic API access is needed.

pip install qdash-client

For development against this repository:

pip install ./src/qdash/client

The distribution name is qdash-client, but the Python import path is qdash.client.

Publishing

qdash-client is published from this repository with PyPI Trusted Publishing. Configure the qdash-client project on PyPI to trust this GitHub repository and the .github/workflows/publish-qdash-client.yml workflow.

Release tags use the qdash-client-v<version> format and must match the version in pyproject.toml.

git tag qdash-client-v0.1.0
git push origin qdash-client-v0.1.0

Minimal Quick Start

This is a minimal example using /chips, /metrics/config, and /task-results/timeseries.

from qdash.client import QDashClient

client = QDashClient()
try:
    chips = client.list_chips()
    print(chips.total)
    print([chip.chip_id for chip in chips.chips])

    metrics_config = client.get_metrics_config()
    print(metrics_config.keys())

    series = client.get_task_results_timeseries(
        chip_id="chip-001",
        parameter="t1",
        start_at="2026-06-01T00:00:00Z",
        end_at="2026-06-02T00:00:00Z",
    )
    print(series.data)
finally:
    client.close()

1. Public API

In most cases, you will use the following:

  • QDashClient
  • QDashConfig
  • Exception classes such as QDashApiError
from qdash.client import QDashClient, QDashConfig

2. Configuration

2.1 From Environment Variables

from qdash.client import QDashConfig, QDashClient

config = QDashConfig.from_env()
client = QDashClient(config)

Main environment variables:

  • QDASH_BASE_URL
  • QDASH_API_TOKEN
  • QDASH_PROJECT_ID
  • QDASH_CF_ACCESS_CLIENT_ID
  • QDASH_CF_ACCESS_CLIENT_SECRET
  • QDASH_TIMEOUT_SECONDS
  • QDASH_RETRY_MAX_ATTEMPTS
  • QDASH_RETRY_BACKOFF_SECONDS
  • QDASH_RETRY_MAX_BACKOFF_SECONDS
  • QDASH_VERIFY_TLS
  • QDASH_PROXY
  • QDASH_USER_AGENT

For legacy username/password authentication, set:

  • QDASH_USERNAME
  • QDASH_PASSWORD_ENV
  • the environment variable named by QDASH_PASSWORD_ENV (defaults to QDASH_PASSWORD)

2.2 From a Configuration File

from qdash.client import QDashConfig, QDashClient

config = QDashConfig.from_file(section="default")
client = QDashClient(config)

If path is omitted:

  1. If XDG_CONFIG_HOME is set: $XDG_CONFIG_HOME/qdash/config.ini
  2. Otherwise: ~/.config/qdash/config.ini

Example configuration:

[default]
base_url = https://example.qdash/api
api_token = your-token
project_id = your-project-id
cf_access_client_id = your-cf-client-id
cf_access_client_secret = your-cf-client-secret
timeout_seconds = 30
retry_max_attempts = 3
retry_backoff_seconds = 0.2
retry_max_backoff_seconds = 5.0

For legacy username/password authentication from a config file, use username and password_env instead of api_token.

2.3 Automatic Loading

from qdash.client import QDashClient

# Loads config.ini by default
client = QDashClient()

3. Usage (Synchronous API)

3.1 List Chips

from qdash.client import QDashClient

client = QDashClient()
try:
    chips = client.list_chips()
    print([chip.chip_id for chip in chips.chips])
finally:
    client.close()

3.2 Time-Series Metrics

from qdash.client import QDashClient

client = QDashClient()
try:
    series = client.get_task_results_timeseries(
        chip_id="chip-001",
        parameter="t1",
        tag="calibration",
        start_at="2026-06-01T00:00:00Z",
        end_at="2026-06-08T00:00:00Z",
        qid="Q00",
    )
    print(series.data)
finally:
    client.close()

3.3 Metrics Configuration

from qdash.client import QDashClient

client = QDashClient()
try:
    config = client.get_metrics_config()
    print(config.get("qubit_metrics", {}).keys())
    print(config.get("coupling_metrics", {}).keys())
finally:
    client.close()

4. Usage (Asynchronous API)

import asyncio
from qdash.client import QDashClient

async def main() -> None:
    client = QDashClient()
    try:
        chips = await client.list_chips_async()
        print([chip.chip_id for chip in chips.chips])

        metrics_config = await client.get_metrics_config_async()
        print(metrics_config.get("qubit_metrics", {}).keys())

        series = await client.get_task_results_timeseries_async(
            chip_id="chip-001",
            parameter="t1",
            start_at="2026-06-01T00:00:00Z",
            end_at="2026-06-02T00:00:00Z",
        )
        print(series.data)
    finally:
        client.close()

asyncio.run(main())

5. Error Handling

Main exceptions:

  • QDashApiError (base class)
  • QDashAuthError (missing or invalid authentication)
  • QDashNotFoundError (404)
  • QDashValidationError (422)
  • QDashTransportError (transport errors, timeouts, or other HTTP statuses)
from qdash.client import QDashClient, QDashApiError

client = QDashClient()
try:
    print(client.list_chips().chips)
except QDashApiError as exc:
    print(exc.status_code, exc)
finally:
    client.close()

6. Exporter Helper Functionality

QDashClient provides helper methods for exporters.

  • normalize_chip_metrics(chip_id, payload)

This method converts a QDash API response into a list of NormalizedMetricRecord objects that are easier for exporters to consume.

7. Using the Low-Level REST Client Directly

In most cases, using QDashClient is recommended.

If you need direct access to the low-level API, you can use qdash.client.rest.

from qdash.client.rest import ApiClient, Configuration

cfg = Configuration(host="https://example.qdash/api")
rest_client = ApiClient(cfg)

try:
    resp = rest_client.request("GET", "/chips")
    print(resp.status_code, resp.data)
finally:
    rest_client.close()

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

qdash_client-0.1.0.tar.gz (35.0 kB view details)

Uploaded Source

Built Distribution

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

qdash_client-0.1.0-py3-none-any.whl (37.4 kB view details)

Uploaded Python 3

File details

Details for the file qdash_client-0.1.0.tar.gz.

File metadata

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

File hashes

Hashes for qdash_client-0.1.0.tar.gz
Algorithm Hash digest
SHA256 9adef7d742a99115d4e8ac839e4543bb4e0de807976445ef1c11c0f147e874a2
MD5 b930b0109ff260956ff844830984b05a
BLAKE2b-256 a8b5ba842b2fa17430d9e705caa82cdab393b876c951bfdb876dd75d1a298e42

See more details on using hashes here.

Provenance

The following attestation bundles were made for qdash_client-0.1.0.tar.gz:

Publisher: publish-qdash-client.yml on oqtopus-team/qdash

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

File details

Details for the file qdash_client-0.1.0-py3-none-any.whl.

File metadata

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

File hashes

Hashes for qdash_client-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 3bb941d98ca5ff58883efc5027642e32bc49072edb093014ca7cf50e684d676d
MD5 13fab8a35458ea18de4b48b85a4e6eb3
BLAKE2b-256 8324e7887175ae503a71d8eaf66064dcf667a3d9f4075667c6ce180f9be957d9

See more details on using hashes here.

Provenance

The following attestation bundles were made for qdash_client-0.1.0-py3-none-any.whl:

Publisher: publish-qdash-client.yml on oqtopus-team/qdash

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