Home Assistant Unofficial Reference 2024.12.1
coordinator.py
Go to the documentation of this file.
1 """DataUpdateCoordinator for cert_expiry coordinator."""
2 
3 from __future__ import annotations
4 
5 from datetime import datetime, timedelta
6 import logging
7 
8 from homeassistant.core import HomeAssistant
9 from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed
10 
11 from .const import DEFAULT_PORT
12 from .errors import TemporaryFailure, ValidationFailure
13 from .helper import get_cert_expiry_timestamp
14 
15 _LOGGER = logging.getLogger(__name__)
16 
17 
19  """Class to manage fetching Cert Expiry data from single endpoint."""
20 
21  def __init__(self, hass: HomeAssistant, host: str, port: int) -> None:
22  """Initialize global Cert Expiry data updater."""
23  self.hosthost = host
24  self.portport = port
25  self.cert_errorcert_error: ValidationFailure | None = None
26  self.is_cert_validis_cert_valid = False
27 
28  display_port = f":{port}" if port != DEFAULT_PORT else ""
29  name = f"{self.host}{display_port}"
30 
31  super().__init__(
32  hass,
33  _LOGGER,
34  name=name,
35  update_interval=timedelta(hours=12),
36  always_update=False,
37  )
38 
39  async def _async_update_data(self) -> datetime | None:
40  """Fetch certificate."""
41  try:
42  timestamp = await get_cert_expiry_timestamp(self.hasshass, self.hosthost, self.portport)
43  except TemporaryFailure as err:
44  raise UpdateFailed(err.args[0]) from err
45  except ValidationFailure as err:
46  self.cert_errorcert_error = err
47  self.is_cert_validis_cert_valid = False
48  _LOGGER.error("Certificate validation error: %s [%s]", self.hosthost, err)
49  return None
50 
51  self.cert_errorcert_error = None
52  self.is_cert_validis_cert_valid = True
53  return timestamp
None __init__(self, HomeAssistant hass, str host, int port)
Definition: coordinator.py:21
datetime.datetime get_cert_expiry_timestamp(HomeAssistant hass, str hostname, int port)
Definition: helper.py:47