From d670f1d81de063b92b36f3a4c51e21e3ca9461aa Mon Sep 17 00:00:00 2001 From: epenet <6771947+epenet@users.noreply.github.com> Date: Thu, 16 May 2024 16:51:25 +0200 Subject: [PATCH] Move pure_energie coordinator to separate module (#117560) --- .../components/pure_energie/__init__.py | 47 ++--------------- .../components/pure_energie/coordinator.py | 51 +++++++++++++++++++ .../components/pure_energie/diagnostics.py | 2 +- .../components/pure_energie/sensor.py | 2 +- tests/components/pure_energie/conftest.py | 2 +- tests/components/pure_energie/test_init.py | 2 +- 6 files changed, 58 insertions(+), 48 deletions(-) create mode 100644 homeassistant/components/pure_energie/coordinator.py diff --git a/homeassistant/components/pure_energie/__init__.py b/homeassistant/components/pure_energie/__init__.py index e018648e95e..459dc5c055c 100644 --- a/homeassistant/components/pure_energie/__init__.py +++ b/homeassistant/components/pure_energie/__init__.py @@ -2,18 +2,13 @@ from __future__ import annotations -from typing import NamedTuple - -from gridnet import Device, GridNet, SmartBridge - 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.exceptions import ConfigEntryNotReady -from homeassistant.helpers.aiohttp_client import async_get_clientsession -from homeassistant.helpers.update_coordinator import DataUpdateCoordinator -from .const import DOMAIN, LOGGER, SCAN_INTERVAL +from .const import DOMAIN +from .coordinator import PureEnergieDataUpdateCoordinator PLATFORMS = [Platform.SENSOR] @@ -39,39 +34,3 @@ async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: if unload_ok := await hass.config_entries.async_unload_platforms(entry, PLATFORMS): del hass.data[DOMAIN][entry.entry_id] return unload_ok - - -class PureEnergieData(NamedTuple): - """Class for defining data in dict.""" - - device: Device - smartbridge: SmartBridge - - -class PureEnergieDataUpdateCoordinator(DataUpdateCoordinator[PureEnergieData]): # pylint: disable=hass-enforce-coordinator-module - """Class to manage fetching Pure Energie data from single eindpoint.""" - - config_entry: ConfigEntry - - def __init__( - self, - hass: HomeAssistant, - ) -> None: - """Initialize global Pure Energie data updater.""" - super().__init__( - hass, - LOGGER, - name=DOMAIN, - update_interval=SCAN_INTERVAL, - ) - - self.gridnet = GridNet( - self.config_entry.data[CONF_HOST], session=async_get_clientsession(hass) - ) - - async def _async_update_data(self) -> PureEnergieData: - """Fetch data from SmartBridge.""" - return PureEnergieData( - device=await self.gridnet.device(), - smartbridge=await self.gridnet.smartbridge(), - ) diff --git a/homeassistant/components/pure_energie/coordinator.py b/homeassistant/components/pure_energie/coordinator.py new file mode 100644 index 00000000000..fdd848eb4c6 --- /dev/null +++ b/homeassistant/components/pure_energie/coordinator.py @@ -0,0 +1,51 @@ +"""Coordinator for the Pure Energie integration.""" + +from __future__ import annotations + +from typing import NamedTuple + +from gridnet import Device, GridNet, SmartBridge + +from homeassistant.config_entries import ConfigEntry +from homeassistant.const import CONF_HOST +from homeassistant.core import HomeAssistant +from homeassistant.helpers.aiohttp_client import async_get_clientsession +from homeassistant.helpers.update_coordinator import DataUpdateCoordinator + +from .const import DOMAIN, LOGGER, SCAN_INTERVAL + + +class PureEnergieData(NamedTuple): + """Class for defining data in dict.""" + + device: Device + smartbridge: SmartBridge + + +class PureEnergieDataUpdateCoordinator(DataUpdateCoordinator[PureEnergieData]): + """Class to manage fetching Pure Energie data from single eindpoint.""" + + config_entry: ConfigEntry + + def __init__( + self, + hass: HomeAssistant, + ) -> None: + """Initialize global Pure Energie data updater.""" + super().__init__( + hass, + LOGGER, + name=DOMAIN, + update_interval=SCAN_INTERVAL, + ) + + self.gridnet = GridNet( + self.config_entry.data[CONF_HOST], session=async_get_clientsession(hass) + ) + + async def _async_update_data(self) -> PureEnergieData: + """Fetch data from SmartBridge.""" + return PureEnergieData( + device=await self.gridnet.device(), + smartbridge=await self.gridnet.smartbridge(), + ) diff --git a/homeassistant/components/pure_energie/diagnostics.py b/homeassistant/components/pure_energie/diagnostics.py index fb93b81a4fd..6e2b8ee7a35 100644 --- a/homeassistant/components/pure_energie/diagnostics.py +++ b/homeassistant/components/pure_energie/diagnostics.py @@ -10,8 +10,8 @@ from homeassistant.config_entries import ConfigEntry from homeassistant.const import CONF_HOST from homeassistant.core import HomeAssistant -from . import PureEnergieDataUpdateCoordinator from .const import DOMAIN +from .coordinator import PureEnergieDataUpdateCoordinator TO_REDACT = { CONF_HOST, diff --git a/homeassistant/components/pure_energie/sensor.py b/homeassistant/components/pure_energie/sensor.py index 7f2c36bc4f6..85f4672a618 100644 --- a/homeassistant/components/pure_energie/sensor.py +++ b/homeassistant/components/pure_energie/sensor.py @@ -19,8 +19,8 @@ from homeassistant.helpers.device_registry import DeviceInfo from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.helpers.update_coordinator import CoordinatorEntity -from . import PureEnergieData, PureEnergieDataUpdateCoordinator from .const import DOMAIN +from .coordinator import PureEnergieData, PureEnergieDataUpdateCoordinator @dataclass(frozen=True, kw_only=True) diff --git a/tests/components/pure_energie/conftest.py b/tests/components/pure_energie/conftest.py index 40e6f803e83..ada8d4d84f7 100644 --- a/tests/components/pure_energie/conftest.py +++ b/tests/components/pure_energie/conftest.py @@ -53,7 +53,7 @@ def mock_pure_energie_config_flow( def mock_pure_energie(): """Return a mocked Pure Energie client.""" with patch( - "homeassistant.components.pure_energie.GridNet", autospec=True + "homeassistant.components.pure_energie.coordinator.GridNet", autospec=True ) as pure_energie_mock: pure_energie = pure_energie_mock.return_value pure_energie.smartbridge = AsyncMock( diff --git a/tests/components/pure_energie/test_init.py b/tests/components/pure_energie/test_init.py index 0a56240aaad..0dbd8a753e6 100644 --- a/tests/components/pure_energie/test_init.py +++ b/tests/components/pure_energie/test_init.py @@ -37,7 +37,7 @@ async def test_load_unload_config_entry( @patch( - "homeassistant.components.pure_energie.GridNet._request", + "homeassistant.components.pure_energie.coordinator.GridNet._request", side_effect=GridNetConnectionError, ) async def test_config_entry_not_ready(