Observed since 20 Oct, 18:11 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
acex-client
ACE-X CLIENT - Client for ACE-X
Synchronous Python client for the ACE-X backend.
pip install acex-client
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 verificationor 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:
...
| 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() |
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.
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")
from acex_client import (
AcexNotFoundError,
AcexValidationError,
AcexAuthError,
AcexPermissionError,
AcexServerError,
AcexTimeoutError,
AcexConnectionError,
)
All errors inherit from AcexError. HTTP errors carry status_code and
body attributes.
See examples/crud.py and examples/observe.py.
Download counts and popularity will appear here as the collector receives them.
| Package / target | Requirement | Relationship |
|---|---|---|
acex-devkitEnvironment{
"extras": "",
"marker": null,
"requires_python": "<4.0,>=3.13",
"evaluation": "NOT_EVALUATED"
} | acex-devkit<3,>=2 | runtime |
httpxEnvironment{
"extras": "",
"marker": null,
"requires_python": "<4.0,>=3.13",
"evaluation": "NOT_EVALUATED"
} | httpx>=0.27.0 | runtime |
pydanticEnvironment{
"extras": "",
"marker": null,
"requires_python": "<4.0,>=3.13",
"evaluation": "NOT_EVALUATED"
} | pydantic>=2.12.5 | runtime |
bdist_wheel · 36.67 KB · Python py3
sdist · 21.82 KB · Python source
Observed since 20 Oct, 18:11 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package_version:86298bb9169e60351b5b4e20fbfa61b447c3fcba03c2a2c2d7360188e3c02f32