diff --git a/homeassistant/components/imap_email_content/sensor.py b/homeassistant/components/imap_email_content/sensor.py index e2dab5b9ef2..d0d87e0b2d5 100644 --- a/homeassistant/components/imap_email_content/sensor.py +++ b/homeassistant/components/imap_email_content/sensor.py @@ -1,4 +1,6 @@ """Email sensor support.""" +from __future__ import annotations + from collections import deque import datetime import email @@ -17,7 +19,10 @@ from homeassistant.const import ( CONF_VALUE_TEMPLATE, CONTENT_TYPE_TEXT_PLAIN, ) +from homeassistant.core import HomeAssistant import homeassistant.helpers.config_validation as cv +from homeassistant.helpers.entity_platform import AddEntitiesCallback +from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType _LOGGER = logging.getLogger(__name__) @@ -45,7 +50,12 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( ) -def setup_platform(hass, config, add_entities, discovery_info=None): +def setup_platform( + hass: HomeAssistant, + config: ConfigType, + add_entities: AddEntitiesCallback, + discovery_info: DiscoveryInfoType | None = None, +) -> None: """Set up the Email sensor platform.""" reader = EmailReader( config.get(CONF_USERNAME), @@ -67,8 +77,6 @@ def setup_platform(hass, config, add_entities, discovery_info=None): if sensor.connected: add_entities([sensor], True) - else: - return False class EmailReader: diff --git a/homeassistant/components/kira/remote.py b/homeassistant/components/kira/remote.py index 9c02a3199e4..37be3792aa9 100644 --- a/homeassistant/components/kira/remote.py +++ b/homeassistant/components/kira/remote.py @@ -1,17 +1,27 @@ """Support for Keene Electronics IR-IP devices.""" +from __future__ import annotations + import functools as ft import logging from homeassistant.components import remote from homeassistant.const import CONF_DEVICE, CONF_NAME +from homeassistant.core import HomeAssistant from homeassistant.helpers.entity import Entity +from homeassistant.helpers.entity_platform import AddEntitiesCallback +from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType from . import CONF_REMOTE, DOMAIN _LOGGER = logging.getLogger(__name__) -def setup_platform(hass, config, add_entities, discovery_info=None): +def setup_platform( + hass: HomeAssistant, + config: ConfigType, + add_entities: AddEntitiesCallback, + discovery_info: DiscoveryInfoType | None = None, +) -> None: """Set up the Kira platform.""" if discovery_info: name = discovery_info.get(CONF_NAME) @@ -19,7 +29,6 @@ def setup_platform(hass, config, add_entities, discovery_info=None): kira = hass.data[DOMAIN][CONF_REMOTE][name] add_entities([KiraRemote(device, kira)]) - return True class KiraRemote(Entity): diff --git a/homeassistant/components/kwb/sensor.py b/homeassistant/components/kwb/sensor.py index c6d2794a06d..c15cff72655 100644 --- a/homeassistant/components/kwb/sensor.py +++ b/homeassistant/components/kwb/sensor.py @@ -1,4 +1,6 @@ """Support for KWB Easyfire.""" +from __future__ import annotations + from pykwb import kwb import voluptuous as vol @@ -11,7 +13,10 @@ from homeassistant.const import ( CONF_TYPE, EVENT_HOMEASSISTANT_STOP, ) +from homeassistant.core import HomeAssistant import homeassistant.helpers.config_validation as cv +from homeassistant.helpers.entity_platform import AddEntitiesCallback +from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType DEFAULT_RAW = False DEFAULT_NAME = "KWB" @@ -43,7 +48,12 @@ ETHERNET_SCHEMA = PLATFORM_SCHEMA.extend( PLATFORM_SCHEMA = vol.Schema(vol.Any(SERIAL_SCHEMA, ETHERNET_SCHEMA)) -def setup_platform(hass, config, add_entities, discovery_info=None): +def setup_platform( + hass: HomeAssistant, + config: ConfigType, + add_entities: AddEntitiesCallback, + discovery_info: DiscoveryInfoType | None = None, +) -> None: """Set up the KWB component.""" host = config.get(CONF_HOST) port = config.get(CONF_PORT) @@ -57,7 +67,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None): elif connection_type == "tcp": easyfire = kwb.KWBEasyfire(MODE_TCP, host, port) else: - return False + return easyfire.run_thread() diff --git a/homeassistant/components/lifx/light.py b/homeassistant/components/lifx/light.py index 23069f45e5d..f921dabdf4a 100644 --- a/homeassistant/components/lifx/light.py +++ b/homeassistant/components/lifx/light.py @@ -1,4 +1,6 @@ """Support for LIFX lights.""" +from __future__ import annotations + import asyncio from datetime import timedelta from functools import partial @@ -35,6 +37,7 @@ from homeassistant.components.light import ( LightEntity, preprocess_turn_on_alternatives, ) +from homeassistant.config_entries import ConfigEntry from homeassistant.const import ( ATTR_ENTITY_ID, ATTR_MODE, @@ -42,12 +45,14 @@ from homeassistant.const import ( ATTR_SW_VERSION, EVENT_HOMEASSISTANT_STOP, ) -from homeassistant.core import ServiceCall, callback +from homeassistant.core import HomeAssistant, ServiceCall, callback from homeassistant.helpers import entity_platform import homeassistant.helpers.config_validation as cv import homeassistant.helpers.device_registry as dr from homeassistant.helpers.entity import DeviceInfo +from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.helpers.event import async_track_point_in_utc_time +from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType import homeassistant.util.color as color_util from . import ( @@ -168,12 +173,21 @@ def aiolifx_effects(): return aiolifx_effects_module -async def async_setup_platform(hass, config, async_add_entities, discovery_info=None): +async def async_setup_platform( + hass: HomeAssistant, + config: ConfigType, + async_add_entities: AddEntitiesCallback, + discovery_info: DiscoveryInfoType | None = None, +) -> None: """Set up the LIFX light platform. Obsolete.""" _LOGGER.warning("LIFX no longer works with light platform configuration") -async def async_setup_entry(hass, config_entry, async_add_entities): +async def async_setup_entry( + hass: HomeAssistant, + config_entry: ConfigEntry, + async_add_entities: AddEntitiesCallback, +) -> None: """Set up LIFX from a config entry.""" # Priority 1: manual config if not (interfaces := hass.data[LIFX_DOMAIN].get(DOMAIN)): @@ -191,8 +205,6 @@ async def async_setup_entry(hass, config_entry, async_add_entities): for interface in interfaces: lifx_manager.start_discovery(interface) - return True - def lifx_features(bulb): """Return a feature map for this bulb, or a default map if unknown.""" diff --git a/homeassistant/components/lifx_cloud/scene.py b/homeassistant/components/lifx_cloud/scene.py index c91feeaef82..ce03a595f64 100644 --- a/homeassistant/components/lifx_cloud/scene.py +++ b/homeassistant/components/lifx_cloud/scene.py @@ -1,4 +1,6 @@ """Support for LIFX Cloud scenes.""" +from __future__ import annotations + import asyncio from http import HTTPStatus import logging @@ -11,8 +13,11 @@ import voluptuous as vol from homeassistant.components.scene import Scene from homeassistant.const import CONF_PLATFORM, CONF_TIMEOUT, CONF_TOKEN +from homeassistant.core import HomeAssistant from homeassistant.helpers.aiohttp_client import async_get_clientsession import homeassistant.helpers.config_validation as cv +from homeassistant.helpers.entity_platform import AddEntitiesCallback +from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType _LOGGER = logging.getLogger(__name__) @@ -27,7 +32,12 @@ PLATFORM_SCHEMA = vol.Schema( ) -async def async_setup_platform(hass, config, async_add_entities, discovery_info=None): +async def async_setup_platform( + hass: HomeAssistant, + config: ConfigType, + async_add_entities: AddEntitiesCallback, + discovery_info: DiscoveryInfoType | None = None, +) -> None: """Set up the scenes stored in the LIFX Cloud.""" token = config.get(CONF_TOKEN) timeout = config.get(CONF_TIMEOUT) @@ -43,20 +53,19 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info= except (asyncio.TimeoutError, aiohttp.ClientError): _LOGGER.exception("Error on %s", url) - return False + return status = scenes_resp.status if status == HTTPStatus.OK: data = await scenes_resp.json() devices = [LifxCloudScene(hass, headers, timeout, scene) for scene in data] async_add_entities(devices) - return True + return if status == HTTPStatus.UNAUTHORIZED: _LOGGER.error("Unauthorized (bad token?) on %s", url) - return False + return _LOGGER.error("HTTP error %d on %s", scenes_resp.status, url) - return False class LifxCloudScene(Scene): diff --git a/homeassistant/components/linux_battery/sensor.py b/homeassistant/components/linux_battery/sensor.py index e78a8a58525..ec747778b7b 100644 --- a/homeassistant/components/linux_battery/sensor.py +++ b/homeassistant/components/linux_battery/sensor.py @@ -1,4 +1,6 @@ """Details about the built-in battery.""" +from __future__ import annotations + import logging import os @@ -11,7 +13,10 @@ from homeassistant.components.sensor import ( SensorEntity, ) from homeassistant.const import ATTR_NAME, CONF_NAME, PERCENTAGE +from homeassistant.core import HomeAssistant import homeassistant.helpers.config_validation as cv +from homeassistant.helpers.entity_platform import AddEntitiesCallback +from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType _LOGGER = logging.getLogger(__name__) @@ -53,7 +58,12 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( ) -def setup_platform(hass, config, add_entities, discovery_info=None): +def setup_platform( + hass: HomeAssistant, + config: ConfigType, + add_entities: AddEntitiesCallback, + discovery_info: DiscoveryInfoType | None = None, +) -> None: """Set up the Linux Battery sensor.""" name = config.get(CONF_NAME) battery_id = config.get(CONF_BATTERY) @@ -66,7 +76,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None): os.listdir(os.path.join(DEFAULT_PATH, f"BAT{battery_id}")) except FileNotFoundError: _LOGGER.error("No battery found") - return False + return add_entities([LinuxBatterySensor(name, battery_id, system)], True) diff --git a/homeassistant/components/locative/device_tracker.py b/homeassistant/components/locative/device_tracker.py index 84719d08e4a..4ededae6b01 100644 --- a/homeassistant/components/locative/device_tracker.py +++ b/homeassistant/components/locative/device_tracker.py @@ -1,13 +1,17 @@ """Support for the Locative platform.""" from homeassistant.components.device_tracker import SOURCE_TYPE_GPS from homeassistant.components.device_tracker.config_entry import TrackerEntity -from homeassistant.core import callback +from homeassistant.config_entries import ConfigEntry +from homeassistant.core import HomeAssistant, callback from homeassistant.helpers.dispatcher import async_dispatcher_connect +from homeassistant.helpers.entity_platform import AddEntitiesCallback from . import DOMAIN as LT_DOMAIN, TRACKER_UPDATE -async def async_setup_entry(hass, entry, async_add_entities): +async def async_setup_entry( + hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback +) -> None: """Configure a dispatcher connection based on a config entry.""" @callback @@ -24,8 +28,6 @@ async def async_setup_entry(hass, entry, async_add_entities): entry.entry_id ] = async_dispatcher_connect(hass, TRACKER_UPDATE, _receive_data) - return True - class LocativeEntity(TrackerEntity): """Represent a tracked device.""" diff --git a/homeassistant/components/lutron/cover.py b/homeassistant/components/lutron/cover.py index 6ee53950ef2..701cbfbafaa 100644 --- a/homeassistant/components/lutron/cover.py +++ b/homeassistant/components/lutron/cover.py @@ -1,4 +1,6 @@ """Support for Lutron shades.""" +from __future__ import annotations + import logging from homeassistant.components.cover import ( @@ -8,13 +10,21 @@ from homeassistant.components.cover import ( SUPPORT_SET_POSITION, CoverEntity, ) +from homeassistant.core import HomeAssistant +from homeassistant.helpers.entity_platform import AddEntitiesCallback +from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType from . import LUTRON_CONTROLLER, LUTRON_DEVICES, LutronDevice _LOGGER = logging.getLogger(__name__) -def setup_platform(hass, config, add_entities, discovery_info=None): +def setup_platform( + hass: HomeAssistant, + config: ConfigType, + add_entities: AddEntitiesCallback, + discovery_info: DiscoveryInfoType | None = None, +) -> None: """Set up the Lutron shades.""" devs = [] for (area_name, device) in hass.data[LUTRON_DEVICES]["cover"]: @@ -22,7 +32,6 @@ def setup_platform(hass, config, add_entities, discovery_info=None): devs.append(dev) add_entities(devs, True) - return True class LutronCover(LutronDevice, CoverEntity): diff --git a/homeassistant/components/mfi/sensor.py b/homeassistant/components/mfi/sensor.py index a951f10822f..34a56641d2d 100644 --- a/homeassistant/components/mfi/sensor.py +++ b/homeassistant/components/mfi/sensor.py @@ -1,4 +1,6 @@ """Support for Ubiquiti mFi sensors.""" +from __future__ import annotations + import logging from mficlient.client import FailedToLogin, MFiClient @@ -21,7 +23,10 @@ from homeassistant.const import ( STATE_ON, TEMP_CELSIUS, ) +from homeassistant.core import HomeAssistant import homeassistant.helpers.config_validation as cv +from homeassistant.helpers.entity_platform import AddEntitiesCallback +from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType _LOGGER = logging.getLogger(__name__) @@ -51,7 +56,12 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( ) -def setup_platform(hass, config, add_entities, discovery_info=None): +def setup_platform( + hass: HomeAssistant, + config: ConfigType, + add_entities: AddEntitiesCallback, + discovery_info: DiscoveryInfoType | None = None, +) -> None: """Set up mFi sensors.""" host = config.get(CONF_HOST) username = config.get(CONF_USERNAME) @@ -67,7 +77,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None): ) except (FailedToLogin, requests.exceptions.ConnectionError) as ex: _LOGGER.error("Unable to connect to mFi: %s", str(ex)) - return False + return add_entities( MfiSensor(port, hass) diff --git a/homeassistant/components/mfi/switch.py b/homeassistant/components/mfi/switch.py index 150f81298cd..7564229d526 100644 --- a/homeassistant/components/mfi/switch.py +++ b/homeassistant/components/mfi/switch.py @@ -1,4 +1,6 @@ """Support for Ubiquiti mFi switches.""" +from __future__ import annotations + import logging from mficlient.client import FailedToLogin, MFiClient @@ -14,7 +16,10 @@ from homeassistant.const import ( CONF_USERNAME, CONF_VERIFY_SSL, ) +from homeassistant.core import HomeAssistant import homeassistant.helpers.config_validation as cv +from homeassistant.helpers.entity_platform import AddEntitiesCallback +from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType _LOGGER = logging.getLogger(__name__) @@ -35,7 +40,12 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( ) -def setup_platform(hass, config, add_entities, discovery_info=None): +def setup_platform( + hass: HomeAssistant, + config: ConfigType, + add_entities: AddEntitiesCallback, + discovery_info: DiscoveryInfoType | None = None, +) -> None: """Set up mFi sensors.""" host = config.get(CONF_HOST) username = config.get(CONF_USERNAME) @@ -51,7 +61,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None): ) except (FailedToLogin, requests.exceptions.ConnectionError) as ex: _LOGGER.error("Unable to connect to mFi: %s", str(ex)) - return False + return add_entities( MfiSwitch(port) diff --git a/homeassistant/components/mhz19/sensor.py b/homeassistant/components/mhz19/sensor.py index 60608e37cec..fc665369ba2 100644 --- a/homeassistant/components/mhz19/sensor.py +++ b/homeassistant/components/mhz19/sensor.py @@ -20,7 +20,10 @@ from homeassistant.const import ( CONF_NAME, TEMP_CELSIUS, ) +from homeassistant.core import HomeAssistant import homeassistant.helpers.config_validation as cv +from homeassistant.helpers.entity_platform import AddEntitiesCallback +from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType from homeassistant.util import Throttle _LOGGER = logging.getLogger(__name__) @@ -60,7 +63,12 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( ) -def setup_platform(hass, config, add_entities, discovery_info=None): +def setup_platform( + hass: HomeAssistant, + config: ConfigType, + add_entities: AddEntitiesCallback, + discovery_info: DiscoveryInfoType | None = None, +) -> None: """Set up the available CO2 sensors.""" try: @@ -71,7 +79,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None): config.get(CONF_SERIAL_DEVICE), err, ) - return False + return data = MHZClient(co2sensor, config.get(CONF_SERIAL_DEVICE)) name = config[CONF_NAME] diff --git a/homeassistant/components/mystrom/binary_sensor.py b/homeassistant/components/mystrom/binary_sensor.py index c33d6bd62b5..e86c4745ad5 100644 --- a/homeassistant/components/mystrom/binary_sensor.py +++ b/homeassistant/components/mystrom/binary_sensor.py @@ -1,20 +1,27 @@ """Support for the myStrom buttons.""" +from __future__ import annotations + from http import HTTPStatus import logging from homeassistant.components.binary_sensor import DOMAIN, BinarySensorEntity from homeassistant.components.http import HomeAssistantView -from homeassistant.core import callback +from homeassistant.core import HomeAssistant, callback +from homeassistant.helpers.entity_platform import AddEntitiesCallback +from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType _LOGGER = logging.getLogger(__name__) -async def async_setup_platform(hass, config, async_add_entities, discovery_info=None): +async def async_setup_platform( + hass: HomeAssistant, + config: ConfigType, + async_add_entities: AddEntitiesCallback, + discovery_info: DiscoveryInfoType | None = None, +) -> None: """Set up myStrom Binary Sensor.""" hass.http.register_view(MyStromView(async_add_entities)) - return True - class MyStromView(HomeAssistantView): """View to handle requests from myStrom buttons.""" diff --git a/homeassistant/components/oem/climate.py b/homeassistant/components/oem/climate.py index 49badaeb7b6..d5b4ffe5d71 100644 --- a/homeassistant/components/oem/climate.py +++ b/homeassistant/components/oem/climate.py @@ -1,4 +1,6 @@ """OpenEnergyMonitor Thermostat Support.""" +from __future__ import annotations + from oemthermostat import Thermostat import requests import voluptuous as vol @@ -22,7 +24,10 @@ from homeassistant.const import ( CONF_USERNAME, TEMP_CELSIUS, ) +from homeassistant.core import HomeAssistant import homeassistant.helpers.config_validation as cv +from homeassistant.helpers.entity_platform import AddEntitiesCallback +from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( { @@ -38,7 +43,12 @@ SUPPORT_FLAGS = SUPPORT_TARGET_TEMPERATURE SUPPORT_HVAC = [HVAC_MODE_AUTO, HVAC_MODE_HEAT, HVAC_MODE_OFF] -def setup_platform(hass, config, add_entities, discovery_info=None): +def setup_platform( + hass: HomeAssistant, + config: ConfigType, + add_entities: AddEntitiesCallback, + discovery_info: DiscoveryInfoType | None = None, +) -> None: """Set up the oemthermostat platform.""" name = config.get(CONF_NAME) host = config.get(CONF_HOST) @@ -49,7 +59,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None): try: therm = Thermostat(host, port=port, username=username, password=password) except (ValueError, AssertionError, requests.RequestException): - return False + return add_entities((ThermostatDevice(therm, name),), True) diff --git a/homeassistant/components/openexchangerates/sensor.py b/homeassistant/components/openexchangerates/sensor.py index 8c37346ebee..37879551ee4 100644 --- a/homeassistant/components/openexchangerates/sensor.py +++ b/homeassistant/components/openexchangerates/sensor.py @@ -1,4 +1,6 @@ """Support for openexchangerates.org exchange rates service.""" +from __future__ import annotations + from datetime import timedelta from http import HTTPStatus import logging @@ -14,7 +16,10 @@ from homeassistant.const import ( CONF_NAME, CONF_QUOTE, ) +from homeassistant.core import HomeAssistant import homeassistant.helpers.config_validation as cv +from homeassistant.helpers.entity_platform import AddEntitiesCallback +from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType from homeassistant.util import Throttle _LOGGER = logging.getLogger(__name__) @@ -37,7 +42,12 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( ) -def setup_platform(hass, config, add_entities, discovery_info=None): +def setup_platform( + hass: HomeAssistant, + config: ConfigType, + add_entities: AddEntitiesCallback, + discovery_info: DiscoveryInfoType | None = None, +) -> None: """Set up the Open Exchange Rates sensor.""" name = config.get(CONF_NAME) api_key = config.get(CONF_API_KEY) @@ -51,7 +61,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None): if response.status_code != HTTPStatus.OK: _LOGGER.error("Check your OpenExchangeRates API key") - return False + return rest.update() add_entities([OpenexchangeratesSensor(rest, name, quote)], True) diff --git a/homeassistant/components/openhome/media_player.py b/homeassistant/components/openhome/media_player.py index d369eeffd8b..1bda8b077a9 100644 --- a/homeassistant/components/openhome/media_player.py +++ b/homeassistant/components/openhome/media_player.py @@ -1,4 +1,6 @@ """Support for Openhome Devices.""" +from __future__ import annotations + import asyncio import functools import logging @@ -25,7 +27,10 @@ from homeassistant.components.media_player.const import ( SUPPORT_VOLUME_STEP, ) from homeassistant.const import STATE_IDLE, STATE_OFF, STATE_PAUSED, STATE_PLAYING +from homeassistant.core import HomeAssistant from homeassistant.helpers import config_validation as cv, entity_platform +from homeassistant.helpers.entity_platform import AddEntitiesCallback +from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType from .const import ATTR_PIN_INDEX, DATA_OPENHOME, SERVICE_INVOKE_PIN @@ -34,7 +39,12 @@ SUPPORT_OPENHOME = SUPPORT_SELECT_SOURCE | SUPPORT_TURN_OFF | SUPPORT_TURN_ON _LOGGER = logging.getLogger(__name__) -async def async_setup_platform(hass, config, async_add_entities, discovery_info=None): +async def async_setup_platform( + hass: HomeAssistant, + config: ConfigType, + async_add_entities: AddEntitiesCallback, + discovery_info: DiscoveryInfoType | None = None, +) -> None: """Set up the Openhome platform.""" if not discovery_info: @@ -51,7 +61,7 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info= # if device has already been discovered if device.uuid() in openhome_data: - return True + return entity = OpenhomeDevice(hass, device) diff --git a/homeassistant/components/otp/sensor.py b/homeassistant/components/otp/sensor.py index 45bedb6b499..726e9ed9e42 100644 --- a/homeassistant/components/otp/sensor.py +++ b/homeassistant/components/otp/sensor.py @@ -1,4 +1,6 @@ """Support for One-Time Password (OTP).""" +from __future__ import annotations + import time import pyotp @@ -6,8 +8,10 @@ import voluptuous as vol from homeassistant.components.sensor import PLATFORM_SCHEMA, SensorEntity from homeassistant.const import CONF_NAME, CONF_TOKEN -from homeassistant.core import callback +from homeassistant.core import HomeAssistant, callback import homeassistant.helpers.config_validation as cv +from homeassistant.helpers.entity_platform import AddEntitiesCallback +from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType DEFAULT_NAME = "OTP Sensor" @@ -23,13 +27,17 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( ) -async def async_setup_platform(hass, config, async_add_entities, discovery_info=None): +async def async_setup_platform( + hass: HomeAssistant, + config: ConfigType, + async_add_entities: AddEntitiesCallback, + discovery_info: DiscoveryInfoType | None = None, +) -> None: """Set up the OTP sensor.""" name = config.get(CONF_NAME) token = config.get(CONF_TOKEN) async_add_entities([TOTPSensor(name, token)], True) - return True # Only TOTP supported at the moment, HOTP might be added later diff --git a/homeassistant/components/owntracks/device_tracker.py b/homeassistant/components/owntracks/device_tracker.py index ca6f4f4a343..ae4d88df718 100644 --- a/homeassistant/components/owntracks/device_tracker.py +++ b/homeassistant/components/owntracks/device_tracker.py @@ -5,21 +5,25 @@ from homeassistant.components.device_tracker.const import ( DOMAIN, SOURCE_TYPE_GPS, ) +from homeassistant.config_entries import ConfigEntry from homeassistant.const import ( ATTR_BATTERY_LEVEL, ATTR_GPS_ACCURACY, ATTR_LATITUDE, ATTR_LONGITUDE, ) -from homeassistant.core import callback +from homeassistant.core import HomeAssistant, callback from homeassistant.helpers import device_registry from homeassistant.helpers.entity import DeviceInfo +from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.helpers.restore_state import RestoreEntity from . import DOMAIN as OT_DOMAIN -async def async_setup_entry(hass, entry, async_add_entities): +async def async_setup_entry( + hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback +) -> None: """Set up OwnTracks based off an entry.""" # Restore previously loaded devices dev_reg = await device_registry.async_get_registry(hass) @@ -52,8 +56,6 @@ async def async_setup_entry(hass, entry, async_add_entities): if entities: async_add_entities(entities) - return True - class OwnTracksEntity(TrackerEntity, RestoreEntity): """Represent a tracked device.""" diff --git a/homeassistant/components/pandora/media_player.py b/homeassistant/components/pandora/media_player.py index 902ccebb191..45e8f55a790 100644 --- a/homeassistant/components/pandora/media_player.py +++ b/homeassistant/components/pandora/media_player.py @@ -1,4 +1,6 @@ """Component for controlling Pandora stations through the pianobar client.""" +from __future__ import annotations + from datetime import timedelta import logging import os @@ -31,6 +33,9 @@ from homeassistant.const import ( STATE_PAUSED, STATE_PLAYING, ) +from homeassistant.core import HomeAssistant +from homeassistant.helpers.entity_platform import AddEntitiesCallback +from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType _LOGGER = logging.getLogger(__name__) @@ -57,10 +62,15 @@ CURRENT_SONG_PATTERN = re.compile(r'"(.*?)"\s+by\s+"(.*?)"\son\s+"(.*?)"', re.MU STATION_PATTERN = re.compile(r'Station\s"(.+?)"', re.MULTILINE) -def setup_platform(hass, config, add_entities, discovery_info=None): +def setup_platform( + hass: HomeAssistant, + config: ConfigType, + add_entities: AddEntitiesCallback, + discovery_info: DiscoveryInfoType | None = None, +) -> None: """Set up the Pandora media player platform.""" if not _pianobar_exists(): - return False + return pandora = PandoraMediaPlayer("Pandora") # Make sure we end the pandora subprocess on exit in case user doesn't diff --git a/homeassistant/components/piglow/light.py b/homeassistant/components/piglow/light.py index 1e6040f9d80..cf26c122bc7 100644 --- a/homeassistant/components/piglow/light.py +++ b/homeassistant/components/piglow/light.py @@ -1,4 +1,6 @@ """Support for Piglow LED's.""" +from __future__ import annotations + import logging import subprocess @@ -14,7 +16,10 @@ from homeassistant.components.light import ( LightEntity, ) from homeassistant.const import CONF_NAME +from homeassistant.core import HomeAssistant import homeassistant.helpers.config_validation as cv +from homeassistant.helpers.entity_platform import AddEntitiesCallback +from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType import homeassistant.util.color as color_util _LOGGER = logging.getLogger(__name__) @@ -28,11 +33,16 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( ) -def setup_platform(hass, config, add_entities, discovery_info=None): +def setup_platform( + hass: HomeAssistant, + config: ConfigType, + add_entities: AddEntitiesCallback, + discovery_info: DiscoveryInfoType | None = None, +) -> None: """Set up the Piglow Light platform.""" if subprocess.getoutput("i2cdetect -q -y 1 | grep -o 54") != "54": _LOGGER.error("A Piglow device was not found") - return False + return name = config.get(CONF_NAME) diff --git a/homeassistant/components/pocketcasts/sensor.py b/homeassistant/components/pocketcasts/sensor.py index f745bd562bd..9769ec47f3b 100644 --- a/homeassistant/components/pocketcasts/sensor.py +++ b/homeassistant/components/pocketcasts/sensor.py @@ -1,4 +1,6 @@ """Support for Pocket Casts.""" +from __future__ import annotations + from datetime import timedelta import logging @@ -7,7 +9,10 @@ import voluptuous as vol from homeassistant.components.sensor import PLATFORM_SCHEMA, SensorEntity from homeassistant.const import CONF_PASSWORD, CONF_USERNAME +from homeassistant.core import HomeAssistant import homeassistant.helpers.config_validation as cv +from homeassistant.helpers.entity_platform import AddEntitiesCallback +from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType _LOGGER = logging.getLogger(__name__) @@ -22,7 +27,12 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( ) -def setup_platform(hass, config, add_entities, discovery_info=None): +def setup_platform( + hass: HomeAssistant, + config: ConfigType, + add_entities: AddEntitiesCallback, + discovery_info: DiscoveryInfoType | None = None, +) -> None: """Set up the pocketcasts platform for sensors.""" username = config.get(CONF_USERNAME) password = config.get(CONF_PASSWORD) @@ -33,7 +43,6 @@ def setup_platform(hass, config, add_entities, discovery_info=None): add_entities([PocketCastsSensor(api)], True) except OSError as err: _LOGGER.error("Connection to server failed: %s", err) - return False class PocketCastsSensor(SensorEntity): diff --git a/homeassistant/components/pushbullet/sensor.py b/homeassistant/components/pushbullet/sensor.py index e58296e56fe..a3d9b549e95 100644 --- a/homeassistant/components/pushbullet/sensor.py +++ b/homeassistant/components/pushbullet/sensor.py @@ -13,7 +13,10 @@ from homeassistant.components.sensor import ( SensorEntityDescription, ) from homeassistant.const import CONF_API_KEY, CONF_MONITORED_CONDITIONS +from homeassistant.core import HomeAssistant import homeassistant.helpers.config_validation as cv +from homeassistant.helpers.entity_platform import AddEntitiesCallback +from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType _LOGGER = logging.getLogger(__name__) @@ -72,14 +75,19 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( ) -def setup_platform(hass, config, add_entities, discovery_info=None): +def setup_platform( + hass: HomeAssistant, + config: ConfigType, + add_entities: AddEntitiesCallback, + discovery_info: DiscoveryInfoType | None = None, +) -> None: """Set up the Pushbullet Sensor platform.""" try: pushbullet = PushBullet(config.get(CONF_API_KEY)) except InvalidKeyError: _LOGGER.error("Wrong API key for Pushbullet supplied") - return False + return pbprovider = PushBulletNotificationProvider(pushbullet)