diff --git a/homeassistant/components/alert/__init__.py b/homeassistant/components/alert/__init__.py index d7d495b55bf..9b3fb0f29c8 100644 --- a/homeassistant/components/alert/__init__.py +++ b/homeassistant/components/alert/__init__.py @@ -25,16 +25,17 @@ from homeassistant.const import ( STATE_OFF, STATE_ON, ) -from homeassistant.core import Event, HassJob, HomeAssistant +from homeassistant.core import HassJob, HomeAssistant import homeassistant.helpers.config_validation as cv from homeassistant.helpers.entity import Entity from homeassistant.helpers.entity_component import EntityComponent from homeassistant.helpers.event import ( + EventStateChangedData, async_track_point_in_time, async_track_state_change_event, ) from homeassistant.helpers.template import Template -from homeassistant.helpers.typing import ConfigType +from homeassistant.helpers.typing import ConfigType, EventType from homeassistant.util.dt import now from .const import ( @@ -196,11 +197,13 @@ class Alert(Entity): return STATE_ON return STATE_IDLE - async def watched_entity_change(self, event: Event) -> None: + async def watched_entity_change( + self, event: EventType[EventStateChangedData] + ) -> None: """Determine if the alert should start or stop.""" - if (to_state := event.data.get("new_state")) is None: + if (to_state := event.data["new_state"]) is None: return - LOGGER.debug("Watched entity (%s) has changed", event.data.get("entity_id")) + LOGGER.debug("Watched entity (%s) has changed", event.data["entity_id"]) if to_state.state == self._alert_state and not self._firing: await self.begin_alerting() if to_state.state != self._alert_state and self._firing: diff --git a/homeassistant/components/compensation/sensor.py b/homeassistant/components/compensation/sensor.py index 4d6ff95b810..6abc5d3d5d0 100644 --- a/homeassistant/components/compensation/sensor.py +++ b/homeassistant/components/compensation/sensor.py @@ -17,10 +17,13 @@ from homeassistant.const import ( CONF_UNIT_OF_MEASUREMENT, STATE_UNKNOWN, ) -from homeassistant.core import Event, HomeAssistant, State, callback +from homeassistant.core import HomeAssistant, State, callback from homeassistant.helpers.entity_platform import AddEntitiesCallback -from homeassistant.helpers.event import async_track_state_change_event -from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType +from homeassistant.helpers.event import ( + EventStateChangedData, + async_track_state_change_event, +) +from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType, EventType from .const import ( CONF_COMPENSATION, @@ -124,10 +127,12 @@ class CompensationSensor(SensorEntity): return ret @callback - def _async_compensation_sensor_state_listener(self, event: Event) -> None: + def _async_compensation_sensor_state_listener( + self, event: EventType[EventStateChangedData] + ) -> None: """Handle sensor state changes.""" new_state: State | None - if (new_state := event.data.get("new_state")) is None: + if (new_state := event.data["new_state"]) is None: return if self.native_unit_of_measurement is None and self._source_attribute is None: @@ -140,7 +145,7 @@ class CompensationSensor(SensorEntity): else: value = None if new_state.state == STATE_UNKNOWN else new_state.state try: - x_value = float(value) + x_value = float(value) # type: ignore[arg-type] if self._minimum is not None and x_value <= self._minimum[0]: y_value = self._minimum[1] elif self._maximum is not None and x_value >= self._maximum[0]: diff --git a/homeassistant/components/derivative/sensor.py b/homeassistant/components/derivative/sensor.py index af04da27406..de9f06a0e88 100644 --- a/homeassistant/components/derivative/sensor.py +++ b/homeassistant/components/derivative/sensor.py @@ -18,7 +18,7 @@ from homeassistant.const import ( STATE_UNKNOWN, UnitOfTime, ) -from homeassistant.core import Event, HomeAssistant, State, callback +from homeassistant.core import HomeAssistant, callback from homeassistant.helpers import ( config_validation as cv, device_registry as dr, @@ -26,8 +26,11 @@ from homeassistant.helpers import ( ) from homeassistant.helpers.entity import DeviceInfo from homeassistant.helpers.entity_platform import AddEntitiesCallback -from homeassistant.helpers.event import async_track_state_change_event -from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType +from homeassistant.helpers.event import ( + EventStateChangedData, + async_track_state_change_event, +) +from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType, EventType from .const import ( CONF_ROUND_DIGITS, @@ -210,14 +213,12 @@ class DerivativeSensor(RestoreSensor, SensorEntity): _LOGGER.warning("Could not restore last state: %s", err) @callback - def calc_derivative(event: Event) -> None: + def calc_derivative(event: EventType[EventStateChangedData]) -> None: """Handle the sensor state changes.""" - old_state: State | None - new_state: State | None if ( - (old_state := event.data.get("old_state")) is None + (old_state := event.data["old_state"]) is None or old_state.state in (STATE_UNKNOWN, STATE_UNAVAILABLE) - or (new_state := event.data.get("new_state")) is None + or (new_state := event.data["new_state"]) is None or new_state.state in (STATE_UNKNOWN, STATE_UNAVAILABLE) ): return diff --git a/homeassistant/components/emulated_hue/hue_api.py b/homeassistant/components/emulated_hue/hue_api.py index 654d0bce13b..f0a54ba0ea9 100644 --- a/homeassistant/components/emulated_hue/hue_api.py +++ b/homeassistant/components/emulated_hue/hue_api.py @@ -63,7 +63,11 @@ from homeassistant.const import ( STATE_UNAVAILABLE, ) from homeassistant.core import State -from homeassistant.helpers.event import async_track_state_change_event +from homeassistant.helpers.event import ( + EventStateChangedData, + async_track_state_change_event, +) +from homeassistant.helpers.typing import EventType from homeassistant.util.json import json_loads from homeassistant.util.network import is_local @@ -888,7 +892,7 @@ async def wait_for_state_change_or_timeout( ev = asyncio.Event() @core.callback - def _async_event_changed(event: core.Event) -> None: + def _async_event_changed(event: EventType[EventStateChangedData]) -> None: ev.set() unsub = async_track_state_change_event(hass, [entity_id], _async_event_changed) diff --git a/homeassistant/components/esphome/manager.py b/homeassistant/components/esphome/manager.py index 345be0c4b6d..71dc02acf02 100644 --- a/homeassistant/components/esphome/manager.py +++ b/homeassistant/components/esphome/manager.py @@ -34,7 +34,10 @@ from homeassistant.helpers import template import homeassistant.helpers.config_validation as cv import homeassistant.helpers.device_registry as dr from homeassistant.helpers.device_registry import format_mac -from homeassistant.helpers.event import async_track_state_change_event +from homeassistant.helpers.event import ( + EventStateChangedData, + async_track_state_change_event, +) from homeassistant.helpers.issue_registry import ( IssueSeverity, async_create_issue, @@ -42,6 +45,7 @@ from homeassistant.helpers.issue_registry import ( ) from homeassistant.helpers.service import async_set_service_schema from homeassistant.helpers.template import Template +from homeassistant.helpers.typing import EventType from .bluetooth import async_connect_scanner from .const import ( @@ -270,11 +274,13 @@ class ESPHomeManager: """Subscribe and forward states for requested entities.""" hass = self.hass - async def send_home_assistant_state_event(event: Event) -> None: + async def send_home_assistant_state_event( + event: EventType[EventStateChangedData], + ) -> None: """Forward Home Assistant states updates to ESPHome.""" event_data = event.data - new_state: State | None = event_data.get("new_state") - old_state: State | None = event_data.get("old_state") + new_state = event_data["new_state"] + old_state = event_data["old_state"] if new_state is None or old_state is None: return diff --git a/homeassistant/components/filter/sensor.py b/homeassistant/components/filter/sensor.py index a1470baa4d2..c240d04ec1a 100644 --- a/homeassistant/components/filter/sensor.py +++ b/homeassistant/components/filter/sensor.py @@ -34,13 +34,21 @@ from homeassistant.const import ( STATE_UNAVAILABLE, STATE_UNKNOWN, ) -from homeassistant.core import Event, HomeAssistant, State, callback +from homeassistant.core import HomeAssistant, State, callback import homeassistant.helpers.config_validation as cv from homeassistant.helpers.entity_platform import AddEntitiesCallback -from homeassistant.helpers.event import async_track_state_change_event +from homeassistant.helpers.event import ( + EventStateChangedData, + async_track_state_change_event, +) from homeassistant.helpers.reload import async_setup_reload_service from homeassistant.helpers.start import async_at_started -from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType, StateType +from homeassistant.helpers.typing import ( + ConfigType, + DiscoveryInfoType, + EventType, + StateType, +) from homeassistant.util.decorator import Registry import homeassistant.util.dt as dt_util @@ -217,10 +225,12 @@ class SensorFilter(SensorEntity): self._attr_extra_state_attributes = {ATTR_ENTITY_ID: entity_id} @callback - def _update_filter_sensor_state_event(self, event: Event) -> None: + def _update_filter_sensor_state_event( + self, event: EventType[EventStateChangedData] + ) -> None: """Handle device state changes.""" _LOGGER.debug("Update filter on event: %s", event) - self._update_filter_sensor_state(event.data.get("new_state")) + self._update_filter_sensor_state(event.data["new_state"]) @callback def _update_filter_sensor_state( diff --git a/homeassistant/components/generic_thermostat/climate.py b/homeassistant/components/generic_thermostat/climate.py index e3eed8866c8..d3d80747127 100644 --- a/homeassistant/components/generic_thermostat/climate.py +++ b/homeassistant/components/generic_thermostat/climate.py @@ -37,18 +37,25 @@ from homeassistant.const import ( STATE_UNAVAILABLE, STATE_UNKNOWN, ) -from homeassistant.core import DOMAIN as HA_DOMAIN, CoreState, HomeAssistant, callback +from homeassistant.core import ( + DOMAIN as HA_DOMAIN, + CoreState, + HomeAssistant, + State, + callback, +) from homeassistant.exceptions import ConditionError from homeassistant.helpers import condition import homeassistant.helpers.config_validation as cv from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.helpers.event import ( + EventStateChangedData, async_track_state_change_event, async_track_time_interval, ) from homeassistant.helpers.reload import async_setup_reload_service from homeassistant.helpers.restore_state import RestoreEntity -from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType +from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType, EventType from . import DOMAIN, PLATFORMS @@ -395,9 +402,11 @@ class GenericThermostat(ClimateEntity, RestoreEntity): # Get default temp from super class return super().max_temp - async def _async_sensor_changed(self, event): + async def _async_sensor_changed( + self, event: EventType[EventStateChangedData] + ) -> None: """Handle temperature changes.""" - new_state = event.data.get("new_state") + new_state = event.data["new_state"] if new_state is None or new_state.state in (STATE_UNAVAILABLE, STATE_UNKNOWN): return @@ -418,10 +427,10 @@ class GenericThermostat(ClimateEntity, RestoreEntity): await self._async_heater_turn_off() @callback - def _async_switch_changed(self, event): + def _async_switch_changed(self, event: EventType[EventStateChangedData]) -> None: """Handle heater switch state changes.""" - new_state = event.data.get("new_state") - old_state = event.data.get("old_state") + new_state = event.data["new_state"] + old_state = event.data["old_state"] if new_state is None: return if old_state is None: @@ -429,7 +438,7 @@ class GenericThermostat(ClimateEntity, RestoreEntity): self.async_write_ha_state() @callback - def _async_update_temp(self, state): + def _async_update_temp(self, state: State) -> None: """Update thermostat with latest state from sensor.""" try: cur_temp = float(state.state) diff --git a/homeassistant/components/history_stats/coordinator.py b/homeassistant/components/history_stats/coordinator.py index 7d44da9f5f6..6d4d6e55fa9 100644 --- a/homeassistant/components/history_stats/coordinator.py +++ b/homeassistant/components/history_stats/coordinator.py @@ -5,10 +5,14 @@ from datetime import timedelta import logging from typing import Any -from homeassistant.core import CALLBACK_TYPE, Event, HomeAssistant, callback +from homeassistant.core import CALLBACK_TYPE, HomeAssistant, callback from homeassistant.exceptions import TemplateError -from homeassistant.helpers.event import async_track_state_change_event +from homeassistant.helpers.event import ( + EventStateChangedData, + async_track_state_change_event, +) from homeassistant.helpers.start import async_at_start +from homeassistant.helpers.typing import EventType from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed from .data import HistoryStats, HistoryStatsState @@ -82,7 +86,9 @@ class HistoryStatsUpdateCoordinator(DataUpdateCoordinator[HistoryStatsState]): self.hass, [self._history_stats.entity_id], self._async_update_from_event ) - async def _async_update_from_event(self, event: Event) -> None: + async def _async_update_from_event( + self, event: EventType[EventStateChangedData] + ) -> None: """Process an update from an event.""" self.async_set_updated_data(await self._history_stats.async_update(event))