mirror of
https://github.com/home-assistant/core.git
synced 2025-07-17 10:17:09 +00:00
Switch to using entry.async_on_remove (#52952)
This commit is contained in:
parent
a021d7d628
commit
9cbf88d944
@ -3,7 +3,6 @@ from __future__ import annotations
|
|||||||
|
|
||||||
import asyncio
|
import asyncio
|
||||||
from collections import defaultdict
|
from collections import defaultdict
|
||||||
from typing import Callable
|
|
||||||
|
|
||||||
from async_timeout import timeout
|
from async_timeout import timeout
|
||||||
from zwave_js_server.client import Client as ZwaveClient
|
from zwave_js_server.client import Client as ZwaveClient
|
||||||
@ -61,7 +60,6 @@ from .const import (
|
|||||||
CONF_USE_ADDON,
|
CONF_USE_ADDON,
|
||||||
DATA_CLIENT,
|
DATA_CLIENT,
|
||||||
DATA_PLATFORM_SETUP,
|
DATA_PLATFORM_SETUP,
|
||||||
DATA_UNSUBSCRIBE,
|
|
||||||
DOMAIN,
|
DOMAIN,
|
||||||
EVENT_DEVICE_ADDED_TO_REGISTRY,
|
EVENT_DEVICE_ADDED_TO_REGISTRY,
|
||||||
LOGGER,
|
LOGGER,
|
||||||
@ -126,9 +124,7 @@ async def async_setup_entry( # noqa: C901
|
|||||||
ent_reg = entity_registry.async_get(hass)
|
ent_reg = entity_registry.async_get(hass)
|
||||||
entry_hass_data: dict = hass.data[DOMAIN].setdefault(entry.entry_id, {})
|
entry_hass_data: dict = hass.data[DOMAIN].setdefault(entry.entry_id, {})
|
||||||
|
|
||||||
unsubscribe_callbacks: list[Callable] = []
|
|
||||||
entry_hass_data[DATA_CLIENT] = client
|
entry_hass_data[DATA_CLIENT] = client
|
||||||
entry_hass_data[DATA_UNSUBSCRIBE] = unsubscribe_callbacks
|
|
||||||
entry_hass_data[DATA_PLATFORM_SETUP] = {}
|
entry_hass_data[DATA_PLATFORM_SETUP] = {}
|
||||||
|
|
||||||
registered_unique_ids: dict[str, dict[str, set[str]]] = defaultdict(dict)
|
registered_unique_ids: dict[str, dict[str, set[str]]] = defaultdict(dict)
|
||||||
@ -181,7 +177,7 @@ async def async_setup_entry( # noqa: C901
|
|||||||
|
|
||||||
# add listener for value updated events if necessary
|
# add listener for value updated events if necessary
|
||||||
if value_updates_disc_info:
|
if value_updates_disc_info:
|
||||||
unsubscribe_callbacks.append(
|
entry.async_on_unload(
|
||||||
node.on(
|
node.on(
|
||||||
"value updated",
|
"value updated",
|
||||||
lambda event: async_on_value_updated(
|
lambda event: async_on_value_updated(
|
||||||
@ -191,14 +187,14 @@ async def async_setup_entry( # noqa: C901
|
|||||||
)
|
)
|
||||||
|
|
||||||
# add listener for stateless node value notification events
|
# add listener for stateless node value notification events
|
||||||
unsubscribe_callbacks.append(
|
entry.async_on_unload(
|
||||||
node.on(
|
node.on(
|
||||||
"value notification",
|
"value notification",
|
||||||
lambda event: async_on_value_notification(event["value_notification"]),
|
lambda event: async_on_value_notification(event["value_notification"]),
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
# add listener for stateless node notification events
|
# add listener for stateless node notification events
|
||||||
unsubscribe_callbacks.append(
|
entry.async_on_unload(
|
||||||
node.on(
|
node.on(
|
||||||
"notification",
|
"notification",
|
||||||
lambda event: async_on_notification(event["notification"]),
|
lambda event: async_on_notification(event["notification"]),
|
||||||
@ -400,7 +396,7 @@ async def async_setup_entry( # noqa: C901
|
|||||||
client_listen(hass, entry, client, driver_ready)
|
client_listen(hass, entry, client, driver_ready)
|
||||||
)
|
)
|
||||||
entry_hass_data[DATA_CLIENT_LISTEN_TASK] = listen_task
|
entry_hass_data[DATA_CLIENT_LISTEN_TASK] = listen_task
|
||||||
unsubscribe_callbacks.append(
|
entry.async_on_unload(
|
||||||
hass.bus.async_listen(EVENT_HOMEASSISTANT_STOP, handle_ha_shutdown)
|
hass.bus.async_listen(EVENT_HOMEASSISTANT_STOP, handle_ha_shutdown)
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -442,7 +438,7 @@ async def async_setup_entry( # noqa: C901
|
|||||||
)
|
)
|
||||||
|
|
||||||
# listen for new nodes being added to the mesh
|
# listen for new nodes being added to the mesh
|
||||||
unsubscribe_callbacks.append(
|
entry.async_on_unload(
|
||||||
client.driver.controller.on(
|
client.driver.controller.on(
|
||||||
"node added",
|
"node added",
|
||||||
lambda event: hass.async_create_task(
|
lambda event: hass.async_create_task(
|
||||||
@ -452,7 +448,7 @@ async def async_setup_entry( # noqa: C901
|
|||||||
)
|
)
|
||||||
# listen for nodes being removed from the mesh
|
# listen for nodes being removed from the mesh
|
||||||
# NOTE: This will not remove nodes that were removed when HA was not running
|
# NOTE: This will not remove nodes that were removed when HA was not running
|
||||||
unsubscribe_callbacks.append(
|
entry.async_on_unload(
|
||||||
client.driver.controller.on(
|
client.driver.controller.on(
|
||||||
"node removed", lambda event: async_on_node_removed(event["node"])
|
"node removed", lambda event: async_on_node_removed(event["node"])
|
||||||
)
|
)
|
||||||
@ -515,9 +511,6 @@ async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
|
|||||||
"""Unload a config entry."""
|
"""Unload a config entry."""
|
||||||
info = hass.data[DOMAIN][entry.entry_id]
|
info = hass.data[DOMAIN][entry.entry_id]
|
||||||
|
|
||||||
for unsub in info[DATA_UNSUBSCRIBE]:
|
|
||||||
unsub()
|
|
||||||
|
|
||||||
tasks = []
|
tasks = []
|
||||||
for platform, task in info[DATA_PLATFORM_SETUP].items():
|
for platform, task in info[DATA_PLATFORM_SETUP].items():
|
||||||
if task.done():
|
if task.done():
|
||||||
|
@ -48,13 +48,14 @@ from homeassistant.helpers.dispatcher import async_dispatcher_connect
|
|||||||
from .const import (
|
from .const import (
|
||||||
CONF_DATA_COLLECTION_OPTED_IN,
|
CONF_DATA_COLLECTION_OPTED_IN,
|
||||||
DATA_CLIENT,
|
DATA_CLIENT,
|
||||||
DATA_UNSUBSCRIBE,
|
|
||||||
DOMAIN,
|
DOMAIN,
|
||||||
EVENT_DEVICE_ADDED_TO_REGISTRY,
|
EVENT_DEVICE_ADDED_TO_REGISTRY,
|
||||||
)
|
)
|
||||||
from .helpers import async_enable_statistics, update_data_collection_preference
|
from .helpers import async_enable_statistics, update_data_collection_preference
|
||||||
from .services import BITMASK_SCHEMA
|
from .services import BITMASK_SCHEMA
|
||||||
|
|
||||||
|
DATA_UNSUBSCRIBE = "unsubs"
|
||||||
|
|
||||||
# general API constants
|
# general API constants
|
||||||
ID = "id"
|
ID = "id"
|
||||||
ENTRY_ID = "entry_id"
|
ENTRY_ID = "entry_id"
|
||||||
|
@ -27,7 +27,7 @@ from homeassistant.core import HomeAssistant, callback
|
|||||||
from homeassistant.helpers.dispatcher import async_dispatcher_connect
|
from homeassistant.helpers.dispatcher import async_dispatcher_connect
|
||||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||||
|
|
||||||
from .const import DATA_CLIENT, DATA_UNSUBSCRIBE, DOMAIN
|
from .const import DATA_CLIENT, DOMAIN
|
||||||
from .discovery import ZwaveDiscoveryInfo
|
from .discovery import ZwaveDiscoveryInfo
|
||||||
from .entity import ZWaveBaseEntity
|
from .entity import ZWaveBaseEntity
|
||||||
|
|
||||||
@ -249,7 +249,7 @@ async def async_setup_entry(
|
|||||||
|
|
||||||
async_add_entities(entities)
|
async_add_entities(entities)
|
||||||
|
|
||||||
hass.data[DOMAIN][config_entry.entry_id][DATA_UNSUBSCRIBE].append(
|
config_entry.async_on_unload(
|
||||||
async_dispatcher_connect(
|
async_dispatcher_connect(
|
||||||
hass,
|
hass,
|
||||||
f"{DOMAIN}_{config_entry.entry_id}_add_{BINARY_SENSOR_DOMAIN}",
|
f"{DOMAIN}_{config_entry.entry_id}_add_{BINARY_SENSOR_DOMAIN}",
|
||||||
|
@ -59,7 +59,7 @@ from homeassistant.helpers.dispatcher import async_dispatcher_connect
|
|||||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||||
from homeassistant.helpers.temperature import convert_temperature
|
from homeassistant.helpers.temperature import convert_temperature
|
||||||
|
|
||||||
from .const import DATA_CLIENT, DATA_UNSUBSCRIBE, DOMAIN
|
from .const import DATA_CLIENT, DOMAIN
|
||||||
from .discovery import ZwaveDiscoveryInfo
|
from .discovery import ZwaveDiscoveryInfo
|
||||||
from .entity import ZWaveBaseEntity
|
from .entity import ZWaveBaseEntity
|
||||||
from .helpers import get_value_of_zwave_value
|
from .helpers import get_value_of_zwave_value
|
||||||
@ -121,7 +121,7 @@ async def async_setup_entry(
|
|||||||
|
|
||||||
async_add_entities(entities)
|
async_add_entities(entities)
|
||||||
|
|
||||||
hass.data[DOMAIN][config_entry.entry_id][DATA_UNSUBSCRIBE].append(
|
config_entry.async_on_unload(
|
||||||
async_dispatcher_connect(
|
async_dispatcher_connect(
|
||||||
hass,
|
hass,
|
||||||
f"{DOMAIN}_{config_entry.entry_id}_add_{CLIMATE_DOMAIN}",
|
f"{DOMAIN}_{config_entry.entry_id}_add_{CLIMATE_DOMAIN}",
|
||||||
|
@ -13,7 +13,6 @@ CONF_DATA_COLLECTION_OPTED_IN = "data_collection_opted_in"
|
|||||||
DOMAIN = "zwave_js"
|
DOMAIN = "zwave_js"
|
||||||
|
|
||||||
DATA_CLIENT = "client"
|
DATA_CLIENT = "client"
|
||||||
DATA_UNSUBSCRIBE = "unsubs"
|
|
||||||
DATA_PLATFORM_SETUP = "platform_setup"
|
DATA_PLATFORM_SETUP = "platform_setup"
|
||||||
|
|
||||||
EVENT_DEVICE_ADDED_TO_REGISTRY = f"{DOMAIN}_device_added_to_registry"
|
EVENT_DEVICE_ADDED_TO_REGISTRY = f"{DOMAIN}_device_added_to_registry"
|
||||||
|
@ -23,7 +23,7 @@ from homeassistant.core import HomeAssistant, callback
|
|||||||
from homeassistant.helpers.dispatcher import async_dispatcher_connect
|
from homeassistant.helpers.dispatcher import async_dispatcher_connect
|
||||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||||
|
|
||||||
from .const import DATA_CLIENT, DATA_UNSUBSCRIBE, DOMAIN
|
from .const import DATA_CLIENT, DOMAIN
|
||||||
from .discovery import ZwaveDiscoveryInfo
|
from .discovery import ZwaveDiscoveryInfo
|
||||||
from .entity import ZWaveBaseEntity
|
from .entity import ZWaveBaseEntity
|
||||||
|
|
||||||
@ -57,7 +57,7 @@ async def async_setup_entry(
|
|||||||
entities.append(ZWaveCover(config_entry, client, info))
|
entities.append(ZWaveCover(config_entry, client, info))
|
||||||
async_add_entities(entities)
|
async_add_entities(entities)
|
||||||
|
|
||||||
hass.data[DOMAIN][config_entry.entry_id][DATA_UNSUBSCRIBE].append(
|
config_entry.async_on_unload(
|
||||||
async_dispatcher_connect(
|
async_dispatcher_connect(
|
||||||
hass,
|
hass,
|
||||||
f"{DOMAIN}_{config_entry.entry_id}_add_{COVER_DOMAIN}",
|
f"{DOMAIN}_{config_entry.entry_id}_add_{COVER_DOMAIN}",
|
||||||
|
@ -21,7 +21,7 @@ from homeassistant.util.percentage import (
|
|||||||
ranged_value_to_percentage,
|
ranged_value_to_percentage,
|
||||||
)
|
)
|
||||||
|
|
||||||
from .const import DATA_CLIENT, DATA_UNSUBSCRIBE, DOMAIN
|
from .const import DATA_CLIENT, DOMAIN
|
||||||
from .discovery import ZwaveDiscoveryInfo
|
from .discovery import ZwaveDiscoveryInfo
|
||||||
from .entity import ZWaveBaseEntity
|
from .entity import ZWaveBaseEntity
|
||||||
|
|
||||||
@ -45,7 +45,7 @@ async def async_setup_entry(
|
|||||||
entities.append(ZwaveFan(config_entry, client, info))
|
entities.append(ZwaveFan(config_entry, client, info))
|
||||||
async_add_entities(entities)
|
async_add_entities(entities)
|
||||||
|
|
||||||
hass.data[DOMAIN][config_entry.entry_id][DATA_UNSUBSCRIBE].append(
|
config_entry.async_on_unload(
|
||||||
async_dispatcher_connect(
|
async_dispatcher_connect(
|
||||||
hass,
|
hass,
|
||||||
f"{DOMAIN}_{config_entry.entry_id}_add_{FAN_DOMAIN}",
|
f"{DOMAIN}_{config_entry.entry_id}_add_{FAN_DOMAIN}",
|
||||||
|
@ -27,7 +27,7 @@ from homeassistant.helpers.dispatcher import async_dispatcher_connect
|
|||||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||||
import homeassistant.util.color as color_util
|
import homeassistant.util.color as color_util
|
||||||
|
|
||||||
from .const import DATA_CLIENT, DATA_UNSUBSCRIBE, DOMAIN
|
from .const import DATA_CLIENT, DOMAIN
|
||||||
from .discovery import ZwaveDiscoveryInfo
|
from .discovery import ZwaveDiscoveryInfo
|
||||||
from .entity import ZWaveBaseEntity
|
from .entity import ZWaveBaseEntity
|
||||||
|
|
||||||
@ -62,7 +62,7 @@ async def async_setup_entry(
|
|||||||
light = ZwaveLight(config_entry, client, info)
|
light = ZwaveLight(config_entry, client, info)
|
||||||
async_add_entities([light])
|
async_add_entities([light])
|
||||||
|
|
||||||
hass.data[DOMAIN][config_entry.entry_id][DATA_UNSUBSCRIBE].append(
|
config_entry.async_on_unload(
|
||||||
async_dispatcher_connect(
|
async_dispatcher_connect(
|
||||||
hass,
|
hass,
|
||||||
f"{DOMAIN}_{config_entry.entry_id}_add_{LIGHT_DOMAIN}",
|
f"{DOMAIN}_{config_entry.entry_id}_add_{LIGHT_DOMAIN}",
|
||||||
|
@ -25,7 +25,7 @@ from homeassistant.helpers import config_validation as cv, entity_platform
|
|||||||
from homeassistant.helpers.dispatcher import async_dispatcher_connect
|
from homeassistant.helpers.dispatcher import async_dispatcher_connect
|
||||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||||
|
|
||||||
from .const import DATA_CLIENT, DATA_UNSUBSCRIBE, DOMAIN
|
from .const import DATA_CLIENT, DOMAIN
|
||||||
from .discovery import ZwaveDiscoveryInfo
|
from .discovery import ZwaveDiscoveryInfo
|
||||||
from .entity import ZWaveBaseEntity
|
from .entity import ZWaveBaseEntity
|
||||||
|
|
||||||
@ -62,7 +62,7 @@ async def async_setup_entry(
|
|||||||
|
|
||||||
async_add_entities(entities)
|
async_add_entities(entities)
|
||||||
|
|
||||||
hass.data[DOMAIN][config_entry.entry_id][DATA_UNSUBSCRIBE].append(
|
config_entry.async_on_unload(
|
||||||
async_dispatcher_connect(
|
async_dispatcher_connect(
|
||||||
hass, f"{DOMAIN}_{config_entry.entry_id}_add_{LOCK_DOMAIN}", async_add_lock
|
hass, f"{DOMAIN}_{config_entry.entry_id}_add_{LOCK_DOMAIN}", async_add_lock
|
||||||
)
|
)
|
||||||
|
@ -9,7 +9,7 @@ from homeassistant.core import HomeAssistant, callback
|
|||||||
from homeassistant.helpers.dispatcher import async_dispatcher_connect
|
from homeassistant.helpers.dispatcher import async_dispatcher_connect
|
||||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||||
|
|
||||||
from .const import DATA_CLIENT, DATA_UNSUBSCRIBE, DOMAIN
|
from .const import DATA_CLIENT, DOMAIN
|
||||||
from .discovery import ZwaveDiscoveryInfo
|
from .discovery import ZwaveDiscoveryInfo
|
||||||
from .entity import ZWaveBaseEntity
|
from .entity import ZWaveBaseEntity
|
||||||
|
|
||||||
@ -29,7 +29,7 @@ async def async_setup_entry(
|
|||||||
entities.append(ZwaveNumberEntity(config_entry, client, info))
|
entities.append(ZwaveNumberEntity(config_entry, client, info))
|
||||||
async_add_entities(entities)
|
async_add_entities(entities)
|
||||||
|
|
||||||
hass.data[DOMAIN][config_entry.entry_id][DATA_UNSUBSCRIBE].append(
|
config_entry.async_on_unload(
|
||||||
async_dispatcher_connect(
|
async_dispatcher_connect(
|
||||||
hass,
|
hass,
|
||||||
f"{DOMAIN}_{config_entry.entry_id}_add_{NUMBER_DOMAIN}",
|
f"{DOMAIN}_{config_entry.entry_id}_add_{NUMBER_DOMAIN}",
|
||||||
|
@ -29,7 +29,7 @@ from homeassistant.core import HomeAssistant, callback
|
|||||||
from homeassistant.helpers.dispatcher import async_dispatcher_connect
|
from homeassistant.helpers.dispatcher import async_dispatcher_connect
|
||||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||||
|
|
||||||
from .const import DATA_CLIENT, DATA_UNSUBSCRIBE, DOMAIN
|
from .const import DATA_CLIENT, DOMAIN
|
||||||
from .discovery import ZwaveDiscoveryInfo
|
from .discovery import ZwaveDiscoveryInfo
|
||||||
from .entity import ZWaveBaseEntity
|
from .entity import ZWaveBaseEntity
|
||||||
from .helpers import get_device_id
|
from .helpers import get_device_id
|
||||||
@ -73,7 +73,7 @@ async def async_setup_entry(
|
|||||||
"""Add node status sensor."""
|
"""Add node status sensor."""
|
||||||
async_add_entities([ZWaveNodeStatusSensor(config_entry, client, node)])
|
async_add_entities([ZWaveNodeStatusSensor(config_entry, client, node)])
|
||||||
|
|
||||||
hass.data[DOMAIN][config_entry.entry_id][DATA_UNSUBSCRIBE].append(
|
config_entry.async_on_unload(
|
||||||
async_dispatcher_connect(
|
async_dispatcher_connect(
|
||||||
hass,
|
hass,
|
||||||
f"{DOMAIN}_{config_entry.entry_id}_add_{SENSOR_DOMAIN}",
|
f"{DOMAIN}_{config_entry.entry_id}_add_{SENSOR_DOMAIN}",
|
||||||
@ -81,7 +81,7 @@ async def async_setup_entry(
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
hass.data[DOMAIN][config_entry.entry_id][DATA_UNSUBSCRIBE].append(
|
config_entry.async_on_unload(
|
||||||
async_dispatcher_connect(
|
async_dispatcher_connect(
|
||||||
hass,
|
hass,
|
||||||
f"{DOMAIN}_{config_entry.entry_id}_add_node_status_sensor",
|
f"{DOMAIN}_{config_entry.entry_id}_add_node_status_sensor",
|
||||||
|
@ -12,7 +12,7 @@ from homeassistant.core import HomeAssistant, callback
|
|||||||
from homeassistant.helpers.dispatcher import async_dispatcher_connect
|
from homeassistant.helpers.dispatcher import async_dispatcher_connect
|
||||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||||
|
|
||||||
from .const import DATA_CLIENT, DATA_UNSUBSCRIBE, DOMAIN
|
from .const import DATA_CLIENT, DOMAIN
|
||||||
from .discovery import ZwaveDiscoveryInfo
|
from .discovery import ZwaveDiscoveryInfo
|
||||||
from .entity import ZWaveBaseEntity
|
from .entity import ZWaveBaseEntity
|
||||||
|
|
||||||
@ -44,7 +44,7 @@ async def async_setup_entry(
|
|||||||
|
|
||||||
async_add_entities(entities)
|
async_add_entities(entities)
|
||||||
|
|
||||||
hass.data[DOMAIN][config_entry.entry_id][DATA_UNSUBSCRIBE].append(
|
config_entry.async_on_unload(
|
||||||
async_dispatcher_connect(
|
async_dispatcher_connect(
|
||||||
hass,
|
hass,
|
||||||
f"{DOMAIN}_{config_entry.entry_id}_add_{SWITCH_DOMAIN}",
|
f"{DOMAIN}_{config_entry.entry_id}_add_{SWITCH_DOMAIN}",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user