mirror of
https://github.com/home-assistant/core.git
synced 2025-07-23 13:17:32 +00:00
Skip adding WeMo device on failure (#91621)
* Skip adding WeMo device on failure * Only create a single log entry for each failed device * Fix typo s/serial_number/serialnumber/ * Discard failed devices on success
This commit is contained in:
parent
66a25a9e72
commit
68ce59e9c1
@ -140,6 +140,7 @@ class WemoDispatcher:
|
||||
"""Initialize the WemoDispatcher."""
|
||||
self._config_entry = config_entry
|
||||
self._added_serial_numbers: set[str] = set()
|
||||
self._failed_serial_numbers: set[str] = set()
|
||||
self._loaded_platforms: set[Platform] = set()
|
||||
|
||||
async def async_add_unique_device(
|
||||
@ -149,7 +150,16 @@ class WemoDispatcher:
|
||||
if wemo.serialnumber in self._added_serial_numbers:
|
||||
return
|
||||
|
||||
coordinator = await async_register_device(hass, self._config_entry, wemo)
|
||||
try:
|
||||
coordinator = await async_register_device(hass, self._config_entry, wemo)
|
||||
except pywemo.PyWeMoException as err:
|
||||
if wemo.serialnumber not in self._failed_serial_numbers:
|
||||
self._failed_serial_numbers.add(wemo.serialnumber)
|
||||
_LOGGER.error(
|
||||
"Unable to add WeMo %s %s: %s", repr(wemo), wemo.host, err
|
||||
)
|
||||
return
|
||||
|
||||
platforms = set(WEMO_MODEL_DISPATCH.get(wemo.model_name, [Platform.SWITCH]))
|
||||
platforms.add(Platform.SENSOR)
|
||||
for platform in platforms:
|
||||
@ -178,6 +188,7 @@ class WemoDispatcher:
|
||||
)
|
||||
|
||||
self._added_serial_numbers.add(wemo.serialnumber)
|
||||
self._failed_serial_numbers.discard(wemo.serialnumber)
|
||||
|
||||
|
||||
class WemoDiscovery:
|
||||
|
@ -107,6 +107,28 @@ async def test_static_config_with_invalid_host(hass: HomeAssistant) -> None:
|
||||
assert not setup_success
|
||||
|
||||
|
||||
async def test_static_with_upnp_failure(
|
||||
hass: HomeAssistant, pywemo_device: pywemo.WeMoDevice
|
||||
) -> None:
|
||||
"""Device that fails to get state is not added."""
|
||||
pywemo_device.get_state.side_effect = pywemo.exceptions.ActionException("Failed")
|
||||
assert await async_setup_component(
|
||||
hass,
|
||||
DOMAIN,
|
||||
{
|
||||
DOMAIN: {
|
||||
CONF_DISCOVERY: False,
|
||||
CONF_STATIC: [f"{MOCK_HOST}:{MOCK_PORT}"],
|
||||
},
|
||||
},
|
||||
)
|
||||
await hass.async_block_till_done()
|
||||
entity_reg = er.async_get(hass)
|
||||
entity_entries = list(entity_reg.entities.values())
|
||||
assert len(entity_entries) == 0
|
||||
pywemo_device.get_state.assert_called_once()
|
||||
|
||||
|
||||
async def test_discovery(hass: HomeAssistant, pywemo_registry) -> None:
|
||||
"""Verify that discovery dispatches devices to the platform for setup."""
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user