async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: """Set up OctoPrint from a config entry.""" if DOMAIN not in hass.data: hass.data[DOMAIN] = {} if CONF_VERIFY_SSL not in entry.data: data = {**entry.data, CONF_VERIFY_SSL: True} hass.config_entries.async_update_entry(entry, data=data) verify_ssl = entry.data[CONF_VERIFY_SSL] websession = async_get_clientsession(hass, verify_ssl=verify_ssl) client = OctoprintClient( entry.data[CONF_HOST], websession, entry.data[CONF_PORT], entry.data[CONF_SSL], entry.data[CONF_PATH], ) client.set_api_key(entry.data[CONF_API_KEY]) coordinator = OctoprintDataUpdateCoordinator(hass, client, entry, 30) await coordinator.async_config_entry_first_refresh() hass.data[DOMAIN][entry.entry_id] = { "coordinator": coordinator, "client": client, } hass.config_entries.async_setup_platforms(entry, PLATFORMS) return True
def _get_octoprint_client(self, user_input: dict) -> OctoprintClient: """Build an octoprint client from the user_input.""" verify_ssl = user_input.get(CONF_VERIFY_SSL, True) session = async_get_clientsession(self.hass, verify_ssl=verify_ssl) return OctoprintClient( user_input[CONF_HOST], session, user_input[CONF_PORT], user_input[CONF_SSL], user_input[CONF_PATH], )
async def _finish_config(self, user_input): """Finish the configuration setup.""" session = async_get_clientsession(self.hass) octoprint = OctoprintClient( user_input[CONF_HOST], session, user_input[CONF_PORT], user_input[CONF_SSL], user_input[CONF_PATH], ) octoprint.set_api_key(user_input[CONF_API_KEY]) try: discovery = await octoprint.get_discovery_info() except ApiError as err: _LOGGER.error("Failed to connect to printer") raise CannotConnect from err await self.async_set_unique_id(discovery.upnp_uuid, raise_on_progress=False) self._abort_if_unique_id_configured() return self.async_create_entry(title=user_input[CONF_HOST], data=user_input)
async def _async_get_auth_key(self, user_input: dict): """Get application api key.""" session = async_get_clientsession(self.hass) octoprint = OctoprintClient( user_input[CONF_HOST], session, user_input[CONF_PORT], user_input[CONF_SSL], user_input[CONF_PATH], ) try: user_input[CONF_API_KEY] = await octoprint.request_app_key( "Home Assistant", user_input[CONF_USERNAME], 30) finally: # Continue the flow after show progress when the task is done. self.hass.async_create_task( self.hass.config_entries.flow.async_configure( flow_id=self.flow_id, user_input=user_input))