1 """Coordinator for the Home Assistant alerts integration."""
6 from awesomeversion
import AwesomeVersion, AwesomeVersionStrategy
15 from .const
import DOMAIN, REQUEST_TIMEOUT, UPDATE_INTERVAL
17 _LOGGER = logging.getLogger(__name__)
20 @dataclasses.dataclass(slots=True, frozen=True)
22 """Issue Registry Entry."""
27 date_updated: str |
None
31 """Return the issue id."""
32 return f
"{self.filename}_{self.integration}"
36 """Data fetcher for HA Alerts."""
38 def __init__(self, hass: HomeAssistant) ->
None:
39 """Initialize the data updater."""
44 update_interval=UPDATE_INTERVAL,
48 ensure_strategy=AwesomeVersionStrategy.CALVER,
54 "https://alerts.home-assistant.io/alerts.json",
55 timeout=REQUEST_TIMEOUT,
57 alerts = await response.json()
62 if "integrations" not in alert:
65 if "homeassistant" in alert:
66 if "affected_from_version" in alert[
"homeassistant"]:
67 affected_from_version = AwesomeVersion(
68 alert[
"homeassistant"][
"affected_from_version"],
70 if self.
ha_versionha_version < affected_from_version:
72 if "resolved_in_version" in alert[
"homeassistant"]:
73 resolved_in_version = AwesomeVersion(
74 alert[
"homeassistant"][
"resolved_in_version"],
76 if self.
ha_versionha_version >= resolved_in_version:
79 if self.
supervisorsupervisor
and "supervisor" in alert:
83 if "affected_from_version" in alert[
"supervisor"]:
84 affected_from_version = AwesomeVersion(
85 alert[
"supervisor"][
"affected_from_version"],
87 if supervisor_info[
"version"] < affected_from_version:
89 if "resolved_in_version" in alert[
"supervisor"]:
90 resolved_in_version = AwesomeVersion(
91 alert[
"supervisor"][
"resolved_in_version"],
93 if supervisor_info[
"version"] >= resolved_in_version:
96 for integration
in alert[
"integrations"]:
97 if "package" not in integration:
100 if integration[
"package"]
not in self.
hasshass.config.components:
104 alert_id=alert[
"id"],
105 integration=integration[
"package"],
106 filename=alert[
"filename"],
107 date_updated=alert.get(
"updated"),
110 result[integration_alert.issue_id] = integration_alert
None __init__(self, HomeAssistant hass)
dict[str, IntegrationAlert] _async_update_data(self)
web.Response get(self, web.Request request, str config_key)
dict[str, Any]|None get_supervisor_info(HomeAssistant hass)
bool is_hassio(HomeAssistant hass)
aiohttp.ClientSession async_get_clientsession(HomeAssistant hass, bool verify_ssl=True, socket.AddressFamily family=socket.AF_UNSPEC, ssl_util.SSLCipherList ssl_cipher=ssl_util.SSLCipherList.PYTHON_DEFAULT)