mirror of
https://github.com/home-assistant/core.git
synced 2026-10-06 14:29:21 -04:00
Use enums for tado service names and arguments (#183980)
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
a0de5d63f4
commit
fe2c655f55
@@ -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"
|
||||
|
||||
@@ -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,
|
||||
)
|
||||
|
||||
@@ -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,
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user