ACE-X Client
Synchronous Python client for the ACE-X backend.
Installation
pip install acex-client
Quick start
from acex_client import Acex
with Acex(base_url="https://acex.local") as client:
result = client.inventory.sites.query(name="stockholm")
for site in result:
print(site.id, site.name)
Auth is auto-detected from /auth/config. Override via env vars:
ACEX_BASE_URL— backend URLACEX_ISSUER_URL,ACEX_CLIENT_ID,ACEX_CLIENT_SECRET— OIDC overrideACEX_VERIFY_SSL=false— disable TLS verification
or inject an AuthProvider directly:
from acex_client.auth import ClientCredentialsAuth
auth = ClientCredentialsAuth(client_id="...", client_secret="...", issuer_url="...", verify_ssl=True)
with Acex(base_url="...", auth=auth) as client:
...
Namespaces
| Namespace | Resources / actions |
|---|---|
client.inventory |
sites, regions, region_assignments, contacts, contact_assignments, assets, asset_clusters, collection_agents, credentials, logical_nodes, management_connections, node_instances, node_credentials(node_id), site_credentials(site_name) |
client.observability |
agents (with bound outputs, rules, nodes), grafana |
client.operations |
compliance (.check(), .site()), config_history.list_changes(), lldp (.upload(), .topology(), .by_site(), .get(), .reverse()) |
client.config_components |
catalog(), generate(), reconcile(), drivers(), translate() |
client.neds |
list(), get(), download() |
client.ai |
ask(), analyze() (SSE-streamed) — None if backend has no ai_ops mounted |
client.system |
auth_config(), health_node(), health_site() |
CRUD pattern
Each resource inherits the mixins for the verbs it supports. All mutations
return a LiveInstance proxy that holds the Pydantic model; .save() diffs
against the original and PATCHes only changed fields, .delete() removes
the resource:
site = client.inventory.sites.create(name="stockholm", city="SE")
site.display_name = "Stockholm HQ"
site.save() # PATCH /inventory/sites/{id} with {display_name: ...}
site.delete() # DELETE /inventory/sites/{id}
get, update, create, delete all raise AcexNotFoundError on HTTP 404
rather than returning None — wrap in try/except for "if exists" flows.
Actions and sub-resources
Action methods use @action(method, path_template):
client.inventory.collection_agents.manifest(id=1)
client.inventory.collection_agents.ack(id=1, payload=CollectionAgentAck(config_revision=5))
Bound sub-resources are accessed via .parent_or_id:
client.inventory.collection_agents.rules(1).create(region="eu")
Via a LiveInstance, the bound sub-resource is exposed as an attribute:
agent = client.observability.agents.get(1)
agent.rules.create(region="eu")
Errors
from acex_client import (
AcexNotFoundError,
AcexValidationError,
AcexAuthError,
AcexPermissionError,
AcexServerError,
AcexTimeoutError,
AcexConnectionError,
)
All errors inherit from AcexError. HTTP errors carry status_code and
body attributes.
Examples
See examples/crud.py and examples/observe.py.
Release files for acex-client 4.8.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| acex_client-4.8.1.tar.gz | 19.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| acex_client-4.8.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 50.9 kB
Release files / acex_client-4.8.1.tar.gz
| Download URL | acex_client-4.8.1.tar.gz |
|---|---|
| Size | 19.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
a53c5b6307ddd1d0700e5eddf18b0e8d7a81e3b3ac042b3ecc2868833ceed94b
|
|
BLAKE2b-256 checksum How to use checksums |
d9208fa051dce3d079087ff73021aa9da82df678c6cc36c900e4a9de3813f93d
|
| 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 2, 2026.
Transparency logRelease files / acex_client-4.8.1-py3-none-any.whl
| Download URL | acex_client-4.8.1-py3-none-any.whl |
|---|---|
| Size | 31.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
78d1e33931250e682cc8647440773231beab21d76c749e5f9f3241bd5cf20882
|
|
BLAKE2b-256 checksum How to use checksums |
8733696f2050b224c73d0217b94372c5152954405b3faf4cc235e9dadc23f428
|
| 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 2, 2026.
Transparency log