async def async_setup_entry(hass, config_entry): """Set up Flu Near You as config entry.""" websession = aiohttp_client.async_get_clientsession(hass) fny = FluNearYouData( hass, Client(websession), config_entry.data.get(CONF_LATITUDE, hass.config.latitude), config_entry.data.get(CONF_LONGITUDE, hass.config.longitude), ) await fny.async_update() hass.data[DOMAIN][DATA_CLIENT][config_entry.entry_id] = fny hass.async_create_task( hass.config_entries.async_forward_entry_setup(config_entry, "sensor") ) async def refresh(event_time): """Refresh data from Flu Near You.""" await fny.async_update() hass.data[DOMAIN][DATA_LISTENER][config_entry.entry_id] = async_track_time_interval( hass, refresh, DEFAULT_SCAN_INTERVAL ) return True
async def async_step_user(self, user_input: dict[str, Any] | None = None ) -> FlowResult: """Handle the start of the config flow.""" if not user_input: return self.async_show_form(step_id="user", data_schema=self.data_schema) unique_id = f"{user_input[CONF_LATITUDE]}, {user_input[CONF_LONGITUDE]}" await self.async_set_unique_id(unique_id) self._abort_if_unique_id_configured() websession = aiohttp_client.async_get_clientsession(self.hass) client = Client(session=websession) try: await client.cdc_reports.status_by_coordinates( user_input[CONF_LATITUDE], user_input[CONF_LONGITUDE]) except FluNearYouError as err: LOGGER.error("Error while configuring integration: %s", err) return self.async_show_form(step_id="user", errors={"base": "unknown"}) return self.async_create_entry(title=unique_id, data=user_input)
async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: """Set up Flu Near You as config entry.""" async_create_issue( hass, DOMAIN, "integration_removal", is_fixable=True, severity=IssueSeverity.ERROR, translation_key="integration_removal", ) websession = aiohttp_client.async_get_clientsession(hass) client = Client(session=websession) latitude = entry.data.get(CONF_LATITUDE, hass.config.latitude) longitude = entry.data.get(CONF_LONGITUDE, hass.config.longitude) async def async_update(api_category: str) -> dict[str, Any]: """Get updated date from the API based on category.""" try: if api_category == CATEGORY_CDC_REPORT: data = await client.cdc_reports.status_by_coordinates( latitude, longitude) else: data = await client.user_reports.status_by_coordinates( latitude, longitude) except FluNearYouError as err: raise UpdateFailed(err) from err return data coordinators = {} data_init_tasks = [] for api_category in (CATEGORY_CDC_REPORT, CATEGORY_USER_REPORT): coordinator = coordinators[api_category] = DataUpdateCoordinator( hass, LOGGER, name=f"{api_category} ({latitude}, {longitude})", update_interval=DEFAULT_UPDATE_INTERVAL, update_method=partial(async_update, api_category), ) data_init_tasks.append(coordinator.async_config_entry_first_refresh()) await asyncio.gather(*data_init_tasks) hass.data.setdefault(DOMAIN, {}) hass.data[DOMAIN][entry.entry_id] = coordinators await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS) return True
async def async_setup_entry(hass, config_entry): """Set up Flu Near You as config entry.""" hass.data[DOMAIN][DATA_COORDINATOR][config_entry.entry_id] = {} websession = aiohttp_client.async_get_clientsession(hass) client = Client(websession) latitude = config_entry.data.get(CONF_LATITUDE, hass.config.latitude) longitude = config_entry.data.get(CONF_LONGITUDE, hass.config.longitude) async def async_update(api_category): """Get updated date from the API based on category.""" try: if api_category == CATEGORY_CDC_REPORT: return await client.cdc_reports.status_by_coordinates( latitude, longitude ) return await client.user_reports.status_by_coordinates(latitude, longitude) except FluNearYouError as err: raise UpdateFailed(err) from err data_init_tasks = [] for api_category in [CATEGORY_CDC_REPORT, CATEGORY_USER_REPORT]: coordinator = hass.data[DOMAIN][DATA_COORDINATOR][config_entry.entry_id][ api_category ] = DataUpdateCoordinator( hass, LOGGER, name=f"{api_category} ({latitude}, {longitude})", update_interval=DEFAULT_UPDATE_INTERVAL, update_method=partial(async_update, api_category), ) data_init_tasks.append(coordinator.async_refresh()) await asyncio.gather(*data_init_tasks) for component in PLATFORMS: hass.async_create_task( hass.config_entries.async_forward_entry_setup(config_entry, component) ) return True
async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: """Set up Flu Near You as config entry.""" hass.data.setdefault(DOMAIN, {DATA_COORDINATOR: {}}) hass.data[DOMAIN][DATA_COORDINATOR][entry.entry_id] = {} websession = aiohttp_client.async_get_clientsession(hass) client = Client(session=websession) latitude = entry.data.get(CONF_LATITUDE, hass.config.latitude) longitude = entry.data.get(CONF_LONGITUDE, hass.config.longitude) async def async_update(api_category: str) -> dict[str, Any]: """Get updated date from the API based on category.""" try: if api_category == CATEGORY_CDC_REPORT: data = await client.cdc_reports.status_by_coordinates( latitude, longitude) else: data = await client.user_reports.status_by_coordinates( latitude, longitude) except FluNearYouError as err: raise UpdateFailed(err) from err return data data_init_tasks = [] for api_category in (CATEGORY_CDC_REPORT, CATEGORY_USER_REPORT): coordinator = hass.data[DOMAIN][DATA_COORDINATOR][ entry.entry_id][api_category] = DataUpdateCoordinator( hass, LOGGER, name=f"{api_category} ({latitude}, {longitude})", update_interval=DEFAULT_UPDATE_INTERVAL, update_method=partial(async_update, api_category), ) data_init_tasks.append(coordinator.async_refresh()) await asyncio.gather(*data_init_tasks) hass.config_entries.async_setup_platforms(entry, PLATFORMS) return True
async def async_setup_platform(hass, config, async_add_entities, discovery_info=None): """Configure the platform and add the sensors.""" websession = aiohttp_client.async_get_clientsession(hass) latitude = config.get(CONF_LATITUDE, hass.config.latitude) longitude = config.get(CONF_LONGITUDE, hass.config.longitude) fny = FluNearYouData(Client(websession), latitude, longitude, config[CONF_MONITORED_CONDITIONS]) await fny.async_update() sensors = [ FluNearYouSensor(fny, kind, name, category, icon, unit) for category in config[CONF_MONITORED_CONDITIONS] for kind, name, icon, unit in SENSORS[category] ] async_add_entities(sensors, True)