Ensure service calls are typed [h-i] (#62914)

Co-authored-by: epenet <epenet@users.noreply.github.com>
This commit is contained in:
epenet 2021-12-28 14:19:14 +01:00 committed by GitHub
parent 7b5a159899
commit fb272f58fb
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
14 changed files with 65 additions and 53 deletions

View file

@ -14,7 +14,7 @@ from homeassistant.const import (
CONF_URL, CONF_URL,
Platform, Platform,
) )
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant, ServiceCall
from homeassistant.helpers import config_validation as cv from homeassistant.helpers import config_validation as cv
from homeassistant.helpers.aiohttp_client import async_get_clientsession from homeassistant.helpers.aiohttp_client import async_get_clientsession
from homeassistant.helpers.typing import ConfigType from homeassistant.helpers.typing import ConfigType
@ -111,7 +111,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
def __call__(self, **kwargs): def __call__(self, **kwargs):
return super().__call__(websession, **kwargs) return super().__call__(websession, **kwargs)
async def handle_api_call(call): async def handle_api_call(call: ServiceCall) -> None:
name = call.data[ATTR_NAME] name = call.data[ATTR_NAME]
path = call.data[ATTR_PATH] path = call.data[ATTR_PATH]
entries = hass.config_entries.async_entries(DOMAIN) entries = hass.config_entries.async_entries(DOMAIN)

View file

@ -1,4 +1,6 @@
"""The Hangouts Bot.""" """The Hangouts Bot."""
from __future__ import annotations
import asyncio import asyncio
from contextlib import suppress from contextlib import suppress
from http import HTTPStatus from http import HTTPStatus
@ -9,7 +11,7 @@ import aiohttp
import hangups import hangups
from hangups import ChatMessageEvent, ChatMessageSegment, Client, get_auth, hangouts_pb2 from hangups import ChatMessageEvent, ChatMessageSegment, Client, get_auth, hangouts_pb2
from homeassistant.core import callback from homeassistant.core import ServiceCall, callback
from homeassistant.helpers import dispatcher, intent from homeassistant.helpers import dispatcher, intent
from homeassistant.helpers.aiohttp_client import async_get_clientsession from homeassistant.helpers.aiohttp_client import async_get_clientsession
@ -326,7 +328,7 @@ class HangoutsBot:
self.hass, EVENT_HANGOUTS_CONVERSATIONS_CHANGED, conversations self.hass, EVENT_HANGOUTS_CONVERSATIONS_CHANGED, conversations
) )
async def async_handle_send_message(self, service): async def async_handle_send_message(self, service: ServiceCall) -> None:
"""Handle the send_message service.""" """Handle the send_message service."""
await self._async_send_message( await self._async_send_message(
service.data[ATTR_MESSAGE], service.data[ATTR_MESSAGE],
@ -334,11 +336,13 @@ class HangoutsBot:
service.data.get(ATTR_DATA, {}), service.data.get(ATTR_DATA, {}),
) )
async def async_handle_update_users_and_conversations(self, _=None): async def async_handle_update_users_and_conversations(
self, service: ServiceCall | None = None
) -> None:
"""Handle the update_users_and_conversations service.""" """Handle the update_users_and_conversations service."""
await self._async_list_conversations() await self._async_list_conversations()
async def async_handle_reconnect(self, _=None): async def async_handle_reconnect(self, service: ServiceCall | None = None) -> None:
"""Handle the reconnect service.""" """Handle the reconnect service."""
await self.async_disconnect() await self.async_disconnect()
await self.async_connect() await self.async_connect()

View file

@ -25,7 +25,12 @@ from homeassistant.const import (
SERVICE_HOMEASSISTANT_STOP, SERVICE_HOMEASSISTANT_STOP,
Platform, Platform,
) )
from homeassistant.core import DOMAIN as HASS_DOMAIN, HomeAssistant, callback from homeassistant.core import (
DOMAIN as HASS_DOMAIN,
HomeAssistant,
ServiceCall,
callback,
)
from homeassistant.exceptions import HomeAssistantError from homeassistant.exceptions import HomeAssistantError
from homeassistant.helpers import config_validation as cv, recorder from homeassistant.helpers import config_validation as cv, recorder
from homeassistant.helpers.device_registry import ( from homeassistant.helpers.device_registry import (
@ -488,7 +493,7 @@ async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool: # noqa:
await push_config(None) await push_config(None)
async def async_service_handler(service): async def async_service_handler(service: ServiceCall) -> None:
"""Handle service calls for Hass.io.""" """Handle service calls for Hass.io."""
api_endpoint = MAP_SERVICE_API[service.service] api_endpoint = MAP_SERVICE_API[service.service]
@ -566,7 +571,7 @@ async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool: # noqa:
# Fetch data # Fetch data
await update_info_data(None) await update_info_data(None)
async def async_handle_core_service(call): async def async_handle_core_service(call: ServiceCall) -> None:
"""Service handler for handling core services.""" """Service handler for handling core services."""
if call.service in SHUTDOWN_SERVICES and recorder.async_migration_in_progress( if call.service in SHUTDOWN_SERVICES and recorder.async_migration_in_progress(
hass hass

View file

@ -5,7 +5,7 @@ import logging
from pyheos import CommandFailedError, Heos, HeosError, const from pyheos import CommandFailedError, Heos, HeosError, const
import voluptuous as vol import voluptuous as vol
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant, ServiceCall
from homeassistant.helpers import config_validation as cv from homeassistant.helpers import config_validation as cv
from .const import ( from .const import (
@ -47,7 +47,7 @@ def remove(hass: HomeAssistant):
hass.services.async_remove(DOMAIN, SERVICE_SIGN_OUT) hass.services.async_remove(DOMAIN, SERVICE_SIGN_OUT)
async def _sign_in_handler(controller, service): async def _sign_in_handler(controller: Heos, service: ServiceCall) -> None:
"""Sign in to the HEOS account.""" """Sign in to the HEOS account."""
if controller.connection_state != const.STATE_CONNECTED: if controller.connection_state != const.STATE_CONNECTED:
_LOGGER.error("Unable to sign in because HEOS is not connected") _LOGGER.error("Unable to sign in because HEOS is not connected")
@ -62,7 +62,7 @@ async def _sign_in_handler(controller, service):
_LOGGER.error("Unable to sign in: %s", err) _LOGGER.error("Unable to sign in: %s", err)
async def _sign_out_handler(controller, service): async def _sign_out_handler(controller: Heos, service: ServiceCall) -> None:
"""Sign out of the HEOS account.""" """Sign out of the HEOS account."""
if controller.connection_state != const.STATE_CONNECTED: if controller.connection_state != const.STATE_CONNECTED:
_LOGGER.error("Unable to sign out because HEOS is not connected") _LOGGER.error("Unable to sign out because HEOS is not connected")

View file

@ -37,7 +37,7 @@ from homeassistant.const import (
EVENT_HOMEASSISTANT_STOP, EVENT_HOMEASSISTANT_STOP,
SERVICE_RELOAD, SERVICE_RELOAD,
) )
from homeassistant.core import CoreState, HomeAssistant, callback from homeassistant.core import CoreState, HomeAssistant, ServiceCall, callback
from homeassistant.exceptions import HomeAssistantError, Unauthorized from homeassistant.exceptions import HomeAssistantError, Unauthorized
from homeassistant.helpers import device_registry, entity_registry from homeassistant.helpers import device_registry, entity_registry
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
@ -365,7 +365,7 @@ def _async_register_events_and_services(hass: HomeAssistant):
"""Register events and services for HomeKit.""" """Register events and services for HomeKit."""
hass.http.register_view(HomeKitPairingQRView) hass.http.register_view(HomeKitPairingQRView)
async def async_handle_homekit_reset_accessory(service): async def async_handle_homekit_reset_accessory(service: ServiceCall) -> None:
"""Handle reset accessory HomeKit service call.""" """Handle reset accessory HomeKit service call."""
for homekit in _async_all_homekit_instances(hass): for homekit in _async_all_homekit_instances(hass):
if homekit.status != STATUS_RUNNING: if homekit.status != STATUS_RUNNING:
@ -385,7 +385,7 @@ def _async_register_events_and_services(hass: HomeAssistant):
schema=RESET_ACCESSORY_SERVICE_SCHEMA, schema=RESET_ACCESSORY_SERVICE_SCHEMA,
) )
async def async_handle_homekit_unpair(service): async def async_handle_homekit_unpair(service: ServiceCall) -> None:
"""Handle unpair HomeKit service call.""" """Handle unpair HomeKit service call."""
referenced = async_extract_referenced_entity_ids(hass, service) referenced = async_extract_referenced_entity_ids(hass, service)
dev_reg = device_registry.async_get(hass) dev_reg = device_registry.async_get(hass)

View file

@ -114,7 +114,7 @@ async def async_setup_services(hass: HomeAssistant) -> None:
return return
@verify_domain_control(hass, HMIPC_DOMAIN) @verify_domain_control(hass, HMIPC_DOMAIN)
async def async_call_hmipc_service(service: ServiceCall): async def async_call_hmipc_service(service: ServiceCall) -> None:
"""Call correct HomematicIP Cloud service.""" """Call correct HomematicIP Cloud service."""
service_name = service.service service_name = service.service

View file

@ -28,6 +28,7 @@ from homeassistant.components.notify import (
BaseNotificationService, BaseNotificationService,
) )
from homeassistant.const import ATTR_NAME, URL_ROOT from homeassistant.const import ATTR_NAME, URL_ROOT
from homeassistant.core import ServiceCall
from homeassistant.exceptions import HomeAssistantError from homeassistant.exceptions import HomeAssistantError
from homeassistant.helpers import config_validation as cv from homeassistant.helpers import config_validation as cv
from homeassistant.util import ensure_unique_string from homeassistant.util import ensure_unique_string
@ -405,7 +406,7 @@ class HTML5NotificationService(BaseNotificationService):
self.registrations = registrations self.registrations = registrations
self.registrations_json_path = json_path self.registrations_json_path = json_path
async def async_dismiss_message(service): async def async_dismiss_message(service: ServiceCall) -> None:
"""Handle dismissing notification message service calls.""" """Handle dismissing notification message service calls."""
kwargs = {} kwargs = {}

View file

@ -27,7 +27,7 @@ LOGGER = logging.getLogger(__name__)
def async_register_services(hass: HomeAssistant) -> None: def async_register_services(hass: HomeAssistant) -> None:
"""Register services for Hue integration.""" """Register services for Hue integration."""
async def hue_activate_scene(call: ServiceCall, skip_reload=True): async def hue_activate_scene(call: ServiceCall, skip_reload=True) -> None:
"""Handle activation of Hue scene.""" """Handle activation of Hue scene."""
# Get parameters # Get parameters
group_name = call.data[ATTR_GROUP_NAME] group_name = call.data[ATTR_GROUP_NAME]

View file

@ -4,9 +4,9 @@ import voluptuous as vol
from homeassistant.config_entries import SOURCE_IMPORT, ConfigEntry from homeassistant.config_entries import SOURCE_IMPORT, ConfigEntry
from homeassistant.const import CONF_PASSWORD, CONF_USERNAME from homeassistant.const import CONF_PASSWORD, CONF_USERNAME
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant, ServiceCall
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.typing import ConfigType, ServiceDataType from homeassistant.helpers.typing import ConfigType
from homeassistant.util import slugify from homeassistant.util import slugify
from .account import IcloudAccount from .account import IcloudAccount
@ -134,7 +134,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
hass.config_entries.async_setup_platforms(entry, PLATFORMS) hass.config_entries.async_setup_platforms(entry, PLATFORMS)
def play_sound(service: ServiceDataType) -> None: def play_sound(service: ServiceCall) -> None:
"""Play sound on the device.""" """Play sound on the device."""
account = service.data[ATTR_ACCOUNT] account = service.data[ATTR_ACCOUNT]
device_name = service.data.get(ATTR_DEVICE_NAME) device_name = service.data.get(ATTR_DEVICE_NAME)
@ -143,7 +143,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
for device in _get_account(account).get_devices_with_name(device_name): for device in _get_account(account).get_devices_with_name(device_name):
device.play_sound() device.play_sound()
def display_message(service: ServiceDataType) -> None: def display_message(service: ServiceCall) -> None:
"""Display a message on the device.""" """Display a message on the device."""
account = service.data[ATTR_ACCOUNT] account = service.data[ATTR_ACCOUNT]
device_name = service.data.get(ATTR_DEVICE_NAME) device_name = service.data.get(ATTR_DEVICE_NAME)
@ -154,7 +154,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
for device in _get_account(account).get_devices_with_name(device_name): for device in _get_account(account).get_devices_with_name(device_name):
device.display_message(message, sound) device.display_message(message, sound)
def lost_device(service: ServiceDataType) -> None: def lost_device(service: ServiceCall) -> None:
"""Make the device in lost state.""" """Make the device in lost state."""
account = service.data[ATTR_ACCOUNT] account = service.data[ATTR_ACCOUNT]
device_name = service.data.get(ATTR_DEVICE_NAME) device_name = service.data.get(ATTR_DEVICE_NAME)
@ -165,7 +165,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
for device in _get_account(account).get_devices_with_name(device_name): for device in _get_account(account).get_devices_with_name(device_name):
device.lost_device(number, message) device.lost_device(number, message)
def update_account(service: ServiceDataType) -> None: def update_account(service: ServiceCall) -> None:
"""Call the update function of an iCloud account.""" """Call the update function of an iCloud account."""
if (account := service.data.get(ATTR_ACCOUNT)) is None: if (account := service.data.get(ATTR_ACCOUNT)) is None:
for account in hass.data[DOMAIN].values(): for account in hass.data[DOMAIN].values():

View file

@ -8,6 +8,7 @@ import requests
import voluptuous as vol import voluptuous as vol
from homeassistant.const import CONF_WEBHOOK_ID from homeassistant.const import CONF_WEBHOOK_ID
from homeassistant.core import ServiceCall
from homeassistant.helpers import config_entry_flow from homeassistant.helpers import config_entry_flow
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
@ -57,7 +58,7 @@ async def async_setup(hass, config):
if isinstance(api_keys, str): if isinstance(api_keys, str):
api_keys = {"default": api_keys} api_keys = {"default": api_keys}
def trigger_service(call): def trigger_service(call: ServiceCall) -> None:
"""Handle IFTTT trigger service calls.""" """Handle IFTTT trigger service calls."""
event = call.data[ATTR_EVENT] event = call.data[ATTR_EVENT]
targets = call.data.get(ATTR_TARGET, list(api_keys)) targets = call.data.get(ATTR_TARGET, list(api_keys))

View file

@ -13,7 +13,7 @@ from homeassistant.const import (
CONF_NAME, CONF_NAME,
CONF_SOURCE, CONF_SOURCE,
) )
from homeassistant.core import callback from homeassistant.core import ServiceCall, callback
from homeassistant.exceptions import HomeAssistantError from homeassistant.exceptions import HomeAssistantError
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.config_validation import make_entity_service_schema from homeassistant.helpers.config_validation import make_entity_service_schema
@ -75,7 +75,7 @@ async def async_setup(hass, config):
await component.async_setup(config) await component.async_setup(config)
async def async_scan_service(service): async def async_scan_service(service: ServiceCall) -> None:
"""Service handler for scan.""" """Service handler for scan."""
image_entities = await component.async_extract_from_service(service) image_entities = await component.async_extract_from_service(service)

View file

@ -27,7 +27,7 @@ from homeassistant.const import (
CONF_PLATFORM, CONF_PLATFORM,
ENTITY_MATCH_ALL, ENTITY_MATCH_ALL,
) )
from homeassistant.core import callback from homeassistant.core import ServiceCall, callback
from homeassistant.helpers.dispatcher import ( from homeassistant.helpers.dispatcher import (
async_dispatcher_connect, async_dispatcher_connect,
async_dispatcher_send, async_dispatcher_send,
@ -166,19 +166,19 @@ def async_register_services(hass):
save_lock = asyncio.Lock() save_lock = asyncio.Lock()
async def async_srv_add_all_link(service): async def async_srv_add_all_link(service: ServiceCall) -> None:
"""Add an INSTEON All-Link between two devices.""" """Add an INSTEON All-Link between two devices."""
group = service.data.get(SRV_ALL_LINK_GROUP) group = service.data[SRV_ALL_LINK_GROUP]
mode = service.data.get(SRV_ALL_LINK_MODE) mode = service.data[SRV_ALL_LINK_MODE]
link_mode = mode.lower() == SRV_CONTROLLER link_mode = mode.lower() == SRV_CONTROLLER
await async_enter_linking_mode(link_mode, group) await async_enter_linking_mode(link_mode, group)
async def async_srv_del_all_link(service): async def async_srv_del_all_link(service: ServiceCall) -> None:
"""Delete an INSTEON All-Link between two devices.""" """Delete an INSTEON All-Link between two devices."""
group = service.data.get(SRV_ALL_LINK_GROUP) group = service.data.get(SRV_ALL_LINK_GROUP)
await async_enter_unlinking_mode(group) await async_enter_unlinking_mode(group)
async def async_srv_load_aldb(service): async def async_srv_load_aldb(service: ServiceCall) -> None:
"""Load the device All-Link database.""" """Load the device All-Link database."""
entity_id = service.data[CONF_ENTITY_ID] entity_id = service.data[CONF_ENTITY_ID]
reload = service.data[SRV_LOAD_DB_RELOAD] reload = service.data[SRV_LOAD_DB_RELOAD]
@ -204,7 +204,7 @@ def async_register_services(hass):
_LOGGER.debug("Saving Insteon devices") _LOGGER.debug("Saving Insteon devices")
await devices.async_save(hass.config.config_dir) await devices.async_save(hass.config.config_dir)
def print_aldb(service): def print_aldb(service: ServiceCall) -> None:
"""Print the All-Link Database for a device.""" """Print the All-Link Database for a device."""
# For now this sends logs to the log file. # For now this sends logs to the log file.
# Future direction is to create an INSTEON control panel. # Future direction is to create an INSTEON control panel.
@ -212,39 +212,39 @@ def async_register_services(hass):
signal = f"{entity_id}_{SIGNAL_PRINT_ALDB}" signal = f"{entity_id}_{SIGNAL_PRINT_ALDB}"
dispatcher_send(hass, signal) dispatcher_send(hass, signal)
def print_im_aldb(service): def print_im_aldb(service: ServiceCall) -> None:
"""Print the All-Link Database for a device.""" """Print the All-Link Database for a device."""
# For now this sends logs to the log file. # For now this sends logs to the log file.
# Future direction is to create an INSTEON control panel. # Future direction is to create an INSTEON control panel.
print_aldb_to_log(devices.modem.aldb) print_aldb_to_log(devices.modem.aldb)
async def async_srv_x10_all_units_off(service): async def async_srv_x10_all_units_off(service: ServiceCall) -> None:
"""Send the X10 All Units Off command.""" """Send the X10 All Units Off command."""
housecode = service.data.get(SRV_HOUSECODE) housecode = service.data.get(SRV_HOUSECODE)
await async_x10_all_units_off(housecode) await async_x10_all_units_off(housecode)
async def async_srv_x10_all_lights_off(service): async def async_srv_x10_all_lights_off(service: ServiceCall) -> None:
"""Send the X10 All Lights Off command.""" """Send the X10 All Lights Off command."""
housecode = service.data.get(SRV_HOUSECODE) housecode = service.data.get(SRV_HOUSECODE)
await async_x10_all_lights_off(housecode) await async_x10_all_lights_off(housecode)
async def async_srv_x10_all_lights_on(service): async def async_srv_x10_all_lights_on(service: ServiceCall) -> None:
"""Send the X10 All Lights On command.""" """Send the X10 All Lights On command."""
housecode = service.data.get(SRV_HOUSECODE) housecode = service.data.get(SRV_HOUSECODE)
await async_x10_all_lights_on(housecode) await async_x10_all_lights_on(housecode)
async def async_srv_scene_on(service): async def async_srv_scene_on(service: ServiceCall) -> None:
"""Trigger an INSTEON scene ON.""" """Trigger an INSTEON scene ON."""
group = service.data.get(SRV_ALL_LINK_GROUP) group = service.data.get(SRV_ALL_LINK_GROUP)
await async_trigger_scene_on(group) await async_trigger_scene_on(group)
async def async_srv_scene_off(service): async def async_srv_scene_off(service: ServiceCall) -> None:
"""Trigger an INSTEON scene ON.""" """Trigger an INSTEON scene ON."""
group = service.data.get(SRV_ALL_LINK_GROUP) group = service.data.get(SRV_ALL_LINK_GROUP)
await async_trigger_scene_off(group) await async_trigger_scene_off(group)
@callback @callback
def async_add_default_links(service): def async_add_default_links(service: ServiceCall) -> None:
"""Add the default All-Link entries to a device.""" """Add the default All-Link entries to a device."""
entity_id = service.data[CONF_ENTITY_ID] entity_id = service.data[CONF_ENTITY_ID]
signal = f"{entity_id}_{SIGNAL_ADD_DEFAULT_LINKS}" signal = f"{entity_id}_{SIGNAL_ADD_DEFAULT_LINKS}"

View file

@ -20,6 +20,7 @@ from homeassistant.const import (
CONF_SCAN_INTERVAL, CONF_SCAN_INTERVAL,
DATA_RATE_MEGABITS_PER_SECOND, DATA_RATE_MEGABITS_PER_SECOND,
) )
from homeassistant.core import ServiceCall
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.discovery import async_load_platform from homeassistant.helpers.discovery import async_load_platform
from homeassistant.helpers.dispatcher import dispatcher_send from homeassistant.helpers.dispatcher import dispatcher_send
@ -103,7 +104,7 @@ async def async_setup(hass, config):
if not conf[CONF_MANUAL]: if not conf[CONF_MANUAL]:
async_track_time_interval(hass, data.update, conf[CONF_SCAN_INTERVAL]) async_track_time_interval(hass, data.update, conf[CONF_SCAN_INTERVAL])
def update(call): def update(call: ServiceCall) -> None:
"""Service call to manually update the data.""" """Service call to manually update the data."""
called_host = call.data[ATTR_HOST] called_host = call.data[ATTR_HOST]
if called_host in hass.data[DOMAIN]: if called_host in hass.data[DOMAIN]:

View file

@ -182,7 +182,7 @@ def async_setup_services(hass: HomeAssistant): # noqa: C901
# Integration-level services have already been added. Return. # Integration-level services have already been added. Return.
return return
async def async_system_query_service_handler(service): async def async_system_query_service_handler(service: ServiceCall) -> None:
"""Handle a system query service call.""" """Handle a system query service call."""
address = service.data.get(CONF_ADDRESS) address = service.data.get(CONF_ADDRESS)
isy_name = service.data.get(CONF_ISY) isy_name = service.data.get(CONF_ISY)
@ -206,7 +206,7 @@ def async_setup_services(hass: HomeAssistant): # noqa: C901
) )
await isy.query() await isy.query()
async def async_run_network_resource_service_handler(service): async def async_run_network_resource_service_handler(service: ServiceCall) -> None:
"""Handle a network resource service call.""" """Handle a network resource service call."""
address = service.data.get(CONF_ADDRESS) address = service.data.get(CONF_ADDRESS)
name = service.data.get(CONF_NAME) name = service.data.get(CONF_NAME)
@ -230,7 +230,7 @@ def async_setup_services(hass: HomeAssistant): # noqa: C901
"Could not run network resource command; not found or enabled on the ISY" "Could not run network resource command; not found or enabled on the ISY"
) )
async def async_send_program_command_service_handler(service): async def async_send_program_command_service_handler(service: ServiceCall) -> None:
"""Handle a send program command service call.""" """Handle a send program command service call."""
address = service.data.get(CONF_ADDRESS) address = service.data.get(CONF_ADDRESS)
name = service.data.get(CONF_NAME) name = service.data.get(CONF_NAME)
@ -251,7 +251,7 @@ def async_setup_services(hass: HomeAssistant): # noqa: C901
return return
_LOGGER.error("Could not send program command; not found or enabled on the ISY") _LOGGER.error("Could not send program command; not found or enabled on the ISY")
async def async_set_variable_service_handler(service): async def async_set_variable_service_handler(service: ServiceCall) -> None:
"""Handle a set variable service call.""" """Handle a set variable service call."""
address = service.data.get(CONF_ADDRESS) address = service.data.get(CONF_ADDRESS)
vtype = service.data.get(CONF_TYPE) vtype = service.data.get(CONF_TYPE)
@ -275,7 +275,7 @@ def async_setup_services(hass: HomeAssistant): # noqa: C901
_LOGGER.error("Could not set variable value; not found or enabled on the ISY") _LOGGER.error("Could not set variable value; not found or enabled on the ISY")
@callback @callback
def async_cleanup_registry_entries(service) -> None: def async_cleanup_registry_entries(service: ServiceCall) -> None:
"""Remove extra entities that are no longer part of the integration.""" """Remove extra entities that are no longer part of the integration."""
entity_registry = er.async_get(hass) entity_registry = er.async_get(hass)
config_ids = [] config_ids = []
@ -327,7 +327,7 @@ def async_setup_services(hass: HomeAssistant): # noqa: C901
len(extra_entities), len(extra_entities),
) )
async def async_reload_config_entries(service) -> None: async def async_reload_config_entries(service: ServiceCall) -> None:
"""Trigger a reload of all ISY994 config entries.""" """Trigger a reload of all ISY994 config entries."""
for config_entry_id in hass.data[DOMAIN]: for config_entry_id in hass.data[DOMAIN]:
hass.async_create_task(hass.config_entries.async_reload(config_entry_id)) hass.async_create_task(hass.config_entries.async_reload(config_entry_id))
@ -370,7 +370,7 @@ def async_setup_services(hass: HomeAssistant): # noqa: C901
domain=DOMAIN, service=SERVICE_RELOAD, service_func=async_reload_config_entries domain=DOMAIN, service=SERVICE_RELOAD, service_func=async_reload_config_entries
) )
async def _async_send_raw_node_command(call: ServiceCall): async def _async_send_raw_node_command(call: ServiceCall) -> None:
await hass.helpers.service.entity_service_call( await hass.helpers.service.entity_service_call(
async_get_platforms(hass, DOMAIN), "async_send_raw_node_command", call async_get_platforms(hass, DOMAIN), "async_send_raw_node_command", call
) )
@ -382,7 +382,7 @@ def async_setup_services(hass: HomeAssistant): # noqa: C901
service_func=_async_send_raw_node_command, service_func=_async_send_raw_node_command,
) )
async def _async_send_node_command(call: ServiceCall): async def _async_send_node_command(call: ServiceCall) -> None:
await hass.helpers.service.entity_service_call( await hass.helpers.service.entity_service_call(
async_get_platforms(hass, DOMAIN), "async_send_node_command", call async_get_platforms(hass, DOMAIN), "async_send_node_command", call
) )
@ -394,7 +394,7 @@ def async_setup_services(hass: HomeAssistant): # noqa: C901
service_func=_async_send_node_command, service_func=_async_send_node_command,
) )
async def _async_get_zwave_parameter(call: ServiceCall): async def _async_get_zwave_parameter(call: ServiceCall) -> None:
await hass.helpers.service.entity_service_call( await hass.helpers.service.entity_service_call(
async_get_platforms(hass, DOMAIN), "async_get_zwave_parameter", call async_get_platforms(hass, DOMAIN), "async_get_zwave_parameter", call
) )
@ -406,7 +406,7 @@ def async_setup_services(hass: HomeAssistant): # noqa: C901
service_func=_async_get_zwave_parameter, service_func=_async_get_zwave_parameter,
) )
async def _async_set_zwave_parameter(call: ServiceCall): async def _async_set_zwave_parameter(call: ServiceCall) -> None:
await hass.helpers.service.entity_service_call( await hass.helpers.service.entity_service_call(
async_get_platforms(hass, DOMAIN), "async_set_zwave_parameter", call async_get_platforms(hass, DOMAIN), "async_set_zwave_parameter", call
) )
@ -418,7 +418,7 @@ def async_setup_services(hass: HomeAssistant): # noqa: C901
service_func=_async_set_zwave_parameter, service_func=_async_set_zwave_parameter,
) )
async def _async_rename_node(call: ServiceCall): async def _async_rename_node(call: ServiceCall) -> None:
await hass.helpers.service.entity_service_call( await hass.helpers.service.entity_service_call(
async_get_platforms(hass, DOMAIN), "async_rename_node", call async_get_platforms(hass, DOMAIN), "async_rename_node", call
) )