Skip to content

v0.1.0

Choose a tag to compare

@github-actions github-actions released this 23 Jul 18:23
· 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-readyupgrade.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 reflects current = latest without 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-bustingPlayer.cover_url varies with the current track
    and art URL, so consumers refetch exactly when the artwork changes.
  • Old-server compatibilityposition_updated_at is 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