Shared Python library for the Jux tools ecosystem.
py-juxlib provides common functionality for Jux client tools:
- Environment metadata detection - Capture Git, CI/CD, and runtime environment information
- XML digital signatures - Sign and verify JUnit XML reports using XMLDSig
- API client - Publish signed reports to Jux OpenAPI servers
- Configuration management - Multi-source configuration with precedence handling
- Local storage - Filesystem storage with offline queue support
- Error handling - User-friendly errors with actionable suggestions
pip install py-juxlibOr with uv:
uv pip install py-juxlibfrom juxlib.metadata import capture_metadata
metadata = capture_metadata()
print(f"Project: {metadata.project_name}")
print(f"Git commit: {metadata.git_commit}")
print(f"CI provider: {metadata.ci_provider}")from juxlib.signing import sign_xml, load_private_key
from lxml import etree
# Load your private key
key = load_private_key("~/.ssh/jux/dev-key.pem")
# Parse and sign XML
tree = etree.parse("junit-report.xml")
signed_tree = sign_xml(tree.getroot(), key)
# Write signed XML
with open("junit-report-signed.xml", "wb") as f:
f.write(etree.tostring(signed_tree, xml_declaration=True, encoding="UTF-8"))from juxlib.api import JuxAPIClient
client = JuxAPIClient(api_url="https://jux.example.com", bearer_token="your-token")
with open("junit-report-signed.xml") as f:
response = client.publish_report(f.read())
print(f"Test run ID: {response.test_run_id}")
print(f"Success rate: {response.success_rate}%")- Tutorials - Getting started guides
- How-To Guides - Task-specific solutions
- Reference - API documentation
- Explanation - Architecture and design
# Clone the repository
git clone https://github.com/jux-tools/py-juxlib.git
cd py-juxlib
# Setup development environment
uv venv && uv pip install -e ".[dev]"
# Run tests
uv run pytest
# Run with coverage
uv run pytest --cov=juxlib --cov-report=term-missing
# Format and lint
uv run ruff format .
uv run ruff check .
# Type check
uv run mypy src/juxlibSource of Truth: The canonical API specifications live in jux-openapi.
- OpenAPI specs:
jux-openapi/specs/v1/- API changelog:
jux-openapi/docs/CHANGELOG.md
py-juxlib v0.2.0+ is compliant with jux-openapi API v1.0.0.
| Project | Description |
|---|---|
| pytest-jux | pytest plugin for signing and publishing JUnit XML |
| behave-jux | Enhanced JUnit reporter for behave BDD |
| jux | Server for receiving and analyzing test reports |
| jux-openapi | API contract specification (source of truth) |
This project is licensed under the Apache License 2.0 - see the LICENSE file for details.
Contributions are welcome! Please read our Contributing Guide for details on our code of conduct and the process for submitting pull requests.