1 """DataUpdateCoordinator for the nina integration."""
3 from __future__
import annotations
6 from dataclasses
import dataclass
10 from pynina
import ApiError, Nina
16 from .const
import _LOGGER, DOMAIN, SCAN_INTERVAL
21 """Class to hold the warning data."""
28 recommended_actions: str
38 DataUpdateCoordinator[dict[str, list[NinaWarningData]]]
40 """Class to manage fetching NINA data API."""
45 regions: dict[str, str],
50 self._regions: dict[str, str] = regions
52 self.headline_filter: str = headline_filter
53 self.area_filter: str = area_filter
55 for region
in regions:
56 self._nina.addRegion(region)
58 super().
__init__(hass, _LOGGER, name=DOMAIN, update_interval=SCAN_INTERVAL)
62 async
with asyncio.timeout(10):
65 except ApiError
as err:
71 warnings: dict[str, list[Any]],
72 ) -> dict[str, list[Any]]:
73 """Remove warnings with the same title and expires timestamp in a region."""
74 all_filtered_warnings: dict[str, list[Any]] = {}
76 for region_id, raw_warnings
in warnings.items():
77 filtered_warnings: list[Any] = []
78 processed_details: list[tuple[str, str]] = []
80 for raw_warn
in raw_warnings:
81 if (raw_warn.headline, raw_warn.expires)
in processed_details:
84 processed_details.append((raw_warn.headline, raw_warn.expires))
86 filtered_warnings.append(raw_warn)
88 all_filtered_warnings[region_id] = filtered_warnings
90 return all_filtered_warnings
93 """Parse warning data."""
95 return_data: dict[str, list[NinaWarningData]] = {}
100 warnings_for_regions: list[NinaWarningData] = []
102 for raw_warn
in raw_warnings:
104 self.headline_filter, raw_warn.headline, flags=re.IGNORECASE
107 f
"Ignore warning ({raw_warn.id}) by headline filter ({self.headline_filter}) with headline: {raw_warn.headline}"
111 affected_areas_string: str =
", ".join(
112 [
str(area)
for area
in raw_warn.affected_areas]
116 self.area_filter, affected_areas_string, flags=re.IGNORECASE
119 f
"Ignore warning ({raw_warn.id}) by area filter ({self.area_filter}) with area: {affected_areas_string}"
126 raw_warn.description,
129 " ".join([
str(action)
for action
in raw_warn.recommended_actions]),
130 affected_areas_string,
133 raw_warn.start
or "",
134 raw_warn.expires
or "",
137 warnings_for_regions.append(warning_data)
139 return_data[region_id] = warnings_for_regions
dict[str, list[NinaWarningData]] _async_update_data(self)
None __init__(self, HomeAssistant hass, dict[str, str] regions, str headline_filter, str area_filter)
dict[str, list[Any]] _remove_duplicate_warnings(dict[str, list[Any]] warnings)
dict[str, list[NinaWarningData]] _parse_data(self)
IssData update(pyiss.ISS iss)
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)