From 4a0988eb5dfa3637d10c0ca8e2a3822f33368ebf Mon Sep 17 00:00:00 2001 From: epenet <6771947+epenet@users.noreply.github.com> Date: Thu, 13 Apr 2023 08:47:04 +0200 Subject: [PATCH] Adjust shutdown registration in EntityComponent (#90938) * Adjust shutdown registration in EntityComponent * Adjust * Make it more explicit * docstring --- .../components/device_tracker/config_entry.py | 1 + homeassistant/components/mailbox/__init__.py | 1 + homeassistant/helpers/entity_component.py | 10 +++++++++- 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/device_tracker/config_entry.py b/homeassistant/components/device_tracker/config_entry.py index 10725cd0392..5d56548f0ec 100644 --- a/homeassistant/components/device_tracker/config_entry.py +++ b/homeassistant/components/device_tracker/config_entry.py @@ -47,6 +47,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: component = hass.data[DOMAIN] = EntityComponent[BaseTrackerEntity]( LOGGER, DOMAIN, hass ) + component.register_shutdown() # Clean up old devices created by device tracker entities in the past. # Can be removed after 2022.6 diff --git a/homeassistant/components/mailbox/__init__.py b/homeassistant/components/mailbox/__init__.py index f97b2c5337b..29f023d0de2 100644 --- a/homeassistant/components/mailbox/__init__.py +++ b/homeassistant/components/mailbox/__init__.py @@ -86,6 +86,7 @@ async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool: component = EntityComponent[MailboxEntity]( logging.getLogger(__name__), DOMAIN, hass, SCAN_INTERVAL ) + component.register_shutdown() await component.async_add_entities([mailbox_entity]) setup_tasks = [ diff --git a/homeassistant/helpers/entity_component.py b/homeassistant/helpers/entity_component.py index c79726684a2..dc101a10b05 100644 --- a/homeassistant/helpers/entity_component.py +++ b/homeassistant/helpers/entity_component.py @@ -109,6 +109,14 @@ class EntityComponent(Generic[_EntityT]): return entity_obj # type: ignore[return-value] return None + def register_shutdown(self) -> None: + """Register shutdown on Home Assistant STOP event. + + Note: this is only required if the integration never calls + `setup` or `async_setup`. + """ + self.hass.bus.async_listen_once(EVENT_HOMEASSISTANT_STOP, self._async_shutdown) + def setup(self, config: ConfigType) -> None: """Set up a full entity component. @@ -126,7 +134,7 @@ class EntityComponent(Generic[_EntityT]): This method must be run in the event loop. """ - self.hass.bus.async_listen_once(EVENT_HOMEASSISTANT_STOP, self._async_shutdown) + self.register_shutdown() self.config = config