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:
Eric Severance 2023-04-22 14:10:08 -07:00 committed by GitHub
parent 66a25a9e72
commit 68ce59e9c1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 34 additions and 1 deletions

View File

@ -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
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:

View File

@ -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."""