1 """The Global Disaster Alert and Coordination System (GDACS) integration."""
3 from __future__
import annotations
5 from collections.abc
import Callable
6 from datetime
import datetime, timedelta
9 from aio_georss_client.status_update
import StatusUpdate
10 from aio_georss_gdacs
import GdacsFeedManager
11 from aio_georss_gdacs.feed_entry
import FeedEntry
30 DEFAULT_SCAN_INTERVAL,
36 _LOGGER = logging.getLogger(__name__)
40 """Set up the GDACS component as config entry."""
41 hass.data.setdefault(DOMAIN, {})
42 feeds = hass.data[DOMAIN].setdefault(FEED, {})
44 radius = config_entry.data[CONF_RADIUS]
45 if hass.config.units
is US_CUSTOMARY_SYSTEM:
46 radius = DistanceConverter.convert(
47 radius, UnitOfLength.MILES, UnitOfLength.KILOMETERS
51 feeds[config_entry.entry_id] = manager
52 _LOGGER.debug(
"Feed entity manager added for %s", config_entry.entry_id)
53 await manager.async_init()
58 """Unload an GDACS component config entry."""
59 manager: GdacsFeedEntityManager = hass.data[DOMAIN][FEED].pop(entry.entry_id)
60 await manager.async_stop()
61 return await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
65 """Feed Entity Manager for GDACS feed."""
68 self, hass: HomeAssistant, config_entry: ConfigEntry, radius_in_km: float
70 """Initialize the Feed Entity Manager."""
74 config_entry.data[CONF_LATITUDE],
75 config_entry.data[CONF_LONGITUDE],
77 categories = config_entry.data[CONF_CATEGORIES]
78 websession = aiohttp_client.async_get_clientsession(hass)
85 filter_radius=radius_in_km,
86 filter_categories=categories,
92 self.
_status_info_status_info: StatusUpdate |
None =
None
93 self.
listenerslisteners: list[Callable[[],
None]] = []
96 """Schedule initial and regular updates based on configured time interval."""
98 await self.
_hass_hass.config_entries.async_forward_entry_setups(
102 async
def update(event_time: datetime) ->
None:
111 _LOGGER.debug(
"Feed entity manager initialized")
116 _LOGGER.debug(
"Feed entity manager updated")
119 """Stop this feed entity manager from refreshing."""
120 for unsub_dispatcher
in self.
listenerslisteners:
125 _LOGGER.debug(
"Feed entity manager stopped")
129 """Return manager specific event to signal new entity."""
130 return f
"gdacs_new_geolocation_{self._config_entry_id}"
132 def get_entry(self, external_id: str) -> FeedEntry |
None:
133 """Get feed entry by external id."""
134 return self.
_feed_manager_feed_manager.feed_entries.get(external_id)
137 """Return latest status update info received."""
141 """Generate new entity."""
159 """Propagate status update."""
160 _LOGGER.debug(
"Status update received: %s", status_info)
None _remove_entity(self, str external_id)
str async_event_new_entity(self)
None _status_update(self, StatusUpdate status_info)
None _generate_entity(self, str external_id)
_track_time_remove_callback
None __init__(self, HomeAssistant hass, ConfigEntry config_entry, float radius_in_km)
None _update_entity(self, str external_id)
FeedEntry|None get_entry(self, str external_id)
StatusUpdate|None status_info(self)
bool async_unload_entry(HomeAssistant hass, ConfigEntry entry)
bool async_setup_entry(HomeAssistant hass, ConfigEntry config_entry)
IssData update(pyiss.ISS iss)
None async_dispatcher_send(HomeAssistant hass, str signal, *Any args)
CALLBACK_TYPE async_track_time_interval(HomeAssistant hass, Callable[[datetime], Coroutine[Any, Any, None]|None] action, timedelta interval, *str|None name=None, bool|None cancel_on_shutdown=None)