Home Assistant Unofficial Reference 2024.12.1
coordinator.py
Go to the documentation of this file.
1 """Update coordinator for pyLoad Integration."""
2 
3 from dataclasses import dataclass
4 from datetime import timedelta
5 import logging
6 
7 from pyloadapi import CannotConnect, InvalidAuth, ParserError, PyLoadAPI
8 
9 from homeassistant.config_entries import ConfigEntry
10 from homeassistant.const import CONF_USERNAME
11 from homeassistant.core import HomeAssistant
12 from homeassistant.exceptions import ConfigEntryAuthFailed
13 from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed
14 
15 from .const import DOMAIN
16 
17 _LOGGER = logging.getLogger(__name__)
18 
19 SCAN_INTERVAL = timedelta(seconds=20)
20 
21 
22 @dataclass(kw_only=True)
23 class PyLoadData:
24  """Data from pyLoad."""
25 
26  pause: bool
27  active: int
28  queue: int
29  total: int
30  speed: float
31  download: bool
32  reconnect: bool
33  captcha: bool | None = None
34  free_space: int
35 
36 
38  """pyLoad coordinator."""
39 
40  config_entry: ConfigEntry
41 
42  def __init__(self, hass: HomeAssistant, pyload: PyLoadAPI) -> None:
43  """Initialize pyLoad coordinator."""
44  super().__init__(
45  hass,
46  _LOGGER,
47  name=DOMAIN,
48  update_interval=SCAN_INTERVAL,
49  )
50  self.pyloadpyload = pyload
51  self.versionversion: str | None = None
52 
53  async def _async_update_data(self) -> PyLoadData:
54  """Fetch data from API endpoint."""
55  try:
56  if not self.versionversion:
57  self.versionversion = await self.pyloadpyload.version()
58  return PyLoadData(
59  **await self.pyloadpyload.get_status(),
60  free_space=await self.pyloadpyload.free_space(),
61  )
62 
63  except InvalidAuth as e:
64  try:
65  await self.pyloadpyload.login()
66  except InvalidAuth as exc:
68  translation_domain=DOMAIN,
69  translation_key="setup_authentication_exception",
70  translation_placeholders={CONF_USERNAME: self.pyloadpyload.username},
71  ) from exc
72 
73  raise UpdateFailed(
74  "Unable to retrieve data due to cookie expiration"
75  ) from e
76  except CannotConnect as e:
77  raise UpdateFailed(
78  "Unable to connect and retrieve data from pyLoad API"
79  ) from e
80  except ParserError as e:
81  raise UpdateFailed("Unable to parse data from pyLoad API") from e
None __init__(self, HomeAssistant hass, PyLoadAPI pyload)
Definition: coordinator.py:42
def get_status(hass, host, port)
Definition: panel.py:387