v0.1.0
·
7 commits
to main
since this release
Immutable
release. Only release title and notes can be modified.
Highlights
First stable release — pyodio is now on PyPI: pip install pyodio.
pyodio is the async Python client for odio-api: connect once and the library keeps a live mirror of the server state (MPRIS players, audio, systemd services, Bluetooth, power, upgrades) over the SSE stream, with automatic reconnection and resynchronization. Built as the foundation for the odio Home Assistant integration (odio-ha).
- #3 — HA-parity upgrade semantics: upgrade runs are closed by the server's lifecycle verdict — never by the raw script
end— so systemd-triggered and directly-run scripts behave identically.
✨ Features
OdioHub— the stateful, event-driven API. Every entity carries both its
current state and the commands that act on it: players (transport, volume,
position with client-side extrapolation), audio clients and outputs, systemd
services, Bluetooth adapter and devices, power actions, upgrades. Backends
the server doesn't expose are gated off automatically.OdioClient— the thin async REST layer underneath, one method per
endpoint, usable standalone.- Upgrade runs, HA-ready —
upgrade.in_progress,progress_percent,
version fields and run state follow the server's run-lifecycle contract:
the terminal state is the verdict (idle= success,failed= failure),
and a successful run reflectscurrent = latestwithout waiting for
re-detection. OdioHub.start()— start the event stream without a blocking initial
sync, for callers holding cached state while the server is down.- Cover cache-busting —
Player.cover_urlvaries with the current track
and art URL, so consumers refetch exactly when the artwork changes. - Old-server compatibility —
position_updated_atis stamped at receipt
when servers omit it, keeping position extrapolation working.
🧹 Internal
- CI & publishing (#1) — ruff, mypy, pytest on Python 3.12–3.14, sdist +
wheel build, immutable GitHub releases, trusted publishing to TestPyPI on
every tag and to PyPI on final releases. - Test suite — the whole surface is exercised against an in-memory fake
odio-api server (REST + SSE), including reconnection and upgrade lifecycle
scenarios.
Full Changelog: https://github.com/b0bbywan/pyodio/commits/v0.1.0