1 """Support for UpCloud."""
3 from __future__
import annotations
6 from datetime
import timedelta
9 import requests.exceptions
22 async_dispatcher_connect,
23 async_dispatcher_send,
27 CONFIG_ENTRY_UPDATE_SIGNAL_TEMPLATE,
29 DEFAULT_SCAN_INTERVAL,
31 from .coordinator
import UpCloudDataUpdateCoordinator
33 _LOGGER = logging.getLogger(__name__)
35 PLATFORMS = [Platform.BINARY_SENSOR, Platform.SWITCH]
38 @dataclasses.dataclass
40 """Home Assistant UpCloud runtime data."""
42 coordinators: dict[str, UpCloudDataUpdateCoordinator] = dataclasses.field(
48 """Get signal name for updates to a config entry."""
49 return CONFIG_ENTRY_UPDATE_SIGNAL_TEMPLATE.format(config_entry.unique_id)
53 hass: HomeAssistant, config_entry: ConfigEntry
55 """Signal config entry options update."""
62 """Set up the UpCloud config entry."""
64 manager = upcloud_api.CloudManager(
65 entry.data[CONF_USERNAME], entry.data[CONF_PASSWORD]
69 await hass.async_add_executor_job(manager.authenticate)
70 except upcloud_api.UpCloudAPIError:
71 _LOGGER.exception(
"Authentication failed")
73 except requests.exceptions.RequestException
as err:
74 _LOGGER.exception(
"Failed to connect")
75 raise ConfigEntryNotReady
from err
77 if entry.options.get(CONF_SCAN_INTERVAL):
78 update_interval =
timedelta(seconds=entry.options[CONF_SCAN_INTERVAL])
80 update_interval = DEFAULT_SCAN_INTERVAL
84 update_interval=update_interval,
85 cloud_manager=manager,
86 username=entry.data[CONF_USERNAME],
90 await coordinator.async_config_entry_first_refresh()
93 entry.async_on_unload(entry.add_update_listener(_async_signal_options_update))
94 entry.async_on_unload(
98 coordinator.async_update_config,
103 hass.data[DATA_UPCLOUD].coordinators[entry.data[CONF_USERNAME]] = coordinator
106 await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
112 """Unload the config entry."""
113 unload_ok = await hass.config_entries.async_unload_platforms(
114 config_entry, PLATFORMS
117 hass.data[DATA_UPCLOUD].coordinators.pop(config_entry.data[CONF_USERNAME])
None _async_signal_options_update(HomeAssistant hass, ConfigEntry config_entry)
str _config_entry_update_signal_name(ConfigEntry config_entry)
bool async_setup_entry(HomeAssistant hass, ConfigEntry entry)
bool async_unload_entry(HomeAssistant hass, ConfigEntry config_entry)
Callable[[], None] async_dispatcher_connect(HomeAssistant hass, str signal, Callable[..., Any] target)
None async_dispatcher_send(HomeAssistant hass, str signal, *Any args)