dhis2w-client
Pure async DHIS2 API client for Python. Pluggable auth (Basic / PAT / OAuth2-OIDC PKCE), pydantic-typed models from both /api/schemas and /api/openapi.json codegen, retry policy, period math, analytics helper. DHIS2 v41, v42, and v43.
Standalone — no profile system, no plugin runtime. Drop it in any async Python project that needs to talk to a DHIS2 instance.
Install
# Inside a uv-managed project
uv add dhis2w-client
Quickstart
from dhis2w_client import BasicAuth, Dhis2Client
async with Dhis2Client(
base_url="https://play.im.dhis2.org/dev-2-43",
auth=BasicAuth(username="admin", password="district"),
) as client:
me = await client.system.me()
print(me.username)
elements = await client.resources.data_elements.list(fields="id,name", page_size=10)
for de in elements:
print(de.id, de.name)
PAT and OAuth2 (with token caching + refresh) work the same way:
from dhis2w_client import Dhis2Client, OAuth2Auth
auth = OAuth2Auth(
base_url="https://dhis2.example.org",
client_id="my-app",
client_secret="...",
scope="ALL",
redirect_uri="http://localhost:8765",
token_store=my_token_store,
store_key="profile:prod",
)
async with Dhis2Client("https://dhis2.example.org", auth=auth) as client:
...
What's in the box
- Async HTTP via httpx with a pluggable retry transport (429 / 502 / 503 / 504 with
Retry-Afterhonoring). - Typed metadata accessors for every resource DHIS2 exposes via
/api/schemas— generated per DHIS2 version underdhis2w_client.generated.v{41,42,43}. - Tracker read + write helpers (
client.tracker.register / enroll / event_create / outstanding). - Analytics —
client.analytics.aggregate(dx=..., pe=..., ou=...) -> Gridfor parsed responses,stream_to(...)for very large pivots. - Period math —
parse_period,next_period_id,previous_period_id,period_start_endacross all six absolute period shapes. - Pluggable auth —
BasicAuth,PatAuth,OAuth2Auth. Add your own by implementing theAuthProviderProtocol. - Bulk operations —
patch_bulk,apply_sharing_bulk, fanned out over a pool ofconcurrencyworkers that pull records one at a time, so memory stays flat however long the input list is.
Documentation
Full docs at https://winterop-com.github.io/dhis2w-utils/.
The dhis2w-client package is one member of the dhis2w-utils workspace. The CLI (dhis2w-cli), MCP server (dhis2w-mcp), and Playwright helpers (dhis2w-browser) all build on this client.
Release files for dhis2w-client 1.14.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| dhis2w_client-1.14.0.tar.gz | 2.2 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| dhis2w_client-1.14.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 5.7 MB
Release files / dhis2w_client-1.14.0.tar.gz
| Download URL | dhis2w_client-1.14.0.tar.gz |
|---|---|
| Size | 2.2 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
0b6764a371714ca4e9378891ae81acfdf1766cbe1291edc6c73a06a27ee4fcf5
|
|
BLAKE2b-256 checksum How to use checksums |
47f718a8b13185ca870acd4926ae47e21f94b6ee03fd886b63a8d04bcbd6b9d3
|
| 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 10, 2026.
Transparency logRelease files / dhis2w_client-1.14.0-py3-none-any.whl
| Download URL | dhis2w_client-1.14.0-py3-none-any.whl |
|---|---|
| Size | 3.5 MB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
f96791a99b8492e11cf3b601fb2cc011f091f862892e00f9118d721fa21cfaa6
|
|
BLAKE2b-256 checksum How to use checksums |
4fd4c6c63e55aed23e45ec5c47c52ad9ddaf9dc22cc6678a67cb4d9a7e2096f2
|
| 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 10, 2026.
Transparency log