axiom-py

Install
pip install axiom-py
Synchronous Client
import axiom_py
client = axiom_py.Client()
client.ingest_events(dataset="DATASET_NAME", events=[{"foo": "bar"}, {"bar": "baz"}])
result = client.query(r"['DATASET_NAME'] | where foo == 'bar' | limit 100")
for row in result.tables[0].events():
print(row)
Edge Ingestion
For improved data locality, you can configure the client to use regional edge endpoints for ingest and query operations. All other API operations continue to use the main Axiom API endpoint.
import axiom_py
# Using a regional edge domain
edge_client = axiom_py.Client(
token="xaat-your-api-token",
edge="eu-central-1.aws.edge.axiom.co"
)
# Or using an explicit edge URL
edge_client = axiom_py.Client(
token="xaat-your-api-token",
edge_url="https://custom-edge.example.com"
)
Note: Edge endpoints require API tokens (xaat-), not personal tokens.
Edge configuration must be passed explicitly when creating the client.
Metrics Queries (MPL)
To query OTel metrics using MPL (Metrics Processing Language), configure the
client with your edge endpoint and use mpl_query:
import axiom_py
from axiom_py import MplOptions
from datetime import datetime, timedelta, timezone
client = axiom_py.Client(
token="xaat-your-api-token",
edge="us-east-1.aws.edge.axiom.co"
)
end = datetime.now(timezone.utc)
start = end - timedelta(hours=1)
result = client.mpl_query(
"`my-metrics`:`http.server.duration` | align to 5m using avg",
opts=MplOptions(start_time=start, end_time=end),
)
for series in result.series:
print(series.metric, series.tags, series.data)
Asynchronous Client
The library also provides an async client for use with asyncio:
import asyncio
from axiom_py import AsyncClient
async def main():
async with AsyncClient() as client:
# Ingest events
await client.ingest_events(
dataset="DATASET_NAME",
events=[{"foo": "bar"}, {"bar": "baz"}]
)
# Query data
result = await client.query(r"['DATASET_NAME'] | where foo == 'bar' | limit 100")
for row in result.tables[0].events():
print(row)
asyncio.run(main())
Concurrent Operations
The async client enables efficient concurrent operations:
import asyncio
from axiom_py import AsyncClient
async def main():
async with AsyncClient() as client:
# Ingest to multiple datasets concurrently
await asyncio.gather(
client.ingest_events("dataset1", [{"event": "data1"}]),
client.ingest_events("dataset2", [{"event": "data2"}]),
client.ingest_events("dataset3", [{"event": "data3"}]),
)
asyncio.run(main())
Documentation
Read documentation on axiom.co/docs/guides/python.
License
Metadata
Release files for axiom-py 0.15.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 | |
|---|---|---|---|
| axiom_py-0.15.0.tar.gz | 116.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| axiom_py-0.15.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 149.9 kB
Release files / axiom_py-0.15.0.tar.gz
| Download URL | axiom_py-0.15.0.tar.gz |
|---|---|
| Size | 116.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
3d5a41fdcece597850bccf49cc82488e6a5450e17d78bf6ef9964f4822714abe
|
|
BLAKE2b-256 checksum How to use checksums |
f6ca565fb9e381db0dfd435c4f596d58fe365e0525839c0147a5c1aecf39402d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.7
|
Release files / axiom_py-0.15.0-py3-none-any.whl
| Download URL | axiom_py-0.15.0-py3-none-any.whl |
|---|---|
| Size | 33.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
e1d0493ec5e959438a1732bd38fa12c6dcef8500ae2791f001a2221979cf6577
|
|
BLAKE2b-256 checksum How to use checksums |
aa4ad5942e4cdfefdbb5fec1d109f491de5be1dbe98313bb5b519436b06e9798
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.7
|