async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: """Set up syncthing from a config entry.""" data = entry.data if DOMAIN not in hass.data: hass.data[DOMAIN] = {} client = aiosyncthing.Syncthing( data[CONF_TOKEN], url=data[CONF_URL], verify_ssl=data[CONF_VERIFY_SSL], ) try: status = await client.system.status() except aiosyncthing.exceptions.SyncthingError as exception: await client.close() raise ConfigEntryNotReady from exception server_id = status["myID"] syncthing = SyncthingClient(hass, client, server_id) syncthing.subscribe() hass.data[DOMAIN][entry.entry_id] = syncthing hass.config_entries.async_setup_platforms(entry, PLATFORMS) async def cancel_listen_task(_): await syncthing.unsubscribe() entry.async_on_unload( hass.bus.async_listen_once(EVENT_HOMEASSISTANT_STOP, cancel_listen_task)) return True
async def validate_input(hass: core.HomeAssistant, data): """Validate the user input allows us to connect.""" try: async with aiosyncthing.Syncthing( data[CONF_TOKEN], url=data[CONF_URL], verify_ssl=data[CONF_VERIFY_SSL], loop=hass.loop, ) as client: server_id = (await client.system.status())["myID"] return {"title": f"{data[CONF_URL]}", "server_id": server_id} except aiosyncthing.exceptions.UnauthorizedError as error: raise InvalidAuth from error except Exception as error: raise CannotConnect from error