Ensure service calls are typed [m-z] (#63014)

Co-authored-by: epenet <epenet@users.noreply.github.com>
This commit is contained in:
epenet 2021-12-29 22:41:55 +01:00 committed by GitHub
parent 4ef9abbf3f
commit 709afc63b0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
15 changed files with 65 additions and 53 deletions

View File

@ -16,6 +16,7 @@ from homeassistant.const import (
EVENT_HOMEASSISTANT_START, EVENT_HOMEASSISTANT_START,
EVENT_HOMEASSISTANT_STOP, EVENT_HOMEASSISTANT_STOP,
) )
from homeassistant.core import ServiceCall
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.util.json import load_json, save_json from homeassistant.util.json import load_json, save_json
@ -384,7 +385,7 @@ class MatrixBot:
for img in data.get(ATTR_IMAGES, []): for img in data.get(ATTR_IMAGES, []):
self._send_image(img, target_rooms) self._send_image(img, target_rooms)
def handle_send_message(self, service): def handle_send_message(self, service: ServiceCall) -> None:
"""Handle the send_message service.""" """Handle the send_message service."""
self._send_message( self._send_message(
service.data.get(ATTR_MESSAGE), service.data.get(ATTR_MESSAGE),

View File

@ -13,6 +13,7 @@ from homeassistant.components.media_player.const import (
SERVICE_PLAY_MEDIA, SERVICE_PLAY_MEDIA,
) )
from homeassistant.const import ATTR_ENTITY_ID from homeassistant.const import ATTR_ENTITY_ID
from homeassistant.core import ServiceCall
from homeassistant.helpers import config_validation as cv from homeassistant.helpers import config_validation as cv
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
@ -41,7 +42,7 @@ CONFIG_SCHEMA = vol.Schema(
def setup(hass, config): def setup(hass, config):
"""Set up the media extractor service.""" """Set up the media extractor service."""
def play_media(call): def play_media(call: ServiceCall) -> None:
"""Get stream URL and send it to the play_media service.""" """Get stream URL and send it to the play_media service."""
MediaExtractor(hass, config[DOMAIN], call.data).extract_and_send() MediaExtractor(hass, config[DOMAIN], call.data).extract_and_send()

View File

@ -9,6 +9,7 @@ import threading
import voluptuous as vol import voluptuous as vol
from homeassistant.const import EVENT_HOMEASSISTANT_START, EVENT_HOMEASSISTANT_STOP from homeassistant.const import EVENT_HOMEASSISTANT_START, EVENT_HOMEASSISTANT_STOP
from homeassistant.core import ServiceCall
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
from .minio_helper import MinioEventThread, create_minio_client from .minio_helper import MinioEventThread, create_minio_client
@ -127,7 +128,7 @@ def setup(hass, config):
value.hass = hass value.hass = hass
return value.async_render(parse_result=False) return value.async_render(parse_result=False)
def put_file(service): def put_file(service: ServiceCall) -> None:
"""Upload file service.""" """Upload file service."""
bucket = _render_service_value(service, ATTR_BUCKET) bucket = _render_service_value(service, ATTR_BUCKET)
key = _render_service_value(service, ATTR_KEY) key = _render_service_value(service, ATTR_KEY)
@ -139,7 +140,7 @@ def setup(hass, config):
minio_client.fput_object(bucket, key, file_path) minio_client.fput_object(bucket, key, file_path)
def get_file(service): def get_file(service: ServiceCall) -> None:
"""Download file service.""" """Download file service."""
bucket = _render_service_value(service, ATTR_BUCKET) bucket = _render_service_value(service, ATTR_BUCKET)
key = _render_service_value(service, ATTR_KEY) key = _render_service_value(service, ATTR_KEY)
@ -151,7 +152,7 @@ def setup(hass, config):
minio_client.fget_object(bucket, key, file_path) minio_client.fget_object(bucket, key, file_path)
def remove_file(service): def remove_file(service: ServiceCall) -> None:
"""Delete file service.""" """Delete file service."""
bucket = _render_service_value(service, ATTR_BUCKET) bucket = _render_service_value(service, ATTR_BUCKET)
key = _render_service_value(service, ATTR_KEY) key = _render_service_value(service, ATTR_KEY)

View File

@ -13,6 +13,7 @@ from homeassistant.const import (
CONF_SSL, CONF_SSL,
CONF_USERNAME, CONF_USERNAME,
) )
from homeassistant.core import ServiceCall
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
from .const import ( from .const import (
@ -95,7 +96,7 @@ def setup(hass, config):
hass.data[DOMAIN] = {"instance": ombi} hass.data[DOMAIN] = {"instance": ombi}
def submit_movie_request(call): def submit_movie_request(call: ServiceCall) -> None:
"""Submit request for movie.""" """Submit request for movie."""
name = call.data[ATTR_NAME] name = call.data[ATTR_NAME]
movies = ombi.search_movie(name) movies = ombi.search_movie(name)
@ -105,7 +106,7 @@ def setup(hass, config):
else: else:
raise Warning("No movie found.") raise Warning("No movie found.")
def submit_tv_request(call): def submit_tv_request(call: ServiceCall) -> None:
"""Submit request for TV show.""" """Submit request for TV show."""
name = call.data[ATTR_NAME] name = call.data[ATTR_NAME]
tv_shows = ombi.search_tv(name) tv_shows = ombi.search_tv(name)
@ -122,7 +123,7 @@ def setup(hass, config):
else: else:
raise Warning("No TV show found.") raise Warning("No TV show found.")
def submit_music_request(call): def submit_music_request(call: ServiceCall) -> None:
"""Submit request for music album.""" """Submit request for music album."""
name = call.data[ATTR_NAME] name = call.data[ATTR_NAME]
music = ombi.search_music_album(name) music = ombi.search_music_album(name)

View File

@ -26,6 +26,7 @@ from homeassistant.const import (
STATE_OFF, STATE_OFF,
STATE_ON, STATE_ON,
) )
from homeassistant.core import ServiceCall
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
@ -176,14 +177,14 @@ def setup_platform(hass, config, add_entities, discovery_info=None):
host = config.get(CONF_HOST) host = config.get(CONF_HOST)
hosts = [] hosts = []
def service_handle(service): def service_handle(service: ServiceCall) -> None:
"""Handle for services.""" """Handle for services."""
entity_ids = service.data.get(ATTR_ENTITY_ID) entity_ids = service.data[ATTR_ENTITY_ID]
devices = [d for d in hosts if d.entity_id in entity_ids] devices = [d for d in hosts if d.entity_id in entity_ids]
for device in devices: for device in devices:
if service.service == SERVICE_SELECT_HDMI_OUTPUT: if service.service == SERVICE_SELECT_HDMI_OUTPUT:
device.select_output(service.data.get(ATTR_HDMI_OUTPUT)) device.select_output(service.data[ATTR_HDMI_OUTPUT])
hass.services.register( hass.services.register(
DOMAIN, DOMAIN,

View File

@ -16,6 +16,7 @@ from homeassistant.const import (
EVENT_HOMEASSISTANT_START, EVENT_HOMEASSISTANT_START,
EVENT_HOMEASSISTANT_STOP, EVENT_HOMEASSISTANT_STOP,
) )
from homeassistant.core import ServiceCall
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.event import track_point_in_utc_time from homeassistant.helpers.event import track_point_in_utc_time
from homeassistant.util import dt as dt_util from homeassistant.util import dt as dt_util
@ -84,7 +85,7 @@ def setup(hass, config):
hass.bus.listen_once(EVENT_HOMEASSISTANT_STOP, stop_pilight_client) hass.bus.listen_once(EVENT_HOMEASSISTANT_STOP, stop_pilight_client)
@send_throttler.limited @send_throttler.limited
def send_code(call): def send_code(call: ServiceCall) -> None:
"""Send RF code to the pilight-daemon.""" """Send RF code to the pilight-daemon."""
# Change type to dict from mappingproxy since data has to be JSON # Change type to dict from mappingproxy since data has to be JSON
# serializable # serializable

View File

@ -20,6 +20,7 @@ from RestrictedPython.Guards import (
import voluptuous as vol import voluptuous as vol
from homeassistant.const import CONF_DESCRIPTION, CONF_NAME, SERVICE_RELOAD from homeassistant.const import CONF_DESCRIPTION, CONF_NAME, SERVICE_RELOAD
from homeassistant.core import ServiceCall
from homeassistant.exceptions import HomeAssistantError from homeassistant.exceptions import HomeAssistantError
from homeassistant.helpers.service import async_set_service_schema from homeassistant.helpers.service import async_set_service_schema
from homeassistant.loader import bind_hass from homeassistant.loader import bind_hass
@ -88,7 +89,7 @@ def setup(hass, config):
discover_scripts(hass) discover_scripts(hass)
def reload_scripts_handler(call): def reload_scripts_handler(call: ServiceCall) -> None:
"""Handle reload service calls.""" """Handle reload service calls."""
discover_scripts(hass) discover_scripts(hass)
@ -105,7 +106,7 @@ def discover_scripts(hass):
_LOGGER.warning("Folder %s not found in configuration folder", FOLDER) _LOGGER.warning("Folder %s not found in configuration folder", FOLDER)
return False return False
def python_script_service_handler(call): def python_script_service_handler(call: ServiceCall) -> None:
"""Handle python script service calls.""" """Handle python script service calls."""
execute_script(hass, call.service, call.data) execute_script(hass, call.service, call.data)

View File

@ -9,6 +9,7 @@ import voluptuous as vol
from homeassistant.components.camera import DOMAIN as CAMERA_DOMAIN from homeassistant.components.camera import DOMAIN as CAMERA_DOMAIN
from homeassistant.const import CONF_HOST, CONF_PASSWORD, CONF_PORT, CONF_USERNAME from homeassistant.const import CONF_HOST, CONF_PASSWORD, CONF_PORT, CONF_USERNAME
from homeassistant.core import ServiceCall
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.discovery import load_platform from homeassistant.helpers.discovery import load_platform
@ -84,11 +85,11 @@ def setup(hass, config):
load_platform(hass, CAMERA_DOMAIN, DOMAIN, {}, config) load_platform(hass, CAMERA_DOMAIN, DOMAIN, {}, config)
# Register services # Register services
def handle_start_record(call): def handle_start_record(call: ServiceCall) -> None:
guid = call.data[SERVICE_CHANNEL_GUID] guid = call.data[SERVICE_CHANNEL_GUID]
qvrpro.start_recording(guid) qvrpro.start_recording(guid)
def handle_stop_record(call): def handle_stop_record(call: ServiceCall) -> None:
guid = call.data[SERVICE_CHANNEL_GUID] guid = call.data[SERVICE_CHANNEL_GUID]
qvrpro.stop_recording(guid) qvrpro.stop_recording(guid)

View File

@ -4,6 +4,7 @@ import voluptuous as vol
from homeassistant.components.switch import SwitchEntity from homeassistant.components.switch import SwitchEntity
from homeassistant.const import ATTR_ENTITY_ID, CONF_FRIENDLY_NAME, CONF_TRIGGER_TIME from homeassistant.const import ATTR_ENTITY_ID, CONF_FRIENDLY_NAME, CONF_TRIGGER_TIME
from homeassistant.core import ServiceCall
from homeassistant.helpers import config_validation as cv from homeassistant.helpers import config_validation as cv
from . import CONF_ZONES, DATA_RAINBIRD, DOMAIN, RAINBIRD_CONTROLLER from . import CONF_ZONES, DATA_RAINBIRD, DOMAIN, RAINBIRD_CONTROLLER
@ -56,7 +57,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None):
add_entities(devices, True) add_entities(devices, True)
def start_irrigation(service): def start_irrigation(service: ServiceCall) -> None:
entity_id = service.data[ATTR_ENTITY_ID] entity_id = service.data[ATTR_ENTITY_ID]
duration = service.data[ATTR_DURATION] duration = service.data[ATTR_DURATION]
@ -71,7 +72,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None):
schema=SERVICE_SCHEMA_IRRIGATION, schema=SERVICE_SCHEMA_IRRIGATION,
) )
def set_rain_delay(service): def set_rain_delay(service: ServiceCall) -> None:
duration = service.data[ATTR_DURATION] duration = service.data[ATTR_DURATION]
controller.set_rain_delay(duration) controller.set_rain_delay(duration)

View File

@ -10,6 +10,7 @@ import requests
import voluptuous as vol import voluptuous as vol
from homeassistant.const import CONF_DOMAIN, CONF_TTL, CONF_ZONE from homeassistant.const import CONF_DOMAIN, CONF_TTL, CONF_ZONE
from homeassistant.core import ServiceCall
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.event import track_time_interval from homeassistant.helpers.event import track_time_interval
@ -56,7 +57,7 @@ def setup(hass, config):
aws_access_key_id, aws_secret_access_key, zone, domain, records, ttl aws_access_key_id, aws_secret_access_key, zone, domain, records, ttl
) )
def update_records_service(now): def update_records_service(call: ServiceCall) -> None:
"""Set up service for manual trigger.""" """Set up service for manual trigger."""
_update_route53( _update_route53(
aws_access_key_id, aws_secret_access_key, zone, domain, records, ttl aws_access_key_id, aws_secret_access_key, zone, domain, records, ttl

View File

@ -30,7 +30,7 @@ from homeassistant.const import (
STATE_PLAYING, STATE_PLAYING,
STATE_UNAVAILABLE, STATE_UNAVAILABLE,
) )
from homeassistant.core import callback from homeassistant.core import ServiceCall, callback
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
from .const import ( from .const import (
@ -122,7 +122,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None):
hass.data[DATA_SOUNDTOUCH].append(bose_soundtouch_entity) hass.data[DATA_SOUNDTOUCH].append(bose_soundtouch_entity)
add_entities([bose_soundtouch_entity], True) add_entities([bose_soundtouch_entity], True)
def service_handle(service): def service_handle(service: ServiceCall) -> None:
"""Handle the applying of a service.""" """Handle the applying of a service."""
master_device_id = service.data.get("master") master_device_id = service.data.get("master")
slaves_ids = service.data.get("slaves") slaves_ids = service.data.get("slaves")

View File

@ -5,6 +5,7 @@ from streamlabswater import streamlabswater
import voluptuous as vol import voluptuous as vol
from homeassistant.const import CONF_API_KEY, Platform from homeassistant.const import CONF_API_KEY, Platform
from homeassistant.core import ServiceCall
from homeassistant.helpers import discovery from homeassistant.helpers import discovery
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
@ -77,7 +78,7 @@ def setup(hass, config):
for platform in PLATFORMS: for platform in PLATFORMS:
discovery.load_platform(hass, platform, DOMAIN, {}, config) discovery.load_platform(hass, platform, DOMAIN, {}, config)
def set_away_mode(service): def set_away_mode(service: ServiceCall) -> None:
"""Set the StreamLabsWater Away Mode.""" """Set the StreamLabsWater Away Mode."""
away_mode = service.data.get(ATTR_AWAY_MODE) away_mode = service.data.get(ATTR_AWAY_MODE)
client.update_location(location_id, away_mode) client.update_location(location_id, away_mode)

View File

@ -17,7 +17,7 @@ from homeassistant.const import (
EVENT_HOMEASSISTANT_STOP, EVENT_HOMEASSISTANT_STOP,
Platform, Platform,
) )
from homeassistant.core import callback from homeassistant.core import ServiceCall, callback
from homeassistant.helpers import device_registry as dr from homeassistant.helpers import device_registry as dr
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.device_registry import format_mac from homeassistant.helpers.device_registry import format_mac
@ -77,7 +77,7 @@ SERVICE_SCHEMA_REMOVE_DEVICE = vol.Schema(
def setup(hass, config): def setup(hass, config):
"""Set up the Xiaomi component.""" """Set up the Xiaomi component."""
def play_ringtone_service(call): def play_ringtone_service(call: ServiceCall) -> None:
"""Service to play ringtone through Gateway.""" """Service to play ringtone through Gateway."""
ring_id = call.data.get(ATTR_RINGTONE_ID) ring_id = call.data.get(ATTR_RINGTONE_ID)
gateway = call.data.get(ATTR_GW_MAC) gateway = call.data.get(ATTR_GW_MAC)
@ -89,12 +89,12 @@ def setup(hass, config):
gateway.write_to_hub(gateway.sid, **kwargs) gateway.write_to_hub(gateway.sid, **kwargs)
def stop_ringtone_service(call): def stop_ringtone_service(call: ServiceCall) -> None:
"""Service to stop playing ringtone on Gateway.""" """Service to stop playing ringtone on Gateway."""
gateway = call.data.get(ATTR_GW_MAC) gateway = call.data.get(ATTR_GW_MAC)
gateway.write_to_hub(gateway.sid, mid=10000) gateway.write_to_hub(gateway.sid, mid=10000)
def add_device_service(call): def add_device_service(call: ServiceCall) -> None:
"""Service to add a new sub-device within the next 30 seconds.""" """Service to add a new sub-device within the next 30 seconds."""
gateway = call.data.get(ATTR_GW_MAC) gateway = call.data.get(ATTR_GW_MAC)
gateway.write_to_hub(gateway.sid, join_permission="yes") gateway.write_to_hub(gateway.sid, join_permission="yes")
@ -104,7 +104,7 @@ def setup(hass, config):
title="Xiaomi Aqara Gateway", title="Xiaomi Aqara Gateway",
) )
def remove_device_service(call): def remove_device_service(call: ServiceCall) -> None:
"""Service to remove a sub-device from the gateway.""" """Service to remove a sub-device from the gateway."""
device_id = call.data.get(ATTR_DEVICE_ID) device_id = call.data.get(ATTR_DEVICE_ID)
gateway = call.data.get(ATTR_GW_MAC) gateway = call.data.get(ATTR_GW_MAC)

View File

@ -14,6 +14,7 @@ from homeassistant.const import (
CONF_USERNAME, CONF_USERNAME,
CONF_VERIFY_SSL, CONF_VERIFY_SSL,
) )
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
@ -74,7 +75,7 @@ def setup(hass, config):
success = zm_client.login() and success success = zm_client.login() and success
def set_active_state(call): def set_active_state(call: ServiceCall) -> None:
"""Set the ZoneMinder run state to the given state name.""" """Set the ZoneMinder run state to the given state name."""
zm_id = call.data[ATTR_ID] zm_id = call.data[ATTR_ID]
state_name = call.data[ATTR_NAME] state_name = call.data[ATTR_NAME]

View File

@ -583,49 +583,49 @@ async def async_setup_entry( # noqa: C901
weak=False, weak=False,
) )
def add_node(service): def add_node(service: ServiceCall) -> None:
"""Switch into inclusion mode.""" """Switch into inclusion mode."""
_LOGGER.info("Z-Wave add_node have been initialized") _LOGGER.info("Z-Wave add_node have been initialized")
network.controller.add_node() network.controller.add_node()
def add_node_secure(service): def add_node_secure(service: ServiceCall) -> None:
"""Switch into secure inclusion mode.""" """Switch into secure inclusion mode."""
_LOGGER.info("Z-Wave add_node_secure have been initialized") _LOGGER.info("Z-Wave add_node_secure have been initialized")
network.controller.add_node(True) network.controller.add_node(True)
def remove_node(service): def remove_node(service: ServiceCall) -> None:
"""Switch into exclusion mode.""" """Switch into exclusion mode."""
_LOGGER.info("Z-Wave remove_node have been initialized") _LOGGER.info("Z-Wave remove_node have been initialized")
network.controller.remove_node() network.controller.remove_node()
def cancel_command(service): def cancel_command(service: ServiceCall) -> None:
"""Cancel a running controller command.""" """Cancel a running controller command."""
_LOGGER.info("Cancel running Z-Wave command") _LOGGER.info("Cancel running Z-Wave command")
network.controller.cancel_command() network.controller.cancel_command()
def heal_network(service): def heal_network(service: ServiceCall) -> None:
"""Heal the network.""" """Heal the network."""
_LOGGER.info("Z-Wave heal running") _LOGGER.info("Z-Wave heal running")
network.heal() network.heal()
def soft_reset(service): def soft_reset(service: ServiceCall) -> None:
"""Soft reset the controller.""" """Soft reset the controller."""
_LOGGER.info("Z-Wave soft_reset have been initialized") _LOGGER.info("Z-Wave soft_reset have been initialized")
network.controller.soft_reset() network.controller.soft_reset()
def test_network(service): def test_network(service: ServiceCall) -> None:
"""Test the network by sending commands to all the nodes.""" """Test the network by sending commands to all the nodes."""
_LOGGER.info("Z-Wave test_network have been initialized") _LOGGER.info("Z-Wave test_network have been initialized")
network.test() network.test()
def stop_network(_service_or_event): def stop_network(_service_or_event: Event | ServiceCall) -> None:
"""Stop Z-Wave network.""" """Stop Z-Wave network."""
_LOGGER.info("Stopping Z-Wave network") _LOGGER.info("Stopping Z-Wave network")
network.stop() network.stop()
if hass.state == CoreState.running: if hass.state == CoreState.running:
hass.bus.fire(const.EVENT_NETWORK_STOP) hass.bus.fire(const.EVENT_NETWORK_STOP)
async def rename_node(service): async def rename_node(service: ServiceCall) -> None:
"""Rename a node.""" """Rename a node."""
node_id = service.data.get(const.ATTR_NODE_ID) node_id = service.data.get(const.ATTR_NODE_ID)
node = network.nodes[node_id] # pylint: disable=unsubscriptable-object node = network.nodes[node_id] # pylint: disable=unsubscriptable-object
@ -644,7 +644,7 @@ async def async_setup_entry( # noqa: C901
entity = hass.data[DATA_DEVICES][key] entity = hass.data[DATA_DEVICES][key]
await entity.value_renamed(update_ids) await entity.value_renamed(update_ids)
async def rename_value(service): async def rename_value(service: ServiceCall) -> None:
"""Rename a node value.""" """Rename a node value."""
node_id = service.data.get(const.ATTR_NODE_ID) node_id = service.data.get(const.ATTR_NODE_ID)
value_id = service.data.get(const.ATTR_VALUE_ID) value_id = service.data.get(const.ATTR_VALUE_ID)
@ -660,7 +660,7 @@ async def async_setup_entry( # noqa: C901
entity = hass.data[DATA_DEVICES][value_key] entity = hass.data[DATA_DEVICES][value_key]
await entity.value_renamed(update_ids) await entity.value_renamed(update_ids)
def set_poll_intensity(service): def set_poll_intensity(service: ServiceCall) -> None:
"""Set the polling intensity of a node value.""" """Set the polling intensity of a node value."""
node_id = service.data.get(const.ATTR_NODE_ID) node_id = service.data.get(const.ATTR_NODE_ID)
value_id = service.data.get(const.ATTR_VALUE_ID) value_id = service.data.get(const.ATTR_VALUE_ID)
@ -687,19 +687,19 @@ async def async_setup_entry( # noqa: C901
"Set polling intensity failed (Node %d Value %d)", node_id, value_id "Set polling intensity failed (Node %d Value %d)", node_id, value_id
) )
def remove_failed_node(service): def remove_failed_node(service: ServiceCall) -> None:
"""Remove failed node.""" """Remove failed node."""
node_id = service.data.get(const.ATTR_NODE_ID) node_id = service.data.get(const.ATTR_NODE_ID)
_LOGGER.info("Trying to remove zwave node %d", node_id) _LOGGER.info("Trying to remove zwave node %d", node_id)
network.controller.remove_failed_node(node_id) network.controller.remove_failed_node(node_id)
def replace_failed_node(service): def replace_failed_node(service: ServiceCall) -> None:
"""Replace failed node.""" """Replace failed node."""
node_id = service.data.get(const.ATTR_NODE_ID) node_id = service.data.get(const.ATTR_NODE_ID)
_LOGGER.info("Trying to replace zwave node %d", node_id) _LOGGER.info("Trying to replace zwave node %d", node_id)
network.controller.replace_failed_node(node_id) network.controller.replace_failed_node(node_id)
def set_config_parameter(service): def set_config_parameter(service: ServiceCall) -> None:
"""Set a config parameter to a node.""" """Set a config parameter to a node."""
node_id = service.data.get(const.ATTR_NODE_ID) node_id = service.data.get(const.ATTR_NODE_ID)
node = network.nodes[node_id] # pylint: disable=unsubscriptable-object node = network.nodes[node_id] # pylint: disable=unsubscriptable-object
@ -756,7 +756,7 @@ async def async_setup_entry( # noqa: C901
selection, selection,
) )
def refresh_node_value(service): def refresh_node_value(service: ServiceCall) -> None:
"""Refresh the specified value from a node.""" """Refresh the specified value from a node."""
node_id = service.data.get(const.ATTR_NODE_ID) node_id = service.data.get(const.ATTR_NODE_ID)
value_id = service.data.get(const.ATTR_VALUE_ID) value_id = service.data.get(const.ATTR_VALUE_ID)
@ -764,7 +764,7 @@ async def async_setup_entry( # noqa: C901
node.values[value_id].refresh() node.values[value_id].refresh()
_LOGGER.info("Node %s value %s refreshed", node_id, value_id) _LOGGER.info("Node %s value %s refreshed", node_id, value_id)
def set_node_value(service): def set_node_value(service: ServiceCall) -> None:
"""Set the specified value on a node.""" """Set the specified value on a node."""
node_id = service.data.get(const.ATTR_NODE_ID) node_id = service.data.get(const.ATTR_NODE_ID)
value_id = service.data.get(const.ATTR_VALUE_ID) value_id = service.data.get(const.ATTR_VALUE_ID)
@ -773,7 +773,7 @@ async def async_setup_entry( # noqa: C901
node.values[value_id].data = value node.values[value_id].data = value
_LOGGER.info("Node %s value %s set to %s", node_id, value_id, value) _LOGGER.info("Node %s value %s set to %s", node_id, value_id, value)
def print_config_parameter(service): def print_config_parameter(service: ServiceCall) -> None:
"""Print a config parameter from a node.""" """Print a config parameter from a node."""
node_id = service.data.get(const.ATTR_NODE_ID) node_id = service.data.get(const.ATTR_NODE_ID)
node = network.nodes[node_id] # pylint: disable=unsubscriptable-object node = network.nodes[node_id] # pylint: disable=unsubscriptable-object
@ -785,13 +785,13 @@ async def async_setup_entry( # noqa: C901
get_config_value(node, param), get_config_value(node, param),
) )
def print_node(service): def print_node(service: ServiceCall) -> None:
"""Print all information about z-wave node.""" """Print all information about z-wave node."""
node_id = service.data.get(const.ATTR_NODE_ID) node_id = service.data.get(const.ATTR_NODE_ID)
node = network.nodes[node_id] # pylint: disable=unsubscriptable-object node = network.nodes[node_id] # pylint: disable=unsubscriptable-object
nice_print_node(node) nice_print_node(node)
def set_wakeup(service): def set_wakeup(service: ServiceCall) -> None:
"""Set wake-up interval of a node.""" """Set wake-up interval of a node."""
node_id = service.data.get(const.ATTR_NODE_ID) node_id = service.data.get(const.ATTR_NODE_ID)
node = network.nodes[node_id] # pylint: disable=unsubscriptable-object node = network.nodes[node_id] # pylint: disable=unsubscriptable-object
@ -803,7 +803,7 @@ async def async_setup_entry( # noqa: C901
else: else:
_LOGGER.info("Node %s is not wakeable", node_id) _LOGGER.info("Node %s is not wakeable", node_id)
def change_association(service): def change_association(service: ServiceCall) -> None:
"""Change an association in the zwave network.""" """Change an association in the zwave network."""
association_type = service.data.get(const.ATTR_ASSOCIATION) association_type = service.data.get(const.ATTR_ASSOCIATION)
node_id = service.data.get(const.ATTR_NODE_ID) node_id = service.data.get(const.ATTR_NODE_ID)
@ -833,18 +833,18 @@ async def async_setup_entry( # noqa: C901
instance, instance,
) )
async def async_refresh_entity(service): async def async_refresh_entity(service: ServiceCall) -> None:
"""Refresh values that specific entity depends on.""" """Refresh values that specific entity depends on."""
entity_id = service.data.get(ATTR_ENTITY_ID) entity_id = service.data.get(ATTR_ENTITY_ID)
async_dispatcher_send(hass, SIGNAL_REFRESH_ENTITY_FORMAT.format(entity_id)) async_dispatcher_send(hass, SIGNAL_REFRESH_ENTITY_FORMAT.format(entity_id))
def refresh_node(service): def refresh_node(service: ServiceCall) -> None:
"""Refresh all node info.""" """Refresh all node info."""
node_id = service.data.get(const.ATTR_NODE_ID) node_id = service.data.get(const.ATTR_NODE_ID)
node = network.nodes[node_id] # pylint: disable=unsubscriptable-object node = network.nodes[node_id] # pylint: disable=unsubscriptable-object
node.refresh_info() node.refresh_info()
def reset_node_meters(service): def reset_node_meters(service: ServiceCall) -> None:
"""Reset meter counters of a node.""" """Reset meter counters of a node."""
node_id = service.data.get(const.ATTR_NODE_ID) node_id = service.data.get(const.ATTR_NODE_ID)
instance = service.data.get(const.ATTR_INSTANCE) instance = service.data.get(const.ATTR_INSTANCE)
@ -862,7 +862,7 @@ async def async_setup_entry( # noqa: C901
"Node %s on instance %s does not have resettable meters", node_id, instance "Node %s on instance %s does not have resettable meters", node_id, instance
) )
def heal_node(service): def heal_node(service: ServiceCall) -> None:
"""Heal a node on the network.""" """Heal a node on the network."""
node_id = service.data.get(const.ATTR_NODE_ID) node_id = service.data.get(const.ATTR_NODE_ID)
update_return_routes = service.data.get(const.ATTR_RETURN_ROUTES) update_return_routes = service.data.get(const.ATTR_RETURN_ROUTES)
@ -870,7 +870,7 @@ async def async_setup_entry( # noqa: C901
_LOGGER.info("Z-Wave node heal running for node %s", node_id) _LOGGER.info("Z-Wave node heal running for node %s", node_id)
node.heal(update_return_routes) node.heal(update_return_routes)
def test_node(service): def test_node(service: ServiceCall) -> None:
"""Send test messages to a node on the network.""" """Send test messages to a node on the network."""
node_id = service.data.get(const.ATTR_NODE_ID) node_id = service.data.get(const.ATTR_NODE_ID)
messages = service.data.get(const.ATTR_MESSAGES) messages = service.data.get(const.ATTR_MESSAGES)