diff --git a/homeassistant/components/tado/const.py b/homeassistant/components/tado/const.py index abc1695adbd3..6ca81e04d9f7 100644 --- a/homeassistant/components/tado/const.py +++ b/homeassistant/components/tado/const.py @@ -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" diff --git a/homeassistant/components/tado/services.py b/homeassistant/components/tado/services.py index 9b1f7cce0021..01622c946b8f 100644 --- a/homeassistant/components/tado/services.py +++ b/homeassistant/components/tado/services.py @@ -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, ) diff --git a/tests/components/tado/test_services.py b/tests/components/tado/test_services.py index 9830a0d45638..163379d62dc4 100644 --- a/tests/components/tado/test_services.py +++ b/tests/components/tado/test_services.py @@ -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, )