Changelogs » Async-upnp-client

PyUp Safety actively tracks 316,954 Python packages for vulnerabilities and notifies you when to upgrade.





- Add SSDPListener which is now the underlying code path for async_search and can be used as a long running listener (bdraco)


- Add UpnpFactory non_strict option, replacing disable_state_variable_validation and disable_unknown_out_argument_error
  - UpnpAction tries non-versioned service type (68) in non-strict mode
  - Strip spaces, line endings and null characters before parsing XML (apal0934)
  - Properly parse and return subscription timeout
  - More strip spaces, line engines and null characters before parsing XML


- Improve performance of parsing headers by switching to aiohttp.http_parser.HeadersParser (bdraco)


- Don't double-unescape action responses (50)
  - Add `UpnpDevice.service_id()` to get service by service_id. (bazwilliams)
  - Fix 'was never awaited'-warning


- Fix timespan formatting for content > 1h
  - Try to fix invalid device encodings
  - Rename `async_upnp_client.traffic` logger to `async_upnp_client.traffic.upnp` and add `async_upnp_client.traffic.ssdp` logger
  - Added `DeviceUpdater` to support updating the `UpnpDevice` inline on changes to `BOOTID.UPNP.ORG`/`CONFIGID.UPNP.ORG`/`LOCATION`
  - Added support for PAUSED_PLAYBACK state (56, brgerig)
  - Add `DmrDevice.transport_state`, deprecate `DmrDevice.state`
  - Ignore prefix/namespace in DLNA-Events for better compatibility
  - DLNA set_transport_uri: Allow supplying own meta_data (e.g. received from a content directory)
  - DLNA set_transport_uri: Backwards incompatible change: Only media_uri and media_title are required.
  To override mime_type, upnp_class or dlna_features create meta_data via construct_play_media_metadata()


- Added ability to set additional HTTP headers (51)
  - Nicer error message on invalid Action Argument
  - Store raw received argument value (50)
  - Be less strict about didl-lite
  - Allow targeted announces (53, elupus)
  - Support ipv6 search and advertisements (54, elupus)


- Do not crash on empty XML file (ekandler)
  - Option to print timestamp in ISO8601 (kitlaan)
  - Option to not print LastChange subscription variable (kitlaan)
  - Test with Python 3.8 (scop)
  - Less stricter version pinning of `python-didl-lite` (fabaff)
  - Drop Python 3.5 support, upgrade `pytest`/`pytest-asyncio`
  - Convert type comments to annotations


- Add support for fetching the serialNumber (bdraco)


- Expose `device_type` on `UpnpDevice` and `UpnpProfileDevice`


- Improve parsing of state variable types: date, dateTime,, time,


- Support state variable types: date, dateTime,, time,


- Ability to pass timeout argument to async_search


- Fix service resubscription failure: wrong timeout format (romaincolombo)
  - Disable transport action checks for non capable devices (romaincolombo)


- Added the disable_unknown_out_argument_error to disable exception raising for not found arguments (p3g4asus)


- Better handle empty default values for state variables (LooSik)


- Fixes to CLI
  - Handle invalid event-XML containing invalid trailing characters
  - Improve constructing metadata when playing media on DLNA/DMR devices
  - Upgrade to python-didl-lite==1.2.4 for namespacing changes


- Allow overriding of callback_url in AiohttpNotifyServer (KarlVogel)
  - Check action/state_variable exists when retrieving it, preventing an error


- Ignore unknown state variable changes via LastChange events


- Upgrade to python-didl-lite==1.2.2 for typing info, add `py.typed` marker
  - Add fix for HEOS-1 speakers: default subscription time-out to 9 minutes, only use channel Master (stp6778)
  - Upgrade to python-didl-lite==1.2.3 for bugfix


- Fix parsing response of Action call without any return values


- Fix missing async_upnp_client.profiles in package


- Add __repr__ for UpnpAction.Argument and UPnpService.Action (rytilahti)
  - Support advertisements and rename discovery to search
  - Use defusedxml to parse XML (scop)
  - Fix UpnpProfileDevice.async_search() + add UpnpProfileDevice.upnp_discover() for backwards compatibility
  - Add work-around for win32-platform when using `upnp-client search`
  - Minor changes
  - Typing fixes + automated type checking
  - Support binding to IP(v4) for search and advertisements


- Send content-type/charset on call-action, increasing compatibility (tsvi)


- Make UpnpProfileDevice.device public and add utility methods for device information


- Add manufacturer, model_description, model_name, model_number properties to UpnpDevice


- Minor refactorings: less private variables which are actually public (through properties) anyway
  - Store XML-node at UpnpDevice/UpnpService/UpnpAction/UpnpAction.Argument/UpnpStateVariable
  - Use http.HTTPStatus
  - Try to be closer to the UPnP spec with regard to eventing


- Show a bit more information on unexpected status from HTTP GET
  - Try to handle invalid XML from LastChange event
  - Pylint fixes


- Add option to `upnp-client` to set timeout for device communication/discovery
  - Add option to be strict (default false) with regard to invalid data
  - Add more error handling to `upnp-client`
  - Add async_discovery
  - Fix discovery-traffic not being logged to async_upnp_client.traffic-logger
  - Add discover devices specific from/for Profile


- Better parsing + robustness for media_duration/media_position in dlna-profile
  - Ensure absolute URL in case a relative URL is returned for DmrDevice.media_image_url (with fix by rytilahti)
  - Fix events not being handled when subscribing to all services ('*')
  - Gracefully handle invalid values from events by setting None/UpnpStateVariable.UPNP_VALUE_ERROR/None as value/value_unchecked
  - Work-around for devices which don't send the SID upon re-subscribing


- Try to subscribe if re-subscribe didn't work + push subscribe-related methods upwards to UpnpProfileDevice
  - Do store min/max/allowed values at stateVariable even when disable_state_variable_validation has been enabled
  - Add relative and absolute Seek commands to DLNA DMR profile
  - Try harder to get a artwork picture for DLNA DMR Profile


- Add support for discovery via SSDP
  - Make IGD aware that certain actions live on WANPPP or WANIPC service


- Log cases where a stateVariable has no sendEvents/sendEventsAttribute set at debug level, instead of warning


- Handle cases where a stateVariable has no sendEvents/sendEventsAttribute set


- Prevent error when not subscribed
  - upnp-client is more friendly towards user/missing arguments
  - Debug log spelling fix (scop)
  - Add some more IGD methods (scop)
  - Add some more IGD WANIPConnection methods (scop)
  - Remove new_ prefix from NatRsipStatusInfo fields, fix rsip_available type (scop)
  - Add DLNA RC picture controls + refactoring (scop)
  - Typing improvements (scop)
  - Ignore whitespace around state variable names in XML (scop)
  - Add basic printer support (scop)


- Upgrade python-didl-lite to 1.1.0


- Install the command line tool via setuptools' console_scripts entrypoint (mineo)
  - Show available services/actions when unknown service/action is called
  - Add configurable timeout to aiohttp requesters
  - Add IGD device + refactoring common code to async_upnp_client.profile
  - Minor fixes to CLI, logging, and state_var namespaces


- Add TravisCI build
  - Add AiohttpNotifyServer
  - More robustness in DmrDevice.media_*
  - Report service with device UDN


- Fix examples/
  - Fix README.rst
  - Add aiohttp utility classes


- Add upnp-client, move async_upnp_client.async_upnp_client to async_upnp_client.__init__
  - Hide voluptuous errors, raise UpnpValueError
  - Move UPnP eventing to UpnpEventHandler
  - Do traffic logging in UpnpRequester
  - Add DLNA DMR implementation/abstraction


- Fix log message
  - Fix typo in case of failed subscription (yottatsa)


- Log getting initial description XMLs with traffic logger as well
  - Improve SUBSCRIBE and implement SUBSCRIBE-renew
  - Add more type hints


- Add more type hints
  - Allow ignoring of data validation for state variables, instead of just min/max values


- Fixes to and setup.cfg
  - Do not crash on empty body on notifications (rytilahti)
  - Styling/linting fixes
  - modelDescription from device description XML is now optional
  - Move to async/await syntax, from old asyncio.coroutine/yield from syntax
  - Allow ignoring of allowedValueRange for state variables
  - Fix handling of UPnP events and add utils to handle DLNA LastChange events
  - Do not crash when state variable is not available, allow easier event debugging (rytilahti)


- Remove aiohttp dependency, user is now free/must now provide own UpnpRequester
  - Don't depend on pytz
  - Proper (un)escaping of received and sent data in UpnpActions
  - Add async_upnp_client.traffic logger for easier monitoring of traffic
  - Support more data types


- Support old style `sendEvents`
  - Add response-body when an error is received when calling an action
  - Fixes to README
  - Fixes to setup


- Initial release