mirror of
https://github.com/home-assistant/core.git
synced 2025-07-23 05:07:41 +00:00
Use NamedTuple for api endpoint settings (#55694)
This commit is contained in:
parent
a756308e79
commit
edddeaf5ab
@ -4,7 +4,7 @@ from __future__ import annotations
|
|||||||
from datetime import timedelta
|
from datetime import timedelta
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
from typing import Any
|
from typing import Any, NamedTuple
|
||||||
|
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
@ -132,35 +132,56 @@ SCHEMA_RESTORE_PARTIAL = SCHEMA_RESTORE_FULL.extend(
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class APIEndpointSettings(NamedTuple):
|
||||||
|
"""Settings for API endpoint."""
|
||||||
|
|
||||||
|
command: str
|
||||||
|
schema: vol.Schema
|
||||||
|
timeout: int = 60
|
||||||
|
pass_data: bool = False
|
||||||
|
|
||||||
|
|
||||||
MAP_SERVICE_API = {
|
MAP_SERVICE_API = {
|
||||||
SERVICE_ADDON_START: ("/addons/{addon}/start", SCHEMA_ADDON, 60, False),
|
SERVICE_ADDON_START: APIEndpointSettings("/addons/{addon}/start", SCHEMA_ADDON),
|
||||||
SERVICE_ADDON_STOP: ("/addons/{addon}/stop", SCHEMA_ADDON, 60, False),
|
SERVICE_ADDON_STOP: APIEndpointSettings("/addons/{addon}/stop", SCHEMA_ADDON),
|
||||||
SERVICE_ADDON_RESTART: ("/addons/{addon}/restart", SCHEMA_ADDON, 60, False),
|
SERVICE_ADDON_RESTART: APIEndpointSettings("/addons/{addon}/restart", SCHEMA_ADDON),
|
||||||
SERVICE_ADDON_UPDATE: ("/addons/{addon}/update", SCHEMA_ADDON, 60, False),
|
SERVICE_ADDON_UPDATE: APIEndpointSettings("/addons/{addon}/update", SCHEMA_ADDON),
|
||||||
SERVICE_ADDON_STDIN: ("/addons/{addon}/stdin", SCHEMA_ADDON_STDIN, 60, False),
|
SERVICE_ADDON_STDIN: APIEndpointSettings(
|
||||||
SERVICE_HOST_SHUTDOWN: ("/host/shutdown", SCHEMA_NO_DATA, 60, False),
|
"/addons/{addon}/stdin", SCHEMA_ADDON_STDIN
|
||||||
SERVICE_HOST_REBOOT: ("/host/reboot", SCHEMA_NO_DATA, 60, False),
|
),
|
||||||
SERVICE_BACKUP_FULL: ("/backups/new/full", SCHEMA_BACKUP_FULL, 300, True),
|
SERVICE_HOST_SHUTDOWN: APIEndpointSettings("/host/shutdown", SCHEMA_NO_DATA),
|
||||||
SERVICE_BACKUP_PARTIAL: (
|
SERVICE_HOST_REBOOT: APIEndpointSettings("/host/reboot", SCHEMA_NO_DATA),
|
||||||
|
SERVICE_BACKUP_FULL: APIEndpointSettings(
|
||||||
|
"/backups/new/full",
|
||||||
|
SCHEMA_BACKUP_FULL,
|
||||||
|
300,
|
||||||
|
True,
|
||||||
|
),
|
||||||
|
SERVICE_BACKUP_PARTIAL: APIEndpointSettings(
|
||||||
"/backups/new/partial",
|
"/backups/new/partial",
|
||||||
SCHEMA_BACKUP_PARTIAL,
|
SCHEMA_BACKUP_PARTIAL,
|
||||||
300,
|
300,
|
||||||
True,
|
True,
|
||||||
),
|
),
|
||||||
SERVICE_RESTORE_FULL: (
|
SERVICE_RESTORE_FULL: APIEndpointSettings(
|
||||||
"/backups/{slug}/restore/full",
|
"/backups/{slug}/restore/full",
|
||||||
SCHEMA_RESTORE_FULL,
|
SCHEMA_RESTORE_FULL,
|
||||||
300,
|
300,
|
||||||
True,
|
True,
|
||||||
),
|
),
|
||||||
SERVICE_RESTORE_PARTIAL: (
|
SERVICE_RESTORE_PARTIAL: APIEndpointSettings(
|
||||||
"/backups/{slug}/restore/partial",
|
"/backups/{slug}/restore/partial",
|
||||||
SCHEMA_RESTORE_PARTIAL,
|
SCHEMA_RESTORE_PARTIAL,
|
||||||
300,
|
300,
|
||||||
True,
|
True,
|
||||||
),
|
),
|
||||||
SERVICE_SNAPSHOT_FULL: ("/backups/new/full", SCHEMA_BACKUP_FULL, 300, True),
|
SERVICE_SNAPSHOT_FULL: APIEndpointSettings(
|
||||||
SERVICE_SNAPSHOT_PARTIAL: (
|
"/backups/new/full",
|
||||||
|
SCHEMA_BACKUP_FULL,
|
||||||
|
300,
|
||||||
|
True,
|
||||||
|
),
|
||||||
|
SERVICE_SNAPSHOT_PARTIAL: APIEndpointSettings(
|
||||||
"/backups/new/partial",
|
"/backups/new/partial",
|
||||||
SCHEMA_BACKUP_PARTIAL,
|
SCHEMA_BACKUP_PARTIAL,
|
||||||
300,
|
300,
|
||||||
@ -466,7 +487,8 @@ async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool: # noqa:
|
|||||||
|
|
||||||
async def async_service_handler(service):
|
async def async_service_handler(service):
|
||||||
"""Handle service calls for Hass.io."""
|
"""Handle service calls for Hass.io."""
|
||||||
api_command = MAP_SERVICE_API[service.service][0]
|
api_endpoint = MAP_SERVICE_API[service.service]
|
||||||
|
|
||||||
if "snapshot" in service.service:
|
if "snapshot" in service.service:
|
||||||
_LOGGER.warning(
|
_LOGGER.warning(
|
||||||
"The service '%s' is deprecated and will be removed in Home Assistant 2021.11, use '%s' instead",
|
"The service '%s' is deprecated and will be removed in Home Assistant 2021.11, use '%s' instead",
|
||||||
@ -488,22 +510,22 @@ async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool: # noqa:
|
|||||||
# Pass data to Hass.io API
|
# Pass data to Hass.io API
|
||||||
if service.service == SERVICE_ADDON_STDIN:
|
if service.service == SERVICE_ADDON_STDIN:
|
||||||
payload = data[ATTR_INPUT]
|
payload = data[ATTR_INPUT]
|
||||||
elif MAP_SERVICE_API[service.service][3]:
|
elif api_endpoint.pass_data:
|
||||||
payload = data
|
payload = data
|
||||||
|
|
||||||
# Call API
|
# Call API
|
||||||
try:
|
try:
|
||||||
await hassio.send_command(
|
await hassio.send_command(
|
||||||
api_command.format(addon=addon, slug=slug),
|
api_endpoint.command.format(addon=addon, slug=slug),
|
||||||
payload=payload,
|
payload=payload,
|
||||||
timeout=MAP_SERVICE_API[service.service][2],
|
timeout=api_endpoint.timeout,
|
||||||
)
|
)
|
||||||
except HassioAPIError as err:
|
except HassioAPIError as err:
|
||||||
_LOGGER.error("Error on Supervisor API: %s", err)
|
_LOGGER.error("Error on Supervisor API: %s", err)
|
||||||
|
|
||||||
for service, settings in MAP_SERVICE_API.items():
|
for service, settings in MAP_SERVICE_API.items():
|
||||||
hass.services.async_register(
|
hass.services.async_register(
|
||||||
DOMAIN, service, async_service_handler, schema=settings[1]
|
DOMAIN, service, async_service_handler, schema=settings.schema
|
||||||
)
|
)
|
||||||
|
|
||||||
async def update_info_data(now):
|
async def update_info_data(now):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user