mirror of
https://github.com/home-assistant/core.git
synced 2025-07-16 01:37:08 +00:00
Move tolo coordinator to separate module (#126550)
* Move tolo coordinator to separate module * Adjust tests
This commit is contained in:
parent
6d83a15ad5
commit
d101fb33b3
@ -2,18 +2,12 @@
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from datetime import timedelta
|
||||
import logging
|
||||
from typing import NamedTuple
|
||||
|
||||
from tololib import ToloClient, ToloSettings, ToloStatus
|
||||
|
||||
from homeassistant.config_entries import ConfigEntry
|
||||
from homeassistant.const import CONF_HOST, Platform
|
||||
from homeassistant.const import Platform
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed
|
||||
|
||||
from .const import DEFAULT_RETRY_COUNT, DEFAULT_RETRY_TIMEOUT, DOMAIN
|
||||
from .const import DOMAIN
|
||||
from .coordinator import ToloSaunaUpdateCoordinator
|
||||
|
||||
PLATFORMS = [
|
||||
Platform.BINARY_SENSOR,
|
||||
@ -27,8 +21,6 @@ PLATFORMS = [
|
||||
Platform.SWITCH,
|
||||
]
|
||||
|
||||
_LOGGER = logging.getLogger(__name__)
|
||||
|
||||
|
||||
async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
|
||||
"""Set up tolo from a config entry."""
|
||||
@ -48,39 +40,3 @@ async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
|
||||
hass.data[DOMAIN].pop(entry.entry_id)
|
||||
|
||||
return unload_ok
|
||||
|
||||
|
||||
class ToloSaunaData(NamedTuple):
|
||||
"""Compound class for reflecting full state (status and info) of a TOLO Sauna."""
|
||||
|
||||
status: ToloStatus
|
||||
settings: ToloSettings
|
||||
|
||||
|
||||
class ToloSaunaUpdateCoordinator(DataUpdateCoordinator[ToloSaunaData]): # pylint: disable=hass-enforce-class-module
|
||||
"""DataUpdateCoordinator for TOLO Sauna."""
|
||||
|
||||
def __init__(self, hass: HomeAssistant, entry: ConfigEntry) -> None:
|
||||
"""Initialize ToloSaunaUpdateCoordinator."""
|
||||
self.client = ToloClient(
|
||||
address=entry.data[CONF_HOST],
|
||||
retry_timeout=DEFAULT_RETRY_TIMEOUT,
|
||||
retry_count=DEFAULT_RETRY_COUNT,
|
||||
)
|
||||
super().__init__(
|
||||
hass=hass,
|
||||
logger=_LOGGER,
|
||||
name=f"{entry.title} ({entry.data[CONF_HOST]}) Data Update Coordinator",
|
||||
update_interval=timedelta(seconds=5),
|
||||
)
|
||||
|
||||
async def _async_update_data(self) -> ToloSaunaData:
|
||||
return await self.hass.async_add_executor_job(self._get_tolo_sauna_data)
|
||||
|
||||
def _get_tolo_sauna_data(self) -> ToloSaunaData:
|
||||
try:
|
||||
status = self.client.get_status()
|
||||
settings = self.client.get_settings()
|
||||
except TimeoutError as error:
|
||||
raise UpdateFailed("communication timeout") from error
|
||||
return ToloSaunaData(status, settings)
|
||||
|
@ -9,8 +9,8 @@ from homeassistant.const import EntityCategory
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||
|
||||
from . import ToloSaunaUpdateCoordinator
|
||||
from .const import DOMAIN
|
||||
from .coordinator import ToloSaunaUpdateCoordinator
|
||||
from .entity import ToloSaunaCoordinatorEntity
|
||||
|
||||
|
||||
|
@ -8,8 +8,8 @@ from homeassistant.const import EntityCategory
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||
|
||||
from . import ToloSaunaUpdateCoordinator
|
||||
from .const import DOMAIN
|
||||
from .coordinator import ToloSaunaUpdateCoordinator
|
||||
from .entity import ToloSaunaCoordinatorEntity
|
||||
|
||||
|
||||
|
@ -25,8 +25,8 @@ from homeassistant.const import ATTR_TEMPERATURE, PRECISION_WHOLE, UnitOfTempera
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||
|
||||
from . import ToloSaunaUpdateCoordinator
|
||||
from .const import DOMAIN
|
||||
from .coordinator import ToloSaunaUpdateCoordinator
|
||||
from .entity import ToloSaunaCoordinatorEntity
|
||||
|
||||
|
||||
|
54
homeassistant/components/tolo/coordinator.py
Normal file
54
homeassistant/components/tolo/coordinator.py
Normal file
@ -0,0 +1,54 @@
|
||||
"""Component to control TOLO Sauna/Steam Bath."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from datetime import timedelta
|
||||
import logging
|
||||
from typing import NamedTuple
|
||||
|
||||
from tololib import ToloClient, ToloSettings, ToloStatus
|
||||
|
||||
from homeassistant.config_entries import ConfigEntry
|
||||
from homeassistant.const import CONF_HOST
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed
|
||||
|
||||
from .const import DEFAULT_RETRY_COUNT, DEFAULT_RETRY_TIMEOUT
|
||||
|
||||
_LOGGER = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class ToloSaunaData(NamedTuple):
|
||||
"""Compound class for reflecting full state (status and info) of a TOLO Sauna."""
|
||||
|
||||
status: ToloStatus
|
||||
settings: ToloSettings
|
||||
|
||||
|
||||
class ToloSaunaUpdateCoordinator(DataUpdateCoordinator[ToloSaunaData]):
|
||||
"""DataUpdateCoordinator for TOLO Sauna."""
|
||||
|
||||
def __init__(self, hass: HomeAssistant, entry: ConfigEntry) -> None:
|
||||
"""Initialize ToloSaunaUpdateCoordinator."""
|
||||
self.client = ToloClient(
|
||||
address=entry.data[CONF_HOST],
|
||||
retry_timeout=DEFAULT_RETRY_TIMEOUT,
|
||||
retry_count=DEFAULT_RETRY_COUNT,
|
||||
)
|
||||
super().__init__(
|
||||
hass=hass,
|
||||
logger=_LOGGER,
|
||||
name=f"{entry.title} ({entry.data[CONF_HOST]}) Data Update Coordinator",
|
||||
update_interval=timedelta(seconds=5),
|
||||
)
|
||||
|
||||
async def _async_update_data(self) -> ToloSaunaData:
|
||||
return await self.hass.async_add_executor_job(self._get_tolo_sauna_data)
|
||||
|
||||
def _get_tolo_sauna_data(self) -> ToloSaunaData:
|
||||
try:
|
||||
status = self.client.get_status()
|
||||
settings = self.client.get_settings()
|
||||
except TimeoutError as error:
|
||||
raise UpdateFailed("communication timeout") from error
|
||||
return ToloSaunaData(status, settings)
|
@ -6,8 +6,8 @@ from homeassistant.config_entries import ConfigEntry
|
||||
from homeassistant.helpers.device_registry import DeviceInfo
|
||||
from homeassistant.helpers.update_coordinator import CoordinatorEntity
|
||||
|
||||
from . import ToloSaunaUpdateCoordinator
|
||||
from .const import DOMAIN
|
||||
from .coordinator import ToloSaunaUpdateCoordinator
|
||||
|
||||
|
||||
class ToloSaunaCoordinatorEntity(CoordinatorEntity[ToloSaunaUpdateCoordinator]):
|
||||
|
@ -9,8 +9,8 @@ from homeassistant.config_entries import ConfigEntry
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||
|
||||
from . import ToloSaunaUpdateCoordinator
|
||||
from .const import DOMAIN
|
||||
from .coordinator import ToloSaunaUpdateCoordinator
|
||||
from .entity import ToloSaunaCoordinatorEntity
|
||||
|
||||
|
||||
|
@ -9,8 +9,8 @@ from homeassistant.config_entries import ConfigEntry
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||
|
||||
from . import ToloSaunaUpdateCoordinator
|
||||
from .const import DOMAIN
|
||||
from .coordinator import ToloSaunaUpdateCoordinator
|
||||
from .entity import ToloSaunaCoordinatorEntity
|
||||
|
||||
|
||||
|
@ -20,8 +20,8 @@ from homeassistant.const import EntityCategory, UnitOfTime
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||
|
||||
from . import ToloSaunaUpdateCoordinator
|
||||
from .const import DOMAIN
|
||||
from .coordinator import ToloSaunaUpdateCoordinator
|
||||
from .entity import ToloSaunaCoordinatorEntity
|
||||
|
||||
|
||||
|
@ -13,8 +13,8 @@ from homeassistant.const import EntityCategory
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||
|
||||
from . import ToloSaunaUpdateCoordinator
|
||||
from .const import DOMAIN, AromaTherapySlot, LampMode
|
||||
from .coordinator import ToloSaunaUpdateCoordinator
|
||||
from .entity import ToloSaunaCoordinatorEntity
|
||||
|
||||
|
||||
|
@ -23,8 +23,8 @@ from homeassistant.const import (
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||
|
||||
from . import ToloSaunaUpdateCoordinator
|
||||
from .const import DOMAIN
|
||||
from .coordinator import ToloSaunaUpdateCoordinator
|
||||
from .entity import ToloSaunaCoordinatorEntity
|
||||
|
||||
|
||||
|
@ -13,8 +13,8 @@ from homeassistant.config_entries import ConfigEntry
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||
|
||||
from . import ToloSaunaUpdateCoordinator
|
||||
from .const import DOMAIN
|
||||
from .coordinator import ToloSaunaUpdateCoordinator
|
||||
from .entity import ToloSaunaCoordinatorEntity
|
||||
|
||||
|
||||
|
@ -31,7 +31,7 @@ def coordinator_toloclient() -> Mock:
|
||||
Throw exception to abort entry setup and prevent socket IO. Only testing config flow.
|
||||
"""
|
||||
with patch(
|
||||
"homeassistant.components.tolo.ToloClient", side_effect=Exception
|
||||
"homeassistant.components.tolo.coordinator.ToloClient", side_effect=Exception
|
||||
) as toloclient:
|
||||
yield toloclient
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user