1
mirror of https://github.com/home-assistant/core synced 2024-09-03 08:14:07 +02:00

Adjust device_automation type hints in hue (#72144)

This commit is contained in:
epenet 2022-05-23 14:59:12 +02:00 committed by GitHub
parent caa2412103
commit ee5f1b1577
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 43 additions and 19 deletions

View File

@ -1,7 +1,7 @@
"""Provides device automations for Philips Hue events."""
from __future__ import annotations
from typing import TYPE_CHECKING
from typing import TYPE_CHECKING, Any
from homeassistant.components.device_automation.exceptions import (
InvalidDeviceAutomationConfig,
@ -33,7 +33,9 @@ if TYPE_CHECKING:
from .bridge import HueBridge
async def async_validate_trigger_config(hass: "HomeAssistant", config: ConfigType):
async def async_validate_trigger_config(
hass: HomeAssistant, config: ConfigType
) -> ConfigType:
"""Validate config."""
if DOMAIN not in hass.data:
# happens at startup
@ -51,13 +53,14 @@ async def async_validate_trigger_config(hass: "HomeAssistant", config: ConfigTyp
if bridge.api_version == 1:
return await async_validate_trigger_config_v1(bridge, device_entry, config)
return await async_validate_trigger_config_v2(bridge, device_entry, config)
return config
async def async_attach_trigger(
hass: "HomeAssistant",
hass: HomeAssistant,
config: ConfigType,
action: "AutomationActionType",
automation_info: "AutomationTriggerInfo",
action: AutomationActionType,
automation_info: AutomationTriggerInfo,
) -> CALLBACK_TYPE:
"""Listen for state changes based on configuration."""
device_id = config[CONF_DEVICE_ID]
@ -82,7 +85,9 @@ async def async_attach_trigger(
)
async def async_get_triggers(hass: "HomeAssistant", device_id: str):
async def async_get_triggers(
hass: HomeAssistant, device_id: str
) -> list[dict[str, Any]]:
"""Get device triggers for given (hass) device id."""
if DOMAIN not in hass.data:
return []
@ -101,3 +106,4 @@ async def async_get_triggers(hass: "HomeAssistant", device_id: str):
if bridge.api_version == 1:
return async_get_triggers_v1(bridge, device_entry)
return async_get_triggers_v2(bridge, device_entry)
return []

View File

@ -3,6 +3,10 @@ from typing import TYPE_CHECKING
import voluptuous as vol
from homeassistant.components.automation import (
AutomationActionType,
AutomationTriggerInfo,
)
from homeassistant.components.device_automation import DEVICE_TRIGGER_BASE_SCHEMA
from homeassistant.components.device_automation.exceptions import (
InvalidDeviceAutomationConfig,
@ -16,8 +20,9 @@ from homeassistant.const import (
CONF_TYPE,
CONF_UNIQUE_ID,
)
from homeassistant.core import callback
from homeassistant.core import CALLBACK_TYPE, callback
from homeassistant.helpers.device_registry import DeviceEntry
from homeassistant.helpers.typing import ConfigType
from ..const import ATTR_HUE_EVENT, CONF_SUBTYPE, DOMAIN
@ -95,7 +100,7 @@ HUE_FOHSWITCH_REMOTE = {
}
REMOTES = {
REMOTES: dict[str, dict[tuple[str, str], dict[str, int]]] = {
HUE_DIMMER_REMOTE_MODEL: HUE_DIMMER_REMOTE,
HUE_TAP_REMOTE_MODEL: HUE_TAP_REMOTE,
HUE_BUTTON_REMOTE_MODEL: HUE_BUTTON_REMOTE,
@ -114,7 +119,9 @@ def _get_hue_event_from_device_id(hass, device_id):
return None
async def async_validate_trigger_config(bridge, device_entry, config):
async def async_validate_trigger_config(
bridge: "HueBridge", device_entry: DeviceEntry, config: ConfigType
) -> ConfigType:
"""Validate config."""
config = TRIGGER_SCHEMA(config)
trigger = (config[CONF_TYPE], config[CONF_SUBTYPE])
@ -137,7 +144,13 @@ async def async_validate_trigger_config(bridge, device_entry, config):
return config
async def async_attach_trigger(bridge, device_entry, config, action, automation_info):
async def async_attach_trigger(
bridge: "HueBridge",
device_entry: DeviceEntry,
config: ConfigType,
action: AutomationActionType,
automation_info: AutomationTriggerInfo,
) -> CALLBACK_TYPE:
"""Listen for state changes based on configuration."""
hass = bridge.hass
@ -145,9 +158,10 @@ async def async_attach_trigger(bridge, device_entry, config, action, automation_
if hue_event is None:
raise InvalidDeviceAutomationConfig
trigger = (config[CONF_TYPE], config[CONF_SUBTYPE])
trigger_key: tuple[str, str] = (config[CONF_TYPE], config[CONF_SUBTYPE])
trigger = REMOTES[device_entry.model][trigger]
assert device_entry.model
trigger = REMOTES[device_entry.model][trigger_key]
event_config = {
event_trigger.CONF_PLATFORM: "event",
@ -162,7 +176,9 @@ async def async_attach_trigger(bridge, device_entry, config, action, automation_
@callback
def async_get_triggers(bridge: "HueBridge", device: DeviceEntry):
def async_get_triggers(
bridge: "HueBridge", device: DeviceEntry
) -> list[dict[str, str]]:
"""Return device triggers for device on `v1` bridge.
Make sure device is a supported remote model.
@ -170,7 +186,7 @@ def async_get_triggers(bridge: "HueBridge", device: DeviceEntry):
Generate device trigger list.
"""
if device.model not in REMOTES:
return
return []
triggers = []
for trigger, subtype in REMOTES[device.model]:

View File

@ -1,7 +1,7 @@
"""Provides device automations for Philips Hue events."""
from __future__ import annotations
from typing import TYPE_CHECKING
from typing import TYPE_CHECKING, Any
from aiohue.v2.models.button import ButtonEvent
from aiohue.v2.models.resource import ResourceTypes
@ -86,7 +86,7 @@ async def async_validate_trigger_config(
bridge: "HueBridge",
device_entry: DeviceEntry,
config: ConfigType,
):
) -> ConfigType:
"""Validate config."""
config = TRIGGER_SCHEMA(config)
check_invalid_device_trigger(bridge, config, device_entry)
@ -97,8 +97,8 @@ async def async_attach_trigger(
bridge: "HueBridge",
device_entry: DeviceEntry,
config: ConfigType,
action: "AutomationActionType",
automation_info: "AutomationTriggerInfo",
action: AutomationActionType,
automation_info: AutomationTriggerInfo,
) -> CALLBACK_TYPE:
"""Listen for state changes based on configuration."""
hass = bridge.hass
@ -120,7 +120,9 @@ async def async_attach_trigger(
@callback
def async_get_triggers(bridge: HueBridge, device_entry: DeviceEntry):
def async_get_triggers(
bridge: HueBridge, device_entry: DeviceEntry
) -> list[dict[str, Any]]:
"""Return device triggers for device on `v2` bridge."""
api: HueBridgeV2 = bridge.api