diff --git a/homeassistant/components/history_stats/data.py b/homeassistant/components/history_stats/data.py index af27766f514..69e56ba0333 100644 --- a/homeassistant/components/history_stats/data.py +++ b/homeassistant/components/history_stats/data.py @@ -5,8 +5,10 @@ from dataclasses import dataclass import datetime from homeassistant.components.recorder import get_instance, history -from homeassistant.core import Event, HomeAssistant, State +from homeassistant.core import HomeAssistant, State +from homeassistant.helpers.event import EventStateChangedData from homeassistant.helpers.template import Template +from homeassistant.helpers.typing import EventType import homeassistant.util.dt as dt_util from .helpers import async_calculate_period, floored_timestamp @@ -55,7 +57,9 @@ class HistoryStats: self._start = start self._end = end - async def async_update(self, event: Event | None) -> HistoryStatsState: + async def async_update( + self, event: EventType[EventStateChangedData] | None + ) -> HistoryStatsState: """Update the stats at a given time.""" # Get previous values of start and end previous_period_start, previous_period_end = self._period @@ -104,8 +108,7 @@ class HistoryStats: ) ): new_data = False - if event and event.data["new_state"] is not None: - new_state: State = event.data["new_state"] + if event and (new_state := event.data["new_state"]) is not None: if ( current_period_start_timestamp <= floored_timestamp(new_state.last_changed) diff --git a/homeassistant/components/homeassistant/triggers/state.py b/homeassistant/components/homeassistant/triggers/state.py index ce2d5e64743..eec66a560a5 100644 --- a/homeassistant/components/homeassistant/triggers/state.py +++ b/homeassistant/components/homeassistant/triggers/state.py @@ -129,7 +129,7 @@ async def async_attach_trigger( _variables = trigger_info["variables"] or {} @callback - def state_automation_listener(event: EventType[EventStateChangedData]): + def state_automation_listener(event: EventType[EventStateChangedData]) -> None: """Listen for state changes and calls action.""" entity = event.data["entity_id"] from_s = event.data["old_state"] diff --git a/homeassistant/components/homekit/util.py b/homeassistant/components/homekit/util.py index 0e3bcbfee86..8287c2b7845 100644 --- a/homeassistant/components/homekit/util.py +++ b/homeassistant/components/homekit/util.py @@ -37,9 +37,11 @@ from homeassistant.const import ( CONF_TYPE, UnitOfTemperature, ) -from homeassistant.core import Event, HomeAssistant, State, callback, split_entity_id +from homeassistant.core import HomeAssistant, State, callback, split_entity_id import homeassistant.helpers.config_validation as cv +from homeassistant.helpers.event import EventStateChangedData from homeassistant.helpers.storage import STORAGE_DIR +from homeassistant.helpers.typing import EventType from homeassistant.util.unit_conversion import TemperatureConverter from .const import ( @@ -619,9 +621,9 @@ def state_needs_accessory_mode(state: State) -> bool: ) -def state_changed_event_is_same_state(event: Event) -> bool: +def state_changed_event_is_same_state(event: EventType[EventStateChangedData]) -> bool: """Check if a state changed event is the same state.""" event_data = event.data - old_state: State | None = event_data.get("old_state") - new_state: State | None = event_data.get("new_state") + old_state = event_data["old_state"] + new_state = event_data["new_state"] return bool(new_state and old_state and new_state.state == old_state.state) diff --git a/homeassistant/components/plant/__init__.py b/homeassistant/components/plant/__init__.py index ed88e50b932..28cdece0b02 100644 --- a/homeassistant/components/plant/__init__.py +++ b/homeassistant/components/plant/__init__.py @@ -179,7 +179,7 @@ class Plant(Entity): self._brightness_history = DailyHistory(self._conf_check_days) @callback - def _state_changed_event(self, event: EventType[EventStateChangedData]): + def _state_changed_event(self, event: EventType[EventStateChangedData]) -> None: """Sensor state change event.""" self.state_changed(event.data["entity_id"], event.data["new_state"]) diff --git a/homeassistant/components/purpleair/config_flow.py b/homeassistant/components/purpleair/config_flow.py index c7988c02e6a..3daa6f96fdf 100644 --- a/homeassistant/components/purpleair/config_flow.py +++ b/homeassistant/components/purpleair/config_flow.py @@ -15,7 +15,7 @@ import voluptuous as vol from homeassistant import config_entries from homeassistant.config_entries import ConfigEntry from homeassistant.const import CONF_API_KEY, CONF_LATITUDE, CONF_LONGITUDE -from homeassistant.core import Event, HomeAssistant, callback +from homeassistant.core import HomeAssistant, callback from homeassistant.data_entry_flow import FlowResult from homeassistant.helpers import ( aiohttp_client, @@ -23,13 +23,17 @@ from homeassistant.helpers import ( device_registry as dr, entity_registry as er, ) -from homeassistant.helpers.event import async_track_state_change_event +from homeassistant.helpers.event import ( + EventStateChangedData, + async_track_state_change_event, +) from homeassistant.helpers.selector import ( SelectOptionDict, SelectSelector, SelectSelectorConfig, SelectSelectorMode, ) +from homeassistant.helpers.typing import EventType from .const import CONF_SENSOR_INDICES, CONF_SHOW_ON_MAP, DOMAIN, LOGGER @@ -420,7 +424,9 @@ class PurpleAirOptionsFlowHandler(config_entries.OptionsFlow): device_entities_removed_event = asyncio.Event() @callback - def async_device_entity_state_changed(_: Event) -> None: + def async_device_entity_state_changed( + _: EventType[EventStateChangedData], + ) -> None: """Listen and respond when all device entities are removed.""" if all( self.hass.states.get(entity_entry.entity_id) is None diff --git a/homeassistant/components/switch_as_x/cover.py b/homeassistant/components/switch_as_x/cover.py index 7df3b177217..b7fe0fbf364 100644 --- a/homeassistant/components/switch_as_x/cover.py +++ b/homeassistant/components/switch_as_x/cover.py @@ -17,9 +17,11 @@ from homeassistant.const import ( SERVICE_TURN_ON, STATE_ON, ) -from homeassistant.core import Event, HomeAssistant, callback +from homeassistant.core import HomeAssistant, callback from homeassistant.helpers import entity_registry as er from homeassistant.helpers.entity_platform import AddEntitiesCallback +from homeassistant.helpers.event import EventStateChangedData +from homeassistant.helpers.typing import EventType from .entity import BaseEntity @@ -74,7 +76,9 @@ class CoverSwitch(BaseEntity, CoverEntity): ) @callback - def async_state_changed_listener(self, event: Event | None = None) -> None: + def async_state_changed_listener( + self, event: EventType[EventStateChangedData] | None = None + ) -> None: """Handle child updates.""" super().async_state_changed_listener(event) if ( diff --git a/homeassistant/components/switch_as_x/entity.py b/homeassistant/components/switch_as_x/entity.py index 36f8a651f06..3718c4ebe99 100644 --- a/homeassistant/components/switch_as_x/entity.py +++ b/homeassistant/components/switch_as_x/entity.py @@ -12,7 +12,7 @@ from homeassistant.const import ( STATE_ON, STATE_UNAVAILABLE, ) -from homeassistant.core import Event, HomeAssistant, callback +from homeassistant.core import HomeAssistant, callback from homeassistant.helpers import device_registry as dr, entity_registry as er from homeassistant.helpers.entity import DeviceInfo, Entity, ToggleEntity from homeassistant.helpers.event import ( @@ -67,7 +67,9 @@ class BaseEntity(Entity): ) @callback - def async_state_changed_listener(self, event: Event | None = None) -> None: + def async_state_changed_listener( + self, event: EventType[EventStateChangedData] | None = None + ) -> None: """Handle child updates.""" if ( state := self.hass.states.get(self._switch_entity_id) @@ -163,7 +165,9 @@ class BaseToggleEntity(BaseEntity, ToggleEntity): ) @callback - def async_state_changed_listener(self, event: Event | None = None) -> None: + def async_state_changed_listener( + self, event: EventType[EventStateChangedData] | None = None + ) -> None: """Handle child updates.""" super().async_state_changed_listener(event) if ( diff --git a/homeassistant/components/switch_as_x/lock.py b/homeassistant/components/switch_as_x/lock.py index 9778caf8e60..9e7606865a1 100644 --- a/homeassistant/components/switch_as_x/lock.py +++ b/homeassistant/components/switch_as_x/lock.py @@ -13,9 +13,11 @@ from homeassistant.const import ( SERVICE_TURN_ON, STATE_ON, ) -from homeassistant.core import Event, HomeAssistant, callback +from homeassistant.core import HomeAssistant, callback from homeassistant.helpers import entity_registry as er from homeassistant.helpers.entity_platform import AddEntitiesCallback +from homeassistant.helpers.event import EventStateChangedData +from homeassistant.helpers.typing import EventType from .entity import BaseEntity @@ -68,7 +70,9 @@ class LockSwitch(BaseEntity, LockEntity): ) @callback - def async_state_changed_listener(self, event: Event | None = None) -> None: + def async_state_changed_listener( + self, event: EventType[EventStateChangedData] | None = None + ) -> None: """Handle child updates.""" super().async_state_changed_listener(event) if ( diff --git a/homeassistant/helpers/template_entity.py b/homeassistant/helpers/template_entity.py index e60c58456d9..b7be7c2c9a6 100644 --- a/homeassistant/helpers/template_entity.py +++ b/homeassistant/helpers/template_entity.py @@ -26,7 +26,7 @@ from homeassistant.const import ( EVENT_HOMEASSISTANT_START, STATE_UNKNOWN, ) -from homeassistant.core import Context, CoreState, Event, HomeAssistant, State, callback +from homeassistant.core import Context, CoreState, HomeAssistant, State, callback from homeassistant.exceptions import TemplateError from homeassistant.util.json import JSON_DECODE_EXCEPTIONS, json_loads @@ -131,7 +131,7 @@ class _TemplateAttribute: @callback def handle_result( self, - event: Event | None, + event: EventType[EventStateChangedData] | None, template: Template, last_result: str | None | TemplateError, result: str | TemplateError, diff --git a/tests/helpers/test_event.py b/tests/helpers/test_event.py index 2b77da09778..9436226b335 100644 --- a/tests/helpers/test_event.py +++ b/tests/helpers/test_event.py @@ -544,14 +544,14 @@ async def test_async_track_state_added_domain(hass: HomeAssistant) -> None: multiple_entity_id_tracker = [] @ha.callback - def single_run_callback(event: EventType[EventStateChangedData]): + def single_run_callback(event: EventType[EventStateChangedData]) -> None: old_state = event.data["old_state"] new_state = event.data["new_state"] single_entity_id_tracker.append((old_state, new_state)) @ha.callback - def multiple_run_callback(event: EventType[EventStateChangedData]): + def multiple_run_callback(event: EventType[EventStateChangedData]) -> None: old_state = event.data["old_state"] new_state = event.data["new_state"] @@ -656,14 +656,14 @@ async def test_async_track_state_removed_domain(hass: HomeAssistant) -> None: multiple_entity_id_tracker = [] @ha.callback - def single_run_callback(event: EventType[EventStateChangedData]): + def single_run_callback(event: EventType[EventStateChangedData]) -> None: old_state = event.data["old_state"] new_state = event.data["new_state"] single_entity_id_tracker.append((old_state, new_state)) @ha.callback - def multiple_run_callback(event: EventType[EventStateChangedData]): + def multiple_run_callback(event: EventType[EventStateChangedData]) -> None: old_state = event.data["old_state"] new_state = event.data["new_state"] @@ -738,14 +738,14 @@ async def test_async_track_state_removed_domain_match_all(hass: HomeAssistant) - match_all_entity_id_tracker = [] @ha.callback - def single_run_callback(event: EventType[EventStateChangedData]): + def single_run_callback(event: EventType[EventStateChangedData]) -> None: old_state = event.data["old_state"] new_state = event.data["new_state"] single_entity_id_tracker.append((old_state, new_state)) @ha.callback - def match_all_run_callback(event: EventType[EventStateChangedData]): + def match_all_run_callback(event: EventType[EventStateChangedData]) -> None: old_state = event.data["old_state"] new_state = event.data["new_state"]