Reduce config entry setup/unload boilerplate N-P (#49777)

This commit is contained in:
J. Nick Koston 2021-04-27 08:42:21 -10:00 committed by GitHub
parent 6df19205da
commit 3f3f77c6e6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
36 changed files with 90 additions and 389 deletions

View File

@ -1,5 +1,4 @@
"""Support for Neato botvac connected vacuum cleaners.""" """Support for Neato botvac connected vacuum cleaners."""
import asyncio
from datetime import timedelta from datetime import timedelta
import logging import logging
@ -92,22 +91,14 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
hass.data[NEATO_LOGIN] = hub hass.data[NEATO_LOGIN] = hub
for platform in PLATFORMS: hass.config_entries.async_setup_platforms(entry, PLATFORMS)
hass.async_create_task(
hass.config_entries.async_forward_entry_setup(entry, platform)
)
return True return True
async def async_unload_entry(hass: HomeAssistant, entry: ConfigType) -> bool: async def async_unload_entry(hass: HomeAssistant, entry: ConfigType) -> bool:
"""Unload config entry.""" """Unload config entry."""
unload_functions = ( unload_ok = await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
hass.config_entries.async_forward_entry_unload(entry, platform)
for platform in PLATFORMS
)
unload_ok = all(await asyncio.gather(*unload_functions))
if unload_ok: if unload_ok:
hass.data[NEATO_DOMAIN].pop(entry.entry_id) hass.data[NEATO_DOMAIN].pop(entry.entry_id)

View File

@ -1,6 +1,5 @@
"""Support for Nest devices.""" """Support for Nest devices."""
import asyncio
import logging import logging
from google_nest_sdm.event import EventMessage from google_nest_sdm.event import EventMessage
@ -191,10 +190,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry):
hass.data[DOMAIN].pop(DATA_NEST_UNAVAILABLE, None) hass.data[DOMAIN].pop(DATA_NEST_UNAVAILABLE, None)
hass.data[DOMAIN][DATA_SUBSCRIBER] = subscriber hass.data[DOMAIN][DATA_SUBSCRIBER] = subscriber
for platform in PLATFORMS: hass.config_entries.async_setup_platforms(entry, PLATFORMS)
hass.async_create_task(
hass.config_entries.async_forward_entry_setup(entry, platform)
)
return True return True
@ -207,14 +203,7 @@ async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry):
_LOGGER.debug("Stopping nest subscriber") _LOGGER.debug("Stopping nest subscriber")
subscriber = hass.data[DOMAIN][DATA_SUBSCRIBER] subscriber = hass.data[DOMAIN][DATA_SUBSCRIBER]
subscriber.stop_async() subscriber.stop_async()
unload_ok = all( unload_ok = await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
await asyncio.gather(
*[
hass.config_entries.async_forward_entry_unload(entry, platform)
for platform in PLATFORMS
]
)
)
if unload_ok: if unload_ok:
hass.data[DOMAIN].pop(DATA_SUBSCRIBER) hass.data[DOMAIN].pop(DATA_SUBSCRIBER)
hass.data[DOMAIN].pop(DATA_NEST_UNAVAILABLE, None) hass.data[DOMAIN].pop(DATA_NEST_UNAVAILABLE, None)

View File

@ -1,5 +1,4 @@
"""The Netatmo integration.""" """The Netatmo integration."""
import asyncio
import logging import logging
import secrets import secrets
@ -111,10 +110,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry):
await data_handler.async_setup() await data_handler.async_setup()
hass.data[DOMAIN][entry.entry_id][DATA_HANDLER] = data_handler hass.data[DOMAIN][entry.entry_id][DATA_HANDLER] = data_handler
for platform in PLATFORMS: hass.config_entries.async_setup_platforms(entry, PLATFORMS)
hass.async_create_task(
hass.config_entries.async_forward_entry_setup(entry, platform)
)
async def unregister_webhook(_): async def unregister_webhook(_):
if CONF_WEBHOOK_ID not in entry.data: if CONF_WEBHOOK_ID not in entry.data:
@ -213,14 +209,7 @@ async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry):
await hass.data[DOMAIN][entry.entry_id][DATA_HANDLER].async_cleanup() await hass.data[DOMAIN][entry.entry_id][DATA_HANDLER].async_cleanup()
unload_ok = all( unload_ok = await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
await asyncio.gather(
*[
hass.config_entries.async_forward_entry_unload(entry, platform)
for platform in PLATFORMS
]
)
)
if unload_ok: if unload_ok:
hass.data[DOMAIN].pop(entry.entry_id) hass.data[DOMAIN].pop(entry.entry_id)

View File

@ -1,5 +1,4 @@
"""Support for Nexia / Trane XL Thermostats.""" """Support for Nexia / Trane XL Thermostats."""
import asyncio
from datetime import timedelta from datetime import timedelta
from functools import partial from functools import partial
import logging import logging
@ -73,24 +72,14 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry):
UPDATE_COORDINATOR: coordinator, UPDATE_COORDINATOR: coordinator,
} }
for platform in PLATFORMS: hass.config_entries.async_setup_platforms(entry, PLATFORMS)
hass.async_create_task(
hass.config_entries.async_forward_entry_setup(entry, platform)
)
return True return True
async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry): async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry):
"""Unload a config entry.""" """Unload a config entry."""
unload_ok = all( unload_ok = await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
await asyncio.gather(
*[
hass.config_entries.async_forward_entry_unload(entry, platform)
for platform in PLATFORMS
]
)
)
if unload_ok: if unload_ok:
hass.data[DOMAIN].pop(entry.entry_id) hass.data[DOMAIN].pop(entry.entry_id)

View File

@ -1,5 +1,4 @@
"""The Nightscout integration.""" """The Nightscout integration."""
import asyncio
from asyncio import TimeoutError as AsyncIOTimeoutError from asyncio import TimeoutError as AsyncIOTimeoutError
from aiohttp import ClientError from aiohttp import ClientError
@ -43,25 +42,14 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry):
entry_type="service", entry_type="service",
) )
for platform in PLATFORMS: hass.config_entries.async_setup_platforms(entry, PLATFORMS)
hass.async_create_task(
hass.config_entries.async_forward_entry_setup(entry, platform)
)
return True return True
async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
"""Unload a config entry.""" """Unload a config entry."""
unload_ok = all( unload_ok = await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
await asyncio.gather(
*[
hass.config_entries.async_forward_entry_unload(entry, platform)
for platform in PLATFORMS
]
)
)
if unload_ok: if unload_ok:
hass.data[DOMAIN].pop(entry.entry_id) hass.data[DOMAIN].pop(entry.entry_id)

View File

@ -99,24 +99,14 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
await coordinator.async_config_entry_first_refresh() await coordinator.async_config_entry_first_refresh()
for platform in PLATFORMS: hass.config_entries.async_setup_platforms(entry, PLATFORMS)
hass.async_create_task(
hass.config_entries.async_forward_entry_setup(entry, platform)
)
return True return True
async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
"""Unload a Notion config entry.""" """Unload a Notion config entry."""
unload_ok = all( unload_ok = await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
await asyncio.gather(
*[
hass.config_entries.async_forward_entry_unload(entry, platform)
for platform in PLATFORMS
]
)
)
if unload_ok: if unload_ok:
hass.data[DOMAIN][DATA_COORDINATOR].pop(entry.entry_id) hass.data[DOMAIN][DATA_COORDINATOR].pop(entry.entry_id)

View File

@ -1,5 +1,4 @@
"""Support for NuHeat thermostats.""" """Support for NuHeat thermostats."""
import asyncio
from datetime import timedelta from datetime import timedelta
import logging import logging
@ -75,24 +74,14 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry):
hass.data.setdefault(DOMAIN, {}) hass.data.setdefault(DOMAIN, {})
hass.data[DOMAIN][entry.entry_id] = (thermostat, coordinator) hass.data[DOMAIN][entry.entry_id] = (thermostat, coordinator)
for platform in PLATFORMS: hass.config_entries.async_setup_platforms(entry, PLATFORMS)
hass.async_create_task(
hass.config_entries.async_forward_entry_setup(entry, platform)
)
return True return True
async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry): async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry):
"""Unload a config entry.""" """Unload a config entry."""
unload_ok = all( unload_ok = await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
await asyncio.gather(
*[
hass.config_entries.async_forward_entry_unload(entry, platform)
for platform in PLATFORMS
]
)
)
if unload_ok: if unload_ok:
hass.data[DOMAIN].pop(entry.entry_id) hass.data[DOMAIN].pop(entry.entry_id)

View File

@ -1,6 +1,5 @@
"""The nuki component.""" """The nuki component."""
import asyncio
from datetime import timedelta from datetime import timedelta
import logging import logging
@ -122,24 +121,14 @@ async def async_setup_entry(hass, entry):
# Fetch initial data so we have data when entities subscribe # Fetch initial data so we have data when entities subscribe
await coordinator.async_refresh() await coordinator.async_refresh()
for platform in PLATFORMS: hass.config_entries.async_setup_platforms(entry, PLATFORMS)
hass.async_create_task(
hass.config_entries.async_forward_entry_setup(entry, platform)
)
return True return True
async def async_unload_entry(hass, entry): async def async_unload_entry(hass, entry):
"""Unload the Nuki entry.""" """Unload the Nuki entry."""
unload_ok = all( unload_ok = await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
await asyncio.gather(
*[
hass.config_entries.async_forward_entry_unload(entry, platform)
for platform in PLATFORMS
]
)
)
if unload_ok: if unload_ok:
hass.data[DOMAIN].pop(entry.entry_id) hass.data[DOMAIN].pop(entry.entry_id)

View File

@ -1,5 +1,4 @@
"""The nut component.""" """The nut component."""
import asyncio
from datetime import timedelta from datetime import timedelta
import logging import logging
@ -95,10 +94,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry):
UNDO_UPDATE_LISTENER: undo_listener, UNDO_UPDATE_LISTENER: undo_listener,
} }
for platform in PLATFORMS: hass.config_entries.async_setup_platforms(entry, PLATFORMS)
hass.async_create_task(
hass.config_entries.async_forward_entry_setup(entry, platform)
)
return True return True
@ -169,14 +165,7 @@ def find_resources_in_config_entry(config_entry):
async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry): async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry):
"""Unload a config entry.""" """Unload a config entry."""
unload_ok = all( unload_ok = await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
await asyncio.gather(
*[
hass.config_entries.async_forward_entry_unload(entry, platform)
for platform in PLATFORMS
]
)
)
hass.data[DOMAIN][entry.entry_id][UNDO_UPDATE_LISTENER]() hass.data[DOMAIN][entry.entry_id][UNDO_UPDATE_LISTENER]()

View File

@ -1,7 +1,6 @@
"""The National Weather Service integration.""" """The National Weather Service integration."""
from __future__ import annotations from __future__ import annotations
import asyncio
from collections.abc import Awaitable from collections.abc import Awaitable
import datetime import datetime
import logging import logging
@ -155,23 +154,14 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry):
await coordinator_forecast.async_refresh() await coordinator_forecast.async_refresh()
await coordinator_forecast_hourly.async_refresh() await coordinator_forecast_hourly.async_refresh()
for platform in PLATFORMS: hass.config_entries.async_setup_platforms(entry, PLATFORMS)
hass.async_create_task(
hass.config_entries.async_forward_entry_setup(entry, platform)
)
return True return True
async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry): async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry):
"""Unload a config entry.""" """Unload a config entry."""
unload_ok = all( unload_ok = await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
await asyncio.gather(
*[
hass.config_entries.async_forward_entry_unload(entry, platform)
for platform in PLATFORMS
]
)
)
if unload_ok: if unload_ok:
hass.data[DOMAIN].pop(entry.entry_id) hass.data[DOMAIN].pop(entry.entry_id)
if len(hass.data[DOMAIN]) == 0: if len(hass.data[DOMAIN]) == 0:

View File

@ -1,6 +1,4 @@
"""The NZBGet integration.""" """The NZBGet integration."""
import asyncio
import voluptuous as vol import voluptuous as vol
from homeassistant.config_entries import SOURCE_IMPORT, ConfigEntry from homeassistant.config_entries import SOURCE_IMPORT, ConfigEntry
@ -103,10 +101,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
DATA_UNDO_UPDATE_LISTENER: undo_listener, DATA_UNDO_UPDATE_LISTENER: undo_listener,
} }
for platform in PLATFORMS: hass.config_entries.async_setup_platforms(entry, PLATFORMS)
hass.async_create_task(
hass.config_entries.async_forward_entry_setup(entry, platform)
)
_async_register_services(hass, coordinator) _async_register_services(hass, coordinator)
@ -115,14 +110,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
"""Unload a config entry.""" """Unload a config entry."""
unload_ok = all( unload_ok = await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
await asyncio.gather(
*[
hass.config_entries.async_forward_entry_unload(entry, platform)
for platform in PLATFORMS
]
)
)
if unload_ok: if unload_ok:
hass.data[DOMAIN][entry.entry_id][DATA_UNDO_UPDATE_LISTENER]() hass.data[DOMAIN][entry.entry_id][DATA_UNDO_UPDATE_LISTENER]()

View File

@ -1,5 +1,4 @@
"""The Omnilogic integration.""" """The Omnilogic integration."""
import asyncio
import logging import logging
from omnilogic import LoginException, OmniLogic, OmniLogicException from omnilogic import LoginException, OmniLogic, OmniLogicException
@ -57,24 +56,14 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry):
OMNI_API: api, OMNI_API: api,
} }
for platform in PLATFORMS: hass.config_entries.async_setup_platforms(entry, PLATFORMS)
hass.async_create_task(
hass.config_entries.async_forward_entry_setup(entry, platform)
)
return True return True
async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry): async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry):
"""Unload a config entry.""" """Unload a config entry."""
unload_ok = all( unload_ok = await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
await asyncio.gather(
*[
hass.config_entries.async_forward_entry_unload(entry, platform)
for platform in PLATFORMS
]
)
)
if unload_ok: if unload_ok:
hass.data[DOMAIN].pop(entry.entry_id) hass.data[DOMAIN].pop(entry.entry_id)

View File

@ -1,5 +1,4 @@
"""The Ondilo ICO integration.""" """The Ondilo ICO integration."""
import asyncio
from homeassistant.config_entries import ConfigEntry from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
@ -29,24 +28,14 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
hass.data.setdefault(DOMAIN, {}) hass.data.setdefault(DOMAIN, {})
hass.data[DOMAIN][entry.entry_id] = api.OndiloClient(hass, entry, implementation) hass.data[DOMAIN][entry.entry_id] = api.OndiloClient(hass, entry, implementation)
for platform in PLATFORMS: hass.config_entries.async_setup_platforms(entry, PLATFORMS)
hass.async_create_task(
hass.config_entries.async_forward_entry_setup(entry, platform)
)
return True return True
async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry): async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry):
"""Unload a config entry.""" """Unload a config entry."""
unload_ok = all( unload_ok = await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
await asyncio.gather(
*[
hass.config_entries.async_forward_entry_unload(entry, platform)
for platform in PLATFORMS
]
)
)
if unload_ok: if unload_ok:
hass.data[DOMAIN].pop(entry.entry_id) hass.data[DOMAIN].pop(entry.entry_id)

View File

@ -67,13 +67,8 @@ async def async_setup_entry(hass: HomeAssistant, config_entry: ConfigEntry):
async def async_unload_entry(hass: HomeAssistant, config_entry: ConfigEntry): async def async_unload_entry(hass: HomeAssistant, config_entry: ConfigEntry):
"""Unload a config entry.""" """Unload a config entry."""
unload_ok = all( unload_ok = await hass.config_entries.async_unload_platforms(
await asyncio.gather( config_entry, PLATFORMS
*[
hass.config_entries.async_forward_entry_unload(config_entry, platform)
for platform in PLATFORMS
]
)
) )
if unload_ok: if unload_ok:
hass.data[DOMAIN].pop(config_entry.unique_id) hass.data[DOMAIN].pop(config_entry.unique_id)

View File

@ -1,6 +1,4 @@
"""The ONVIF integration.""" """The ONVIF integration."""
import asyncio
from onvif.exceptions import ONVIFAuthError, ONVIFError, ONVIFTimeoutError from onvif.exceptions import ONVIFAuthError, ONVIFError, ONVIFTimeoutError
from homeassistant.components.ffmpeg import CONF_EXTRA_ARGUMENTS from homeassistant.components.ffmpeg import CONF_EXTRA_ARGUMENTS
@ -88,10 +86,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry):
if device.capabilities.events: if device.capabilities.events:
platforms += ["binary_sensor", "sensor"] platforms += ["binary_sensor", "sensor"]
for platform in platforms: hass.config_entries.async_setup_platforms(entry, platforms)
hass.async_create_task(
hass.config_entries.async_forward_entry_setup(entry, platform)
)
entry.async_on_unload( entry.async_on_unload(
hass.bus.async_listen_once(EVENT_HOMEASSISTANT_STOP, device.async_stop) hass.bus.async_listen_once(EVENT_HOMEASSISTANT_STOP, device.async_stop)
@ -110,14 +105,7 @@ async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry):
platforms += ["binary_sensor", "sensor"] platforms += ["binary_sensor", "sensor"]
await device.events.async_stop() await device.events.async_stop()
return all( return await hass.config_entries.async_unload_platforms(entry, platforms)
await asyncio.gather(
*[
hass.config_entries.async_forward_entry_unload(entry, platform)
for platform in platforms
]
)
)
async def _get_snapshot_auth(device): async def _get_snapshot_auth(device):

View File

@ -1,5 +1,4 @@
"""Support for OpenTherm Gateway devices.""" """Support for OpenTherm Gateway devices."""
import asyncio
from datetime import date, datetime from datetime import date, datetime
import logging import logging
@ -81,6 +80,8 @@ CONFIG_SCHEMA = vol.Schema(
extra=vol.ALLOW_EXTRA, extra=vol.ALLOW_EXTRA,
) )
PLATFORMS = [COMP_BINARY_SENSOR, COMP_CLIMATE, COMP_SENSOR]
async def options_updated(hass, entry): async def options_updated(hass, entry):
"""Handle options update.""" """Handle options update."""
@ -112,10 +113,7 @@ async def async_setup_entry(hass, config_entry):
# Schedule directly on the loop to avoid blocking HA startup. # Schedule directly on the loop to avoid blocking HA startup.
hass.loop.create_task(gateway.connect_and_subscribe()) hass.loop.create_task(gateway.connect_and_subscribe())
for comp in [COMP_BINARY_SENSOR, COMP_CLIMATE, COMP_SENSOR]: hass.config_entries.async_setup_platforms(config_entry, PLATFORMS)
hass.async_create_task(
hass.config_entries.async_forward_entry_setup(config_entry, comp)
)
register_services(hass) register_services(hass)
return True return True
@ -400,14 +398,10 @@ def register_services(hass):
async def async_unload_entry(hass, entry): async def async_unload_entry(hass, entry):
"""Cleanup and disconnect from gateway.""" """Cleanup and disconnect from gateway."""
await asyncio.gather( unload_ok = await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
hass.config_entries.async_forward_entry_unload(entry, COMP_BINARY_SENSOR),
hass.config_entries.async_forward_entry_unload(entry, COMP_CLIMATE),
hass.config_entries.async_forward_entry_unload(entry, COMP_SENSOR),
)
gateway = hass.data[DATA_OPENTHERM_GW][DATA_GATEWAYS][entry.data[CONF_ID]] gateway = hass.data[DATA_OPENTHERM_GW][DATA_GATEWAYS][entry.data[CONF_ID]]
await gateway.cleanup() await gateway.cleanup()
return True return unload_ok
class OpenThermGatewayDevice: class OpenThermGatewayDevice:

View File

@ -69,10 +69,7 @@ async def async_setup_entry(hass, config_entry):
LOGGER.error("Config entry failed: %s", err) LOGGER.error("Config entry failed: %s", err)
raise ConfigEntryNotReady from err raise ConfigEntryNotReady from err
for platform in PLATFORMS: hass.config_entries.async_setup_platforms(config_entry, PLATFORMS)
hass.async_create_task(
hass.config_entries.async_forward_entry_setup(config_entry, platform)
)
@_verify_domain_control @_verify_domain_control
async def update_data(service): async def update_data(service):
@ -107,13 +104,8 @@ async def async_setup_entry(hass, config_entry):
async def async_unload_entry(hass, config_entry): async def async_unload_entry(hass, config_entry):
"""Unload an OpenUV config entry.""" """Unload an OpenUV config entry."""
unload_ok = all( unload_ok = await hass.config_entries.async_unload_platforms(
await asyncio.gather( config_entry, PLATFORMS
*[
hass.config_entries.async_forward_entry_unload(config_entry, platform)
for platform in PLATFORMS
]
)
) )
if unload_ok: if unload_ok:
hass.data[DOMAIN][DATA_CLIENT].pop(config_entry.entry_id) hass.data[DOMAIN][DATA_CLIENT].pop(config_entry.entry_id)

View File

@ -1,5 +1,4 @@
"""The openweathermap component.""" """The openweathermap component."""
import asyncio
import logging import logging
from pyowm import OWM from pyowm import OWM
@ -31,12 +30,6 @@ from .weather_update_coordinator import WeatherUpdateCoordinator
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
async def async_setup(hass: HomeAssistant, config: dict) -> bool:
"""Set up the OpenWeatherMap component."""
hass.data.setdefault(DOMAIN, {})
return True
async def async_setup_entry(hass: HomeAssistant, config_entry: ConfigEntry): async def async_setup_entry(hass: HomeAssistant, config_entry: ConfigEntry):
"""Set up OpenWeatherMap as config entry.""" """Set up OpenWeatherMap as config entry."""
name = config_entry.data[CONF_NAME] name = config_entry.data[CONF_NAME]
@ -61,10 +54,7 @@ async def async_setup_entry(hass: HomeAssistant, config_entry: ConfigEntry):
ENTRY_WEATHER_COORDINATOR: weather_coordinator, ENTRY_WEATHER_COORDINATOR: weather_coordinator,
} }
for platform in PLATFORMS: hass.config_entries.async_setup_platforms(config_entry, PLATFORMS)
hass.async_create_task(
hass.config_entries.async_forward_entry_setup(config_entry, platform)
)
update_listener = config_entry.add_update_listener(async_update_options) update_listener = config_entry.add_update_listener(async_update_options)
hass.data[DOMAIN][config_entry.entry_id][UPDATE_LISTENER] = update_listener hass.data[DOMAIN][config_entry.entry_id][UPDATE_LISTENER] = update_listener
@ -101,13 +91,8 @@ async def async_update_options(hass: HomeAssistant, config_entry: ConfigEntry):
async def async_unload_entry(hass: HomeAssistant, config_entry: ConfigEntry): async def async_unload_entry(hass: HomeAssistant, config_entry: ConfigEntry):
"""Unload a config entry.""" """Unload a config entry."""
unload_ok = all( unload_ok = await hass.config_entries.async_unload_platforms(
await asyncio.gather( config_entry, PLATFORMS
*[
hass.config_entries.async_forward_entry_unload(config_entry, platform)
for platform in PLATFORMS
]
)
) )
if unload_ok: if unload_ok:
update_listener = hass.data[DOMAIN][config_entry.entry_id][UPDATE_LISTENER] update_listener = hass.data[DOMAIN][config_entry.entry_id][UPDATE_LISTENER]

View File

@ -25,6 +25,8 @@ from .const import DATA_CLIENT, DATA_COORDINATOR, DOMAIN
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
PLATFORMS = ["sensor"]
async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
"""Set up OVO Energy from a config entry.""" """Set up OVO Energy from a config entry."""
@ -75,9 +77,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
await coordinator.async_config_entry_first_refresh() await coordinator.async_config_entry_first_refresh()
# Setup components # Setup components
hass.async_create_task( hass.config_entries.async_setup_platforms(entry, PLATFORMS)
hass.config_entries.async_forward_entry_setup(entry, "sensor")
)
return True return True
@ -85,11 +85,11 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
async def async_unload_entry(hass: HomeAssistant, entry: ConfigType) -> bool: async def async_unload_entry(hass: HomeAssistant, entry: ConfigType) -> bool:
"""Unload OVO Energy config entry.""" """Unload OVO Energy config entry."""
# Unload sensors # Unload sensors
await hass.config_entries.async_forward_entry_unload(entry, "sensor") unload_ok = await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
del hass.data[DOMAIN][entry.entry_id] del hass.data[DOMAIN][entry.entry_id]
return True return unload_ok
class OVOEnergyEntity(CoordinatorEntity): class OVOEnergyEntity(CoordinatorEntity):

View File

@ -32,6 +32,7 @@ CONF_MQTT_TOPIC = "mqtt_topic"
CONF_REGION_MAPPING = "region_mapping" CONF_REGION_MAPPING = "region_mapping"
CONF_EVENTS_ONLY = "events_only" CONF_EVENTS_ONLY = "events_only"
BEACON_DEV_ID = "beacon" BEACON_DEV_ID = "beacon"
PLATFORMS = ["device_tracker"]
DEFAULT_OWNTRACKS_TOPIC = "owntracks/#" DEFAULT_OWNTRACKS_TOPIC = "owntracks/#"
@ -101,9 +102,7 @@ async def async_setup_entry(hass, entry):
DOMAIN, "OwnTracks", webhook_id, handle_webhook DOMAIN, "OwnTracks", webhook_id, handle_webhook
) )
hass.async_create_task( hass.config_entries.async_setup_platforms(entry, PLATFORMS)
hass.config_entries.async_forward_entry_setup(entry, "device_tracker")
)
hass.data[DOMAIN]["unsub"] = hass.helpers.dispatcher.async_dispatcher_connect( hass.data[DOMAIN]["unsub"] = hass.helpers.dispatcher.async_dispatcher_connect(
DOMAIN, async_handle_message DOMAIN, async_handle_message
@ -115,10 +114,10 @@ async def async_setup_entry(hass, entry):
async def async_unload_entry(hass, entry): async def async_unload_entry(hass, entry):
"""Unload an OwnTracks config entry.""" """Unload an OwnTracks config entry."""
hass.components.webhook.async_unregister(entry.data[CONF_WEBHOOK_ID]) hass.components.webhook.async_unregister(entry.data[CONF_WEBHOOK_ID])
await hass.config_entries.async_forward_entry_unload(entry, "device_tracker") unload_ok = await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
hass.data[DOMAIN]["unsub"]() hass.data[DOMAIN]["unsub"]()
return True return unload_ok
async def async_remove_entry(hass, entry): async def async_remove_entry(hass, entry):

View File

@ -301,14 +301,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry): # noqa: C
async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry): async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry):
"""Unload a config entry.""" """Unload a config entry."""
# cleanup platforms # cleanup platforms
unload_ok = all( unload_ok = await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
await asyncio.gather(
*[
hass.config_entries.async_forward_entry_unload(entry, platform)
for platform in PLATFORMS
]
)
)
if not unload_ok: if not unload_ok:
return False return False

View File

@ -1,5 +1,4 @@
"""The Panasonic Viera integration.""" """The Panasonic Viera integration."""
import asyncio
from functools import partial from functools import partial
import logging import logging
from urllib.request import URLError from urllib.request import URLError
@ -104,25 +103,16 @@ async def async_setup_entry(hass, config_entry):
data={**config, ATTR_DEVICE_INFO: device_info}, data={**config, ATTR_DEVICE_INFO: device_info},
) )
for platform in PLATFORMS: hass.config_entries.async_setup_platforms(config_entry, PLATFORMS)
hass.async_create_task(
hass.config_entries.async_forward_entry_setup(config_entry, platform)
)
return True return True
async def async_unload_entry(hass, config_entry): async def async_unload_entry(hass, config_entry):
"""Unload a config entry.""" """Unload a config entry."""
unload_ok = all( unload_ok = await hass.config_entries.async_unload_platforms(
await asyncio.gather( config_entry, PLATFORMS
*[
hass.config_entries.async_forward_entry_unload(config_entry, platform)
for platform in PLATFORMS
]
)
) )
if unload_ok: if unload_ok:
hass.data[DOMAIN].pop(config_entry.entry_id) hass.data[DOMAIN].pop(config_entry.entry_id)

View File

@ -43,24 +43,14 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry):
hass.data.setdefault(DOMAIN, {}) hass.data.setdefault(DOMAIN, {})
hass.data[DOMAIN][entry.entry_id] = coordinator hass.data[DOMAIN][entry.entry_id] = coordinator
for platform in PLATFORMS: hass.config_entries.async_setup_platforms(entry, PLATFORMS)
hass.async_create_task(
hass.config_entries.async_forward_entry_setup(entry, platform)
)
return True return True
async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry): async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry):
"""Unload a config entry.""" """Unload a config entry."""
unload_ok = all( unload_ok = await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
await asyncio.gather(
*[
hass.config_entries.async_forward_entry_unload(entry, platform)
for platform in PLATFORMS
]
)
)
if unload_ok: if unload_ok:
hass.data[DOMAIN].pop(entry.entry_id) hass.data[DOMAIN].pop(entry.entry_id)

View File

@ -1,5 +1,4 @@
"""The pi_hole component.""" """The pi_hole component."""
import asyncio
import logging import logging
from hole import Hole from hole import Hole
@ -126,23 +125,15 @@ async def async_setup_entry(hass, entry):
DATA_KEY_COORDINATOR: coordinator, DATA_KEY_COORDINATOR: coordinator,
} }
for platform in _async_platforms(entry): hass.config_entries.async_setup_platforms(entry, _async_platforms(entry))
hass.async_create_task(
hass.config_entries.async_forward_entry_setup(entry, platform)
)
return True return True
async def async_unload_entry(hass, entry): async def async_unload_entry(hass, entry):
"""Unload Pi-hole entry.""" """Unload Pi-hole entry."""
unload_ok = all( unload_ok = await hass.config_entries.async_unload_platforms(
await asyncio.gather( entry, _async_platforms(entry)
*[
hass.config_entries.async_forward_entry_unload(entry, platform)
for platform in _async_platforms(entry)
]
)
) )
if unload_ok: if unload_ok:
hass.data[DOMAIN].pop(entry.entry_id) hass.data[DOMAIN].pop(entry.entry_id)

View File

@ -1,5 +1,4 @@
"""The Picnic integration.""" """The Picnic integration."""
import asyncio
from python_picnic_api import PicnicAPI from python_picnic_api import PicnicAPI
@ -35,24 +34,14 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry):
CONF_COORDINATOR: picnic_coordinator, CONF_COORDINATOR: picnic_coordinator,
} }
for component in PLATFORMS: hass.config_entries.async_setup_platforms(entry, PLATFORMS)
hass.async_create_task(
hass.config_entries.async_forward_entry_setup(entry, component)
)
return True return True
async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry): async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry):
"""Unload a config entry.""" """Unload a config entry."""
unload_ok = all( unload_ok = await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
await asyncio.gather(
*[
hass.config_entries.async_forward_entry_unload(entry, component)
for component in PLATFORMS
]
)
)
if unload_ok: if unload_ok:
hass.data[DOMAIN].pop(entry.entry_id) hass.data[DOMAIN].pop(entry.entry_id)

View File

@ -1,6 +1,5 @@
"""Support for Plaato devices.""" """Support for Plaato devices."""
import asyncio
from datetime import timedelta from datetime import timedelta
import logging import logging
@ -94,11 +93,9 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry):
else: else:
await async_setup_coordinator(hass, entry) await async_setup_coordinator(hass, entry)
for platform in PLATFORMS: hass.config_entries.async_setup_platforms(
if entry.options.get(platform, True): entry, [platform for platform in PLATFORMS if entry.options.get(platform, True)]
hass.async_create_task( )
hass.config_entries.async_forward_entry_setup(entry, platform)
)
return True return True
@ -177,14 +174,7 @@ async def async_unload_coordinator(hass: HomeAssistant, entry: ConfigEntry):
async def async_unload_platforms(hass: HomeAssistant, entry: ConfigEntry, platforms): async def async_unload_platforms(hass: HomeAssistant, entry: ConfigEntry, platforms):
"""Unload platforms.""" """Unload platforms."""
unloaded = all( unloaded = await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
await asyncio.gather(
*[
hass.config_entries.async_forward_entry_unload(entry, platform)
for platform in platforms
]
)
)
if unloaded: if unloaded:
hass.data[DOMAIN].pop(entry.entry_id) hass.data[DOMAIN].pop(entry.entry_id)

View File

@ -1,5 +1,4 @@
"""Support to embed Plex.""" """Support to embed Plex."""
import asyncio
from functools import partial from functools import partial
import logging import logging
@ -232,15 +231,11 @@ async def async_unload_entry(hass, entry):
for unsub in dispatchers: for unsub in dispatchers:
unsub() unsub()
tasks = [ unload_ok = await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
hass.config_entries.async_forward_entry_unload(entry, platform)
for platform in PLATFORMS
]
await asyncio.gather(*tasks)
hass.data[PLEX_DOMAIN][SERVERS].pop(server_id) hass.data[PLEX_DOMAIN][SERVERS].pop(server_id)
return True return unload_ok
async def async_options_updated(hass, entry): async def async_options_updated(hass, entry):

View File

@ -136,10 +136,7 @@ async def async_setup_entry_gw(hass: HomeAssistant, entry: ConfigEntry) -> bool:
if single_master_thermostat is None: if single_master_thermostat is None:
platforms = SENSOR_PLATFORMS platforms = SENSOR_PLATFORMS
for platform in platforms: hass.config_entries.async_setup_platforms(entry, platforms)
hass.async_create_task(
hass.config_entries.async_forward_entry_setup(entry, platform)
)
return True return True
@ -154,13 +151,8 @@ async def _update_listener(hass: HomeAssistant, entry: ConfigEntry):
async def async_unload_entry_gw(hass: HomeAssistant, entry: ConfigEntry): async def async_unload_entry_gw(hass: HomeAssistant, entry: ConfigEntry):
"""Unload a config entry.""" """Unload a config entry."""
unload_ok = all( unload_ok = await hass.config_entries.async_unload_platforms(
await asyncio.gather( entry, PLATFORMS_GATEWAY
*[
hass.config_entries.async_forward_entry_unload(entry, platform)
for platform in PLATFORMS_GATEWAY
]
)
) )
hass.data[DOMAIN][entry.entry_id][UNDO_UPDATE_LISTENER]() hass.data[DOMAIN][entry.entry_id][UNDO_UPDATE_LISTENER]()

View File

@ -139,13 +139,11 @@ async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry):
session = hass.data[DOMAIN].pop(entry.entry_id) session = hass.data[DOMAIN].pop(entry.entry_id)
await session.remove_webhook() await session.remove_webhook()
for platform in PLATFORMS: unload_ok = await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
await hass.config_entries.async_forward_entry_unload(entry, platform)
if not hass.data[DOMAIN]: if not hass.data[DOMAIN]:
hass.data.pop(DOMAIN) hass.data.pop(DOMAIN)
return True return unload_ok
async def handle_webhook(hass, webhook_id, request): async def handle_webhook(hass, webhook_id, request):

View File

@ -1,5 +1,4 @@
"""The PoolSense integration.""" """The PoolSense integration."""
import asyncio
from datetime import timedelta from datetime import timedelta
import logging import logging
@ -46,28 +45,16 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry):
hass.data.setdefault(DOMAIN, {}) hass.data.setdefault(DOMAIN, {})
hass.data[DOMAIN][entry.entry_id] = coordinator hass.data[DOMAIN][entry.entry_id] = coordinator
for platform in PLATFORMS: hass.config_entries.async_setup_platforms(entry, PLATFORMS)
hass.async_create_task(
hass.config_entries.async_forward_entry_setup(entry, platform)
)
return True return True
async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry): async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry):
"""Unload a config entry.""" """Unload a config entry."""
unload_ok = all( unload_ok = await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
await asyncio.gather(
*[
hass.config_entries.async_forward_entry_unload(entry, platform)
for platform in PLATFORMS
]
)
)
if unload_ok: if unload_ok:
hass.data[DOMAIN].pop(entry.entry_id) hass.data[DOMAIN].pop(entry.entry_id)
return unload_ok return unload_ok

View File

@ -1,5 +1,4 @@
"""The Tesla Powerwall integration.""" """The Tesla Powerwall integration."""
import asyncio
from datetime import timedelta from datetime import timedelta
import logging import logging
@ -154,10 +153,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry):
await coordinator.async_config_entry_first_refresh() await coordinator.async_config_entry_first_refresh()
for platform in PLATFORMS: hass.config_entries.async_setup_platforms(entry, PLATFORMS)
hass.async_create_task(
hass.config_entries.async_forward_entry_setup(entry, platform)
)
return True return True
@ -210,14 +206,7 @@ def _fetch_powerwall_data(power_wall):
async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry): async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry):
"""Unload a config entry.""" """Unload a config entry."""
unload_ok = all( unload_ok = await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
await asyncio.gather(
*[
hass.config_entries.async_forward_entry_unload(entry, platform)
for platform in PLATFORMS
]
)
)
hass.data[DOMAIN][entry.entry_id][POWERWALL_HTTP_SESSION].close() hass.data[DOMAIN][entry.entry_id][POWERWALL_HTTP_SESSION].close()

View File

@ -1,5 +1,4 @@
"""Automation manager for boards manufactured by ProgettiHWSW Italy.""" """Automation manager for boards manufactured by ProgettiHWSW Italy."""
import asyncio
from ProgettiHWSW.ProgettiHWSWAPI import ProgettiHWSWAPI from ProgettiHWSW.ProgettiHWSWAPI import ProgettiHWSWAPI
from ProgettiHWSW.input import Input from ProgettiHWSW.input import Input
@ -23,24 +22,14 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry):
# Check board validation again to load new values to API. # Check board validation again to load new values to API.
await hass.data[DOMAIN][entry.entry_id].check_board() await hass.data[DOMAIN][entry.entry_id].check_board()
for platform in PLATFORMS: hass.config_entries.async_setup_platforms(entry, PLATFORMS)
hass.async_create_task(
hass.config_entries.async_forward_entry_setup(entry, platform)
)
return True return True
async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry): async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry):
"""Unload a config entry.""" """Unload a config entry."""
unload_ok = all( unload_ok = await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
await asyncio.gather(
*[
hass.config_entries.async_forward_entry_unload(entry, platform)
for platform in PLATFORMS
]
)
)
if unload_ok: if unload_ok:
hass.data[DOMAIN].pop(entry.entry_id) hass.data[DOMAIN].pop(entry.entry_id)

View File

@ -38,6 +38,8 @@ PS4_COMMAND_SCHEMA = vol.Schema(
} }
) )
PLATFORMS = ["media_player"]
class PS4Data: class PS4Data:
"""Init Data Class.""" """Init Data Class."""
@ -59,18 +61,15 @@ async def async_setup(hass, config):
return True return True
async def async_setup_entry(hass, config_entry): async def async_setup_entry(hass, entry):
"""Set up PS4 from a config entry.""" """Set up PS4 from a config entry."""
hass.async_create_task( hass.config_entries.async_setup_platforms(entry, PLATFORMS)
hass.config_entries.async_forward_entry_setup(config_entry, "media_player")
)
return True return True
async def async_unload_entry(hass, entry): async def async_unload_entry(hass, entry):
"""Unload a PS4 config entry.""" """Unload a PS4 config entry."""
await hass.config_entries.async_forward_entry_unload(entry, "media_player") return await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
return True
async def async_migrate_entry(hass, entry): async def async_migrate_entry(hass, entry):

View File

@ -6,7 +6,7 @@ from homeassistant.const import CONF_NAME
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
from .const import ATTR_TARIFF, DEFAULT_NAME, DEFAULT_TARIFF, DOMAIN, PLATFORM, TARIFFS from .const import ATTR_TARIFF, DEFAULT_NAME, DEFAULT_TARIFF, DOMAIN, PLATFORMS, TARIFFS
UI_CONFIG_SCHEMA = vol.Schema( UI_CONFIG_SCHEMA = vol.Schema(
{ {
@ -44,13 +44,10 @@ async def async_setup(hass: HomeAssistant, config: dict):
async def async_setup_entry(hass: HomeAssistant, entry: config_entries.ConfigEntry): async def async_setup_entry(hass: HomeAssistant, entry: config_entries.ConfigEntry):
"""Set up pvpc hourly pricing from a config entry.""" """Set up pvpc hourly pricing from a config entry."""
hass.async_create_task( hass.config_entries.async_setup_platforms(entry, PLATFORMS)
hass.config_entries.async_forward_entry_setup(entry, PLATFORM)
)
return True return True
async def async_unload_entry(hass: HomeAssistant, entry: config_entries.ConfigEntry): async def async_unload_entry(hass: HomeAssistant, entry: config_entries.ConfigEntry):
"""Unload a config entry.""" """Unload a config entry."""
return await hass.config_entries.async_forward_entry_unload(entry, PLATFORM) return await hass.config_entries.async_unload_platforms(entry, PLATFORMS)

View File

@ -2,7 +2,7 @@
from aiopvpc import TARIFFS from aiopvpc import TARIFFS
DOMAIN = "pvpc_hourly_pricing" DOMAIN = "pvpc_hourly_pricing"
PLATFORM = "sensor" PLATFORMS = ["sensor"]
ATTR_TARIFF = "tariff" ATTR_TARIFF = "tariff"
DEFAULT_NAME = "PVPC" DEFAULT_NAME = "PVPC"
DEFAULT_TARIFF = TARIFFS[1] DEFAULT_TARIFF = TARIFFS[1]

View File

@ -154,8 +154,8 @@ async def test_unload(hass):
assert entry.data["webhook_id"] in hass.data["webhook"] assert entry.data["webhook_id"] in hass.data["webhook"]
with patch( with patch(
"homeassistant.config_entries.ConfigEntries.async_forward_entry_unload", "homeassistant.config_entries.ConfigEntries.async_unload_platforms",
return_value=None, return_value=True,
) as mock_unload: ) as mock_unload:
assert await hass.config_entries.async_unload(entry.entry_id) assert await hass.config_entries.async_unload(entry.entry_id)