axilog (Python)
Python bindings (PyO3) for axilog's Rust GW2 arcdps WvW
parsing core. Every export is a thin wrapper around the same
decode → resolve → analyze → build_report pipeline the CLI (axilog-cli)
and the Node SDK (crates/axilog-node) drive — see src/lib.rs's module
doc for the exact FFI contract (no Rust panic ever crosses the boundary;
every fallible step becomes a Python OSError/ValueError carrying the
underlying Rust error text).
Build
cd crates/axilog-py
python3 -m venv .venv
.venv/bin/pip install maturin
.venv/bin/maturin develop --release # builds the extension into .venv
maturin develop compiles this crate to a native extension module and
installs it editable into whichever interpreter you point it at (here,
.venv). Re-run it after changing src/lib.rs or axilog.pyi.
Usage
import axilog
# Native report (axilog_schema::Report — schema_version, encounter,
# players[], enemies[], timeline, warnings), returned as a plain dict
# with the same snake_case keys the Rust struct serializes (see "Types"
# below for the typed shape).
report = axilog.parse_file("./fight.zevtc")
print(report["schema_version"], len(report["players"]))
squad_damage = sum(p["damage"]["total"] for p in report["players"])
quickness = next(
b for b in report["players"][0]["boons"] if b["name"] == "Quickness"
)
print(squad_damage, quickness["presence_pct"])
# Same pipeline, from an already-read buffer.
with open("./fight.zevtc", "rb") as f:
report_from_bytes = axilog.parse_bytes(f.read())
# Elite Insights-compatibility JSON (axilog_ei::to_ei_json) — the shape
# axibridge-style consumers read (players[].account, dpsAll[0].damage,
# support[0].condiCleanse, buffUptimes[], targets[].enemyPlayer,
# wvWMapData.{red,blue,green}TeamID). Returned as `Dict[str, Any]` — see
# "Types" below, this shape isn't fully typed.
ei = axilog.parse_file_ei("./fight.zevtc")
# Rewrite every player's character/account name in a .zevtc to a
# deterministic Anon<N> placeholder (does not mutate metrics — safe for
# producing PII-safe fixtures). Returns the number of player agents
# rewritten.
rewritten = axilog.anonymize_file("./fight.zevtc", "./fight.anon.zevtc")
All four functions raise a real Python exception (never a raw Rust
panic) on failure: OSError for a file that can't be read/written,
ValueError for bytes that don't decode/parse as an arcdps log.
Types
This crate has no python-source tree — the compiled extension module
is the package (see src/lib.rs's #[pymodule] fn axilog). maturin
(>=1.5) auto-detects a <module_name>.pyi stub and a py.typed marker
sitting next to Cargo.toml/pyproject.toml at the crate root and
bundles both into the wheel as axilog/__init__.pyi and
axilog/py.typed, alongside the compiled axilog/axilog.abi3.so and the
auto-generated axilog/__init__.py — no [tool.maturin] include/
package-data configuration needed (verified directly against this crate:
maturin build logs Found type stub file at axilog.pyi, and the built
wheel contains axilog/__init__.pyi + axilog/py.typed).
axilog.pyi hand-transcribes every #[derive(Serialize)] struct in
crates/axilog-schema/src/lib.rs (the source of truth — keep this file
in sync with that one if the schema changes; mirrors
crates/axilog-node/types.d.ts's equivalent transcription for the Node
SDK) into TypedDicts, with Optional/omitted-key semantics matching
each field's serde Option/skip_serializing_if attributes exactly (see
the top of axilog.pyi for the precise rule). parse_file/parse_bytes
are typed to return Report; parse_file_ei's materially different,
larger EI-JSON shape is intentionally left Dict[str, Any] — typing it
faithfully is out of scope for this task, mirrors types.d.ts's same
call for parseFileEi.
Tests
tests/test_sdk.py (stdlib unittest only, no pytest/other
dependencies) covers, against the committed PII-safe fixture
fixtures/wvw-small.anon.zevtc (repo-root relative, resolved from the
test file's own location so it runs correctly from any cwd):
parse_file:schema_version, player count, squad damage total, and the four support-stat squad sums — all pinned to this fixture's exact calibrated values (seecrates/axilog-core/tests/golden.rs/support_golden.rsfor how those numbers were derived against a real dps.report EI export). One boon uptime value (Quicknessfor account:Anon132.5884) is cross-checked live againstfixtures/wvw-small.ei.json'splayers[].boons["1187"].uptime, rather than only pinned to a hardcoded literal.parse_bytesequalsparse_file.parse_file_ei: the specific keys axibridge-style consumers read (players[].account,dpsAll[0].damage,support[0].condiCleanse, non-emptybuffUptimes,targets[].enemyPlayerbooleans,wvWMapData's three team ids).anonymize_fileround-trip: writes to a tempfile directory, re-parses, checks player count/metrics are unchanged (anonymization only rewrites names).- Error paths: a missing file raises
OSError; corrupt bytes raiseValueError— both with a non-empty message. - CLI parity: shells out to the already-built CLI
(
cargo build -p axilog-cli; run that first iftarget/debug/axilogis missing) and assertsaxilog parse <fixture> --format json,json.loaded, exactly equalsparse_file's return value — with a small first-N-differing-paths diff helper so a future divergence prints something readable instead of two giant dicts.
Canonical invocation (from the repo root, using the venv interpreter the module was built into — this is the command to wire into CI):
crates/axilog-py/.venv/bin/python -m unittest discover -s crates/axilog-py/tests
Equivalently, from this directory: .venv/bin/python -m unittest discover -s tests.
Metadata
Release files for axilog 0.1.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 | |
|---|---|---|---|
| axilog-0.1.1.tar.gz | 362.6 kB | Details |
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| axilog-0.1.1-cp39-abi3-win_amd64.whl | CPython 3.9 | abi3 | Windows x86-64 | Details |
| axilog-0.1.1-cp39-abi3-manylinux_2_34_x86_64.whl | CPython 3.9 | abi3 | Linux glibc 2.34+ x86-64 | Details |
| axilog-0.1.1-cp39-abi3-macosx_11_0_arm64.whl | CPython 3.9 | abi3 | macOS 11.0+ ARM64 | Details |
| axilog-0.1.1-cp39-abi3-macosx_10_12_x86_64.whl | CPython 3.9 | abi3 | macOS 10.12+ x86-64 | Details |
Total release size: 2.8 MB
Release files / axilog-0.1.1.tar.gz
| Download URL | axilog-0.1.1.tar.gz |
|---|---|
| Size | 362.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
98be2412310919f57be310f869b1433e4a66cc40153a3b3d38b92d0f5d5c837c
|
|
BLAKE2b-256 checksum How to use checksums |
fc1f01956dd864a6aec149572c3ffadc4abc593a0e30de868dcf9d150db5ef2b
|
| 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 Aug 9, 2026.
Transparency logRelease files / axilog-0.1.1-cp39-abi3-win_amd64.whl
| Download URL | axilog-0.1.1-cp39-abi3-win_amd64.whl |
|---|---|
| Size | 508.6 kB |
| Tags | CPython 3.9 Windows x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
8c53ad16e74972d4a59d32445bb4d16cc1a15092eb1b7de43d5087195cd25992
|
|
BLAKE2b-256 checksum How to use checksums |
c420375b9fae6558ae4340a2554f9442c8dba59b1bd2812aecef554f515151c4
|
| 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 Aug 9, 2026.
Transparency logRelease files / axilog-0.1.1-cp39-abi3-manylinux_2_34_x86_64.whl
| Download URL | axilog-0.1.1-cp39-abi3-manylinux_2_34_x86_64.whl |
|---|---|
| Size | 673.8 kB |
| Tags | CPython 3.9 Linux glibc 2.34+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
da296aee5ab64ac3c105767beadcb865394fbee24b039587be09121203c28b41
|
|
BLAKE2b-256 checksum How to use checksums |
afdb573ab73519ce71e8c3f5dfc2b0b494d6a355f6820e1e61e096d1aab173e3
|
| 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 Aug 9, 2026.
Transparency logRelease files / axilog-0.1.1-cp39-abi3-macosx_11_0_arm64.whl
| Download URL | axilog-0.1.1-cp39-abi3-macosx_11_0_arm64.whl |
|---|---|
| Size | 596.2 kB |
| Tags | CPython 3.9 abi3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
87f31c6265d173593f0f7b88207d61239d36e9c4583de414c00a5e01a0c66275
|
|
BLAKE2b-256 checksum How to use checksums |
35b1f0ab0ef78c3a29ef80f8dbc9384017254d58a56a114add7ae378e9d676f0
|
| 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 Aug 9, 2026.
Transparency logRelease files / axilog-0.1.1-cp39-abi3-macosx_10_12_x86_64.whl
| Download URL | axilog-0.1.1-cp39-abi3-macosx_10_12_x86_64.whl |
|---|---|
| Size | 632.1 kB |
| Tags | CPython 3.9 abi3 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
56c7663d3ff3bdb41707734736557d4ca68f007093879527c1f08824fce8c1aa
|
|
BLAKE2b-256 checksum How to use checksums |
0d331ddfea25018f6bd60ea2b5715777b5db304d3bad2251d55a3b7caa35e7b0
|
| 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 Aug 9, 2026.
Transparency log