forge-dashboard-sdk-python
A Python client for forge-dashboard's REST API, generated from its OpenAPI spec with openapi-python-client. It saves you from hand-rolling HTTP requests, auth and retries against the API yourself.
Requirements
- Python 3.12 or later.
- A running forge-dashboard instance.
- A personal API token for that instance (see "Authentication" below) —
every endpoint except
health,get_versionand the two webhook receivers needs one.
Installation
pip install forge-dashboard-sdk
Pin an exact version in your own pyproject.toml/requirements.txt rather
than tracking the latest release in anything but a quick trial.
Authentication
forge-dashboard accepts either a browser's passkey session cookie or a
personal API token — Authorization: Bearer <token> — as an alternative
that needs no WebAuthn ceremony. This SDK only speaks the token half, the
one a script can actually use. Mint one by signing into the dashboard once
and calling POST /api/tokens, then pass it to ForgeDashboardClient or
set FORGE_DASHBOARD_API_TOKEN in the environment:
import os
from forge_dashboard import ForgeDashboardClient
client = ForgeDashboardClient(
"https://forge-dashboard.example.com",
api_token=os.environ.get("FORGE_DASHBOARD_API_TOKEN"),
)
Usage
health and get_version need no token and are good first calls to prove
the client reaches the server at all:
from forge_dashboard import ForgeDashboardClient
with ForgeDashboardClient("https://forge-dashboard.example.com") as client:
version = client.get_version()
print("server version:", version.version)
The aggregated dashboard needs a token, and demonstrates error handling:
import os
from forge_dashboard import APIError, ForgeDashboardClient, decode_error
from forge_dashboard._generated.api.dashboard import get_dashboard
client = ForgeDashboardClient(
"https://forge-dashboard.example.com",
api_token=os.environ.get("FORGE_DASHBOARD_API_TOKEN"),
)
try:
response = get_dashboard.sync_detailed(client=client.raw)
if error := decode_error(response):
raise error
for pr in response.parsed.pull_requests:
print(pr.title, pr.ci)
except APIError as e:
if e.status_code == 401:
raise SystemExit("API token expired or invalid") from e
raise
Every other operation follows the generated client's pattern —
forge_dashboard._generated.api.<tag>.<operation>.sync_detailed(client=client.raw, ...)
(or asyncio_detailed for async) returns a typed Response whose .parsed
field holds the decoded body for a documented status code. Use
decode_error to turn any error response into a forge_dashboard.APIError
uniformly:
from forge_dashboard import decode_error
from forge_dashboard._generated.api.dashboard import get_dashboard
response = get_dashboard.sync_detailed(client=client.raw)
if error := decode_error(response):
raise error
dashboard = response.parsed
The client retries a 429 or 5xx response with exponential backoff and
jitter (honoring a server-sent Retry-After), and never retries any other
4xx. Tune it by passing a forge_dashboard.RetryConfig as retry=, or
swap the underlying httpx.Client/httpx.AsyncClient entirely with
httpx_client=/httpx_async_client=.
Regenerating the client
See CONTRIBUTING.md — the generated code is pinned to a specific forge-dashboard commit and shouldn't drift from it silently.
Contributing
See CONTRIBUTING.md for building, testing and the release process.
License
MIT — a permissive license for the client, independent of forge-dashboard's own AGPL-3.0.
Release files for forge-dashboard-sdk 0.1.5
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| forge_dashboard_sdk-0.1.5.tar.gz | 224.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| forge_dashboard_sdk-0.1.5-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 340.3 kB
Release files / forge_dashboard_sdk-0.1.5.tar.gz
| Download URL | forge_dashboard_sdk-0.1.5.tar.gz |
|---|---|
| Size | 224.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
9415e68c5de63bbb4cea6f9bb663b3e0d1ce0b460cba0b874f24007aa8cafc50
|
|
BLAKE2b-256 checksum How to use checksums |
07908b25ff86d5b459597712cd6625e1f13898ac079ed96e683af26096d972ed
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 25, 2026.
Transparency logRelease files / forge_dashboard_sdk-0.1.5-py3-none-any.whl
| Download URL | forge_dashboard_sdk-0.1.5-py3-none-any.whl |
|---|---|
| Size | 116.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
e847f646b02d2410f197e15b54394116d4d4c2903a80acf0b6bb5e474658834e
|
|
BLAKE2b-256 checksum How to use checksums |
fc96b612ae53ace2f0b2078dc38ecd9616fb4498a4949f0144d6bc071e584c52
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 25, 2026.
Transparency log