All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog.
- Restructured tests from unittest to pytest with per-module test files
- Added device XML fixtures for IGD, Marantz, generic MediaRenderer, Chromecast, and Roku
- Rewrote README for clarity -- explains service name derivation, shows
d.servicesbefore accessing by name - Added
doc/knowledge.mdandCLAUDE.md
datetime.UTCreplaced withdatetime.timezone.utcfor Python 3.9/3.10 compatibility
- Replaced
requests.compatimports withurllib.parse - Replaced
requests.compat.basestringwithstrin tests - Removed Python 2
try/except ImportErrorcompat blocks from tests - Modernised test HTTP server to use
directoryparameter instead ofos.chdir - Excluded
doc/,gui/,examples/from sdist - Removed unused Makefile
- Added PyPI, Python version, license and download badges to README
- Non-compliant devices with malformed XML namespaces (e.g. Marantz/DENON with leading spaces in URNs) no longer crash the parser. XML parsing now uses
recover=Truemode.
discover()no longer prints errors to stderr for non-compliant devices. Discovery errors are now logged atdebuglevel instead oferror.
- Breaking: Minimum Python version raised from 3.6 to 3.9
- Converted from poetry to PEP 621 + hatchling + uv
- Replaced Travis CI with GitHub Actions (CI + PyPI publish via trusted publishing)
- Replaced flake8 with ruff
- Replaced
mockwithunittest.mockin tests
sixdependency and all Python 2 compatibility codepoetry.lock,requirements.txt,setup.cfg,MANIFEST.in
lxmlconstraint widened from^4.0.0(<5.0.0) to>=4.6.0, fixing installation on Python 3.13+
- Fix error when device attributes return None (stripping from None)
- Use tox-travis for CI
- Minor release updates
- Migrated from setuptools to poetry
- Dropped Python 2 support
- ifaddr dependency for network interface discovery
See git history for changes prior to 0.0.8.