Add websocket type hints in lovelace (#80537)

This commit is contained in:
epenet 2022-10-20 15:57:43 +02:00 committed by GitHub
parent 3f8362fe1c
commit eee1ede5bb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1,23 +1,31 @@
"""Websocket API for Lovelace.""" """Websocket API for Lovelace."""
from __future__ import annotations
from functools import wraps from functools import wraps
from typing import Any
import voluptuous as vol import voluptuous as vol
from homeassistant.components import websocket_api from homeassistant.components import websocket_api
from homeassistant.core import callback from homeassistant.core import HomeAssistant, callback
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 .const import CONF_URL_PATH, DOMAIN, ConfigNotFound from .const import CONF_URL_PATH, DOMAIN, ConfigNotFound
from .dashboard import LovelaceStorage
def _handle_errors(func): def _handle_errors(func):
"""Handle error with WebSocket calls.""" """Handle error with WebSocket calls."""
@wraps(func) @wraps(func)
async def send_with_error_handling(hass, connection, msg): async def send_with_error_handling(
hass: HomeAssistant,
connection: websocket_api.ActiveConnection,
msg: dict[str, Any],
) -> None:
url_path = msg.get(CONF_URL_PATH) url_path = msg.get(CONF_URL_PATH)
config = hass.data[DOMAIN]["dashboards"].get(url_path) config: LovelaceStorage | None = hass.data[DOMAIN]["dashboards"].get(url_path)
if config is None: if config is None:
connection.send_error( connection.send_error(
@ -44,7 +52,11 @@ def _handle_errors(func):
@websocket_api.websocket_command({"type": "lovelace/resources"}) @websocket_api.websocket_command({"type": "lovelace/resources"})
@websocket_api.async_response @websocket_api.async_response
async def websocket_lovelace_resources(hass, connection, msg): async def websocket_lovelace_resources(
hass: HomeAssistant,
connection: websocket_api.ActiveConnection,
msg: dict[str, Any],
) -> None:
"""Send Lovelace UI resources over WebSocket configuration.""" """Send Lovelace UI resources over WebSocket configuration."""
resources = hass.data[DOMAIN]["resources"] resources = hass.data[DOMAIN]["resources"]
@ -64,7 +76,12 @@ async def websocket_lovelace_resources(hass, connection, msg):
) )
@websocket_api.async_response @websocket_api.async_response
@_handle_errors @_handle_errors
async def websocket_lovelace_config(hass, connection, msg, config): async def websocket_lovelace_config(
hass: HomeAssistant,
connection: websocket_api.ActiveConnection,
msg: dict[str, Any],
config: LovelaceStorage,
) -> None:
"""Send Lovelace UI config over WebSocket configuration.""" """Send Lovelace UI config over WebSocket configuration."""
return await config.async_load(msg["force"]) return await config.async_load(msg["force"])
@ -79,7 +96,12 @@ async def websocket_lovelace_config(hass, connection, msg, config):
) )
@websocket_api.async_response @websocket_api.async_response
@_handle_errors @_handle_errors
async def websocket_lovelace_save_config(hass, connection, msg, config): async def websocket_lovelace_save_config(
hass: HomeAssistant,
connection: websocket_api.ActiveConnection,
msg: dict[str, Any],
config: LovelaceStorage,
) -> None:
"""Save Lovelace UI configuration.""" """Save Lovelace UI configuration."""
await config.async_save(msg["config"]) await config.async_save(msg["config"])
@ -93,14 +115,23 @@ async def websocket_lovelace_save_config(hass, connection, msg, config):
) )
@websocket_api.async_response @websocket_api.async_response
@_handle_errors @_handle_errors
async def websocket_lovelace_delete_config(hass, connection, msg, config): async def websocket_lovelace_delete_config(
hass: HomeAssistant,
connection: websocket_api.ActiveConnection,
msg: dict[str, Any],
config: LovelaceStorage,
) -> None:
"""Delete Lovelace UI configuration.""" """Delete Lovelace UI configuration."""
await config.async_delete() await config.async_delete()
@websocket_api.websocket_command({"type": "lovelace/dashboards/list"}) @websocket_api.websocket_command({"type": "lovelace/dashboards/list"})
@callback @callback
def websocket_lovelace_dashboards(hass, connection, msg): def websocket_lovelace_dashboards(
hass: HomeAssistant,
connection: websocket_api.ActiveConnection,
msg: dict[str, Any],
) -> None:
"""Delete Lovelace UI configuration.""" """Delete Lovelace UI configuration."""
connection.send_result( connection.send_result(
msg["id"], msg["id"],