From 6116f11e6c56c356c995602a8c0029e32047f1c8 Mon Sep 17 00:00:00 2001 From: Marc Mueller <30130371+cdce8p@users.noreply.github.com> Date: Mon, 8 Apr 2024 20:25:34 +0200 Subject: [PATCH] Use EventType for system events (#115190) --- homeassistant/components/api/__init__.py | 3 ++- homeassistant/components/homeassistant/logbook.py | 7 +++++-- homeassistant/const.py | 13 ++++++++----- homeassistant/helpers/start.py | 5 ++++- homeassistant/helpers/typing.py | 3 ++- 5 files changed, 21 insertions(+), 10 deletions(-) diff --git a/homeassistant/components/api/__init__.py b/homeassistant/components/api/__init__.py index 2a2b55429dd..489475e9dd7 100644 --- a/homeassistant/components/api/__init__.py +++ b/homeassistant/components/api/__init__.py @@ -49,6 +49,7 @@ from homeassistant.helpers import config_validation as cv, template from homeassistant.helpers.json import json_dumps, json_fragment from homeassistant.helpers.service import async_get_all_descriptions from homeassistant.helpers.typing import ConfigType +from homeassistant.util.event_type import EventType from homeassistant.util.json import json_loads _LOGGER = logging.getLogger(__name__) @@ -134,7 +135,7 @@ class APIEventStream(HomeAssistantView): stop_obj = object() to_write: asyncio.Queue[object | str] = asyncio.Queue() - restrict: list[str] | None = None + restrict: list[EventType[Any] | str] | None = None if restrict_str := request.query.get("restrict"): restrict = [*restrict_str.split(","), EVENT_HOMEASSISTANT_STOP] diff --git a/homeassistant/components/homeassistant/logbook.py b/homeassistant/components/homeassistant/logbook.py index 1c67075b671..92a91dbd5cb 100644 --- a/homeassistant/components/homeassistant/logbook.py +++ b/homeassistant/components/homeassistant/logbook.py @@ -12,6 +12,7 @@ from homeassistant.components.logbook import ( ) from homeassistant.const import EVENT_HOMEASSISTANT_START, EVENT_HOMEASSISTANT_STOP from homeassistant.core import Event, HomeAssistant, callback +from homeassistant.helpers.typing import NoEventData from homeassistant.util.event_type import EventType from . import DOMAIN @@ -25,12 +26,14 @@ EVENT_TO_NAME: dict[EventType[Any] | str, str] = { @callback def async_describe_events( hass: HomeAssistant, - async_describe_event: Callable[[str, str, Callable[[Event], dict[str, str]]], None], + async_describe_event: Callable[ + [str, EventType[NoEventData] | str, Callable[[Event], dict[str, str]]], None + ], ) -> None: """Describe logbook events.""" @callback - def async_describe_hass_event(event: Event) -> dict[str, str]: + def async_describe_hass_event(event: Event[NoEventData]) -> dict[str, str]: """Describe homeassistant logbook event.""" return { LOGBOOK_ENTRY_NAME: "Home Assistant", diff --git a/homeassistant/const.py b/homeassistant/const.py index a9dbfef5eab..58a1c92ea72 100644 --- a/homeassistant/const.py +++ b/homeassistant/const.py @@ -18,6 +18,7 @@ from .util.signal_type import SignalType if TYPE_CHECKING: from .core import EventStateChangedData + from .helpers.typing import NoEventData APPLICATION_NAME: Final = "HomeAssistant" MAJOR_VERSION: Final = 2024 @@ -302,11 +303,13 @@ CONF_ZONE: Final = "zone" EVENT_CALL_SERVICE: Final = "call_service" EVENT_COMPONENT_LOADED: Final = "component_loaded" EVENT_CORE_CONFIG_UPDATE: Final = "core_config_updated" -EVENT_HOMEASSISTANT_CLOSE: Final = "homeassistant_close" -EVENT_HOMEASSISTANT_START: Final = "homeassistant_start" -EVENT_HOMEASSISTANT_STARTED: Final = "homeassistant_started" -EVENT_HOMEASSISTANT_STOP: Final = "homeassistant_stop" -EVENT_HOMEASSISTANT_FINAL_WRITE: Final = "homeassistant_final_write" +EVENT_HOMEASSISTANT_CLOSE: EventType[NoEventData] = EventType("homeassistant_close") +EVENT_HOMEASSISTANT_START: EventType[NoEventData] = EventType("homeassistant_start") +EVENT_HOMEASSISTANT_STARTED: EventType[NoEventData] = EventType("homeassistant_started") +EVENT_HOMEASSISTANT_STOP: EventType[NoEventData] = EventType("homeassistant_stop") +EVENT_HOMEASSISTANT_FINAL_WRITE: EventType[NoEventData] = EventType( + "homeassistant_final_write" +) EVENT_LOGBOOK_ENTRY: Final = "logbook_entry" EVENT_LOGGING_CHANGED: Final = "logging_changed" EVENT_SERVICE_REGISTERED: Final = "service_registered" diff --git a/homeassistant/helpers/start.py b/homeassistant/helpers/start.py index 4d07ec213bb..839514cbf2d 100644 --- a/homeassistant/helpers/start.py +++ b/homeassistant/helpers/start.py @@ -14,13 +14,16 @@ from homeassistant.core import ( HomeAssistant, callback, ) +from homeassistant.util.event_type import EventType + +from .typing import NoEventData @callback def _async_at_core_state( hass: HomeAssistant, at_start_cb: Callable[[HomeAssistant], Coroutine[Any, Any, None] | None], - event_type: str, + event_type: EventType[NoEventData], check_state: Callable[[HomeAssistant], bool], ) -> CALLBACK_TYPE: """Execute a job at_start_cb when Home Assistant has the wanted state. diff --git a/homeassistant/helpers/typing.py b/homeassistant/helpers/typing.py index 9bc34a09066..cf97e92d6be 100644 --- a/homeassistant/helpers/typing.py +++ b/homeassistant/helpers/typing.py @@ -3,7 +3,7 @@ from collections.abc import Mapping from enum import Enum from functools import partial -from typing import Any +from typing import Any, Never import homeassistant.core @@ -20,6 +20,7 @@ DiscoveryInfoType = dict[str, Any] ServiceDataType = dict[str, Any] StateType = str | int | float | None TemplateVarsType = Mapping[str, Any] | None +NoEventData = Mapping[str, Never] # Custom type for recorder Queries QueryType = Any