Use enums for tado service names and arguments (#183980)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
epenet
2026-10-02 09:35:44 +02:00
committed by GitHub
co-authored by Claude Opus 5.5
parent a0de5d63f4
commit fe2c655f55
3 changed files with 45 additions and 35 deletions
-3
View File
@@ -226,9 +226,6 @@ HA_TERMINATION_DURATION = "default_overlay_seconds"
TADO_DEFAULT_MIN_TEMP = 5
TADO_DEFAULT_MAX_TEMP = 40
# Constants for service calls
SERVICE_ADD_METER_READING = "add_meter_reading"
CONF_CONFIG_ENTRY = "config_entry"
CONF_READING = "reading"
ATTR_MESSAGE = "message"
WATER_HEATER_FALLBACK_REPAIR = "water_heater_fallback"
+30 -13
View File
@@ -1,5 +1,6 @@
"""Services for the Tado integration."""
from enum import StrEnum
import logging
import probatio
@@ -8,39 +9,52 @@ from homeassistant.core import HomeAssistant, ServiceCall, callback
from homeassistant.exceptions import HomeAssistantError
from homeassistant.helpers import selector, service
from .const import (
ATTR_MESSAGE,
CONF_CONFIG_ENTRY,
CONF_READING,
DOMAIN,
SERVICE_ADD_METER_READING,
)
from .const import ATTR_MESSAGE, DOMAIN
from .coordinator import TadoConfigEntry
_LOGGER = logging.getLogger(__name__)
class TadoService(StrEnum):
"""Store keys for Tado services."""
ADD_METER_READING = "add_meter_reading"
class TadoServiceArgument(StrEnum):
"""Store keys for Tado service arguments."""
CONFIG_ENTRY = "config_entry"
READING = "reading"
SCHEMA_ADD_METER_READING = probatio.Schema(
{
probatio.Required(CONF_CONFIG_ENTRY): selector.ConfigEntrySelector(
probatio.Required(
TadoServiceArgument.CONFIG_ENTRY
): selector.ConfigEntrySelector(
{
"integration": DOMAIN,
}
),
probatio.Required(CONF_READING): probatio.Coerce(int),
probatio.Required(TadoServiceArgument.READING): probatio.Coerce(int),
}
)
async def _add_meter_reading(call: ServiceCall) -> None:
"""Send meter reading to Tado."""
reading: int = call.data[CONF_READING]
reading: int = call.data[TadoServiceArgument.READING]
_LOGGER.debug("Add meter reading %s", reading)
entry: TadoConfigEntry = service.async_get_config_entry(
call.hass, DOMAIN, call.data[CONF_CONFIG_ENTRY]
call.hass, DOMAIN, call.data[TadoServiceArgument.CONFIG_ENTRY]
)
coordinator = entry.runtime_data
response: dict = await coordinator.set_meter_reading(call.data[CONF_READING])
response: dict = await coordinator.set_meter_reading(
call.data[TadoServiceArgument.READING]
)
if ATTR_MESSAGE in response:
raise HomeAssistantError(response[ATTR_MESSAGE])
@@ -51,5 +65,8 @@ def async_setup_services(hass: HomeAssistant) -> None:
"""Set up the services for the Tado integration."""
hass.services.async_register(
DOMAIN, SERVICE_ADD_METER_READING, _add_meter_reading, SCHEMA_ADD_METER_READING
DOMAIN,
TadoService.ADD_METER_READING,
_add_meter_reading,
SCHEMA_ADD_METER_READING,
)
+15 -19
View File
@@ -6,12 +6,8 @@ from unittest.mock import patch
import pytest
from requests.exceptions import RequestException
from homeassistant.components.tado.const import (
CONF_CONFIG_ENTRY,
CONF_READING,
DOMAIN,
SERVICE_ADD_METER_READING,
)
from homeassistant.components.tado.const import DOMAIN
from homeassistant.components.tado.services import TadoService, TadoServiceArgument
from homeassistant.core import HomeAssistant
from homeassistant.exceptions import HomeAssistantError
@@ -24,7 +20,7 @@ async def test_has_services(
) -> None:
"""Test the existence of the Tado Service."""
assert hass.services.has_service(DOMAIN, SERVICE_ADD_METER_READING)
assert hass.services.has_service(DOMAIN, TadoService.ADD_METER_READING)
@pytest.mark.usefixtures("init_integration")
@@ -41,10 +37,10 @@ async def test_add_meter_readings(
):
response: None = await hass.services.async_call(
DOMAIN,
SERVICE_ADD_METER_READING,
TadoService.ADD_METER_READING,
service_data={
CONF_CONFIG_ENTRY: config_entry.entry_id,
CONF_READING: 1234,
TadoServiceArgument.CONFIG_ENTRY: config_entry.entry_id,
TadoServiceArgument.READING: 1234,
},
blocking=True,
)
@@ -67,10 +63,10 @@ async def test_add_meter_readings_exception(
):
await hass.services.async_call(
DOMAIN,
SERVICE_ADD_METER_READING,
TadoService.ADD_METER_READING,
service_data={
CONF_CONFIG_ENTRY: config_entry.entry_id,
CONF_READING: 1234,
TadoServiceArgument.CONFIG_ENTRY: config_entry.entry_id,
TadoServiceArgument.READING: 1234,
},
blocking=True,
)
@@ -97,10 +93,10 @@ async def test_add_meter_readings_invalid(
):
await hass.services.async_call(
DOMAIN,
SERVICE_ADD_METER_READING,
TadoService.ADD_METER_READING,
service_data={
CONF_CONFIG_ENTRY: config_entry.entry_id,
CONF_READING: 1234,
TadoServiceArgument.CONFIG_ENTRY: config_entry.entry_id,
TadoServiceArgument.READING: 1234,
},
blocking=True,
)
@@ -127,10 +123,10 @@ async def test_add_meter_readings_duplicate(
):
await hass.services.async_call(
DOMAIN,
SERVICE_ADD_METER_READING,
TadoService.ADD_METER_READING,
service_data={
CONF_CONFIG_ENTRY: config_entry.entry_id,
CONF_READING: 1234,
TadoServiceArgument.CONFIG_ENTRY: config_entry.entry_id,
TadoServiceArgument.READING: 1234,
},
blocking=True,
)