Move pure_energie coordinator to separate module (#117560)
This commit is contained in:
parent
e168cb96e9
commit
d670f1d81d
6 changed files with 58 additions and 48 deletions
|
@ -2,18 +2,13 @@
|
||||||
|
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from typing import NamedTuple
|
|
||||||
|
|
||||||
from gridnet import Device, GridNet, SmartBridge
|
|
||||||
|
|
||||||
from homeassistant.config_entries import ConfigEntry
|
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.core import HomeAssistant
|
||||||
from homeassistant.exceptions import ConfigEntryNotReady
|
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]
|
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):
|
if unload_ok := await hass.config_entries.async_unload_platforms(entry, PLATFORMS):
|
||||||
del hass.data[DOMAIN][entry.entry_id]
|
del hass.data[DOMAIN][entry.entry_id]
|
||||||
return unload_ok
|
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(),
|
|
||||||
)
|
|
||||||
|
|
51
homeassistant/components/pure_energie/coordinator.py
Normal file
51
homeassistant/components/pure_energie/coordinator.py
Normal file
|
@ -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(),
|
||||||
|
)
|
|
@ -10,8 +10,8 @@ from homeassistant.config_entries import ConfigEntry
|
||||||
from homeassistant.const import CONF_HOST
|
from homeassistant.const import CONF_HOST
|
||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
|
|
||||||
from . import PureEnergieDataUpdateCoordinator
|
|
||||||
from .const import DOMAIN
|
from .const import DOMAIN
|
||||||
|
from .coordinator import PureEnergieDataUpdateCoordinator
|
||||||
|
|
||||||
TO_REDACT = {
|
TO_REDACT = {
|
||||||
CONF_HOST,
|
CONF_HOST,
|
||||||
|
|
|
@ -19,8 +19,8 @@ from homeassistant.helpers.device_registry import DeviceInfo
|
||||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||||
from homeassistant.helpers.update_coordinator import CoordinatorEntity
|
from homeassistant.helpers.update_coordinator import CoordinatorEntity
|
||||||
|
|
||||||
from . import PureEnergieData, PureEnergieDataUpdateCoordinator
|
|
||||||
from .const import DOMAIN
|
from .const import DOMAIN
|
||||||
|
from .coordinator import PureEnergieData, PureEnergieDataUpdateCoordinator
|
||||||
|
|
||||||
|
|
||||||
@dataclass(frozen=True, kw_only=True)
|
@dataclass(frozen=True, kw_only=True)
|
||||||
|
|
|
@ -53,7 +53,7 @@ def mock_pure_energie_config_flow(
|
||||||
def mock_pure_energie():
|
def mock_pure_energie():
|
||||||
"""Return a mocked Pure Energie client."""
|
"""Return a mocked Pure Energie client."""
|
||||||
with patch(
|
with patch(
|
||||||
"homeassistant.components.pure_energie.GridNet", autospec=True
|
"homeassistant.components.pure_energie.coordinator.GridNet", autospec=True
|
||||||
) as pure_energie_mock:
|
) as pure_energie_mock:
|
||||||
pure_energie = pure_energie_mock.return_value
|
pure_energie = pure_energie_mock.return_value
|
||||||
pure_energie.smartbridge = AsyncMock(
|
pure_energie.smartbridge = AsyncMock(
|
||||||
|
|
|
@ -37,7 +37,7 @@ async def test_load_unload_config_entry(
|
||||||
|
|
||||||
|
|
||||||
@patch(
|
@patch(
|
||||||
"homeassistant.components.pure_energie.GridNet._request",
|
"homeassistant.components.pure_energie.coordinator.GridNet._request",
|
||||||
side_effect=GridNetConnectionError,
|
side_effect=GridNetConnectionError,
|
||||||
)
|
)
|
||||||
async def test_config_entry_not_ready(
|
async def test_config_entry_not_ready(
|
||||||
|
|
Loading…
Add table
Reference in a new issue