* Fully unload wemo config entity
* Test reloading the config entry
* Encapsulate data with dataclasses
* Fix missing test coverage
* Replace if with assert for options that are always set
* Move WemoData/WemoConfigEntryData to models.py
* Use _ to indicate unused argument
* Test that the entry and entity work after reloading
* Nit: Slight test reordering
* Reset the correct mock (get_state)
* from .const import DOMAIN
* Nit: _async_wemo_data -> async_wemo_data; not module private
* Remove async_remove_listener
This avoids the ambuigity as to what happens if same callback is added multiple times.
* Keep track of a context for each listener
This allow a update coordinator to adapt what data to request on update from the backing service based on which entities are enabled.
* Clone list before calling callbacks
The callbacks can end up unregistering and modifying the dict while iterating.
* Only yield actual values
* Add a test for update context
* Factor out iteration of _listeners to helper
* Verify context is passed to coordinator
* Switch to Any as type instead of object
* Remove function which use was dropped earliers
The use was removed in 8bee25c938
* WeMo push update is seen by all coordinator entities
* Rename _wemo_exception_handler -> _wemo_call_wrapper
* Test turning off the entity
* Test setting light brightness
* Improve brightness test
* It is unnecessary to setup the platform integration
* Use domain names, not platform enum, in service calls
* Use DataUpdateCoordinator for wemo
* Rename DeviceWrapper->DeviceCoordinator and make it a subclass of DataUpdateCoordinator
* Rename async_update_data->_async_update_data to override base class
* Rename: device -> coordinator
* Handle all exceptions around the WeMo ensure_long_press_virtual_device method
* Don't use a bare exception
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
* Log exception
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>