Home Assistant Unofficial Reference 2024.12.1
__init__.py
Go to the documentation of this file.
1 """The Nextcloud integration."""
2 
3 import logging
4 
5 from nextcloudmonitor import (
6  NextcloudMonitor,
7  NextcloudMonitorAuthorizationError,
8  NextcloudMonitorConnectionError,
9  NextcloudMonitorRequestError,
10 )
11 
12 from homeassistant.config_entries import ConfigEntry
13 from homeassistant.const import (
14  CONF_PASSWORD,
15  CONF_URL,
16  CONF_USERNAME,
17  CONF_VERIFY_SSL,
18  Platform,
19 )
20 from homeassistant.core import HomeAssistant
21 from homeassistant.exceptions import ConfigEntryAuthFailed, ConfigEntryNotReady
22 from homeassistant.helpers import entity_registry as er
23 
24 from .coordinator import NextcloudDataUpdateCoordinator
25 
26 PLATFORMS = (Platform.SENSOR, Platform.BINARY_SENSOR, Platform.UPDATE)
27 
28 
29 _LOGGER = logging.getLogger(__name__)
30 
31 type NextcloudConfigEntry = ConfigEntry[NextcloudDataUpdateCoordinator]
32 
33 
34 async def async_setup_entry(hass: HomeAssistant, entry: NextcloudConfigEntry) -> bool:
35  """Set up the Nextcloud integration."""
36 
37  # migrate old entity unique ids
38  entity_reg = er.async_get(hass)
39  entities: list[er.RegistryEntry] = er.async_entries_for_config_entry(
40  entity_reg, entry.entry_id
41  )
42  for entity in entities:
43  old_uid_start = f"{entry.data[CONF_URL]}#nextcloud_"
44  new_uid_start = f"{entry.entry_id}#"
45  if entity.unique_id.startswith(old_uid_start):
46  new_uid = entity.unique_id.replace(old_uid_start, new_uid_start)
47  _LOGGER.debug("migrate unique id '%s' to '%s'", entity.unique_id, new_uid)
48  entity_reg.async_update_entity(entity.entity_id, new_unique_id=new_uid)
49 
50  def _connect_nc():
51  return NextcloudMonitor(
52  entry.data[CONF_URL],
53  entry.data[CONF_USERNAME],
54  entry.data[CONF_PASSWORD],
55  verify_ssl=entry.data[CONF_VERIFY_SSL],
56  skip_update=False,
57  )
58 
59  try:
60  ncm = await hass.async_add_executor_job(_connect_nc)
61  except NextcloudMonitorAuthorizationError as ex:
62  raise ConfigEntryAuthFailed from ex
63  except (NextcloudMonitorConnectionError, NextcloudMonitorRequestError) as ex:
64  raise ConfigEntryNotReady from ex
65 
66  coordinator = NextcloudDataUpdateCoordinator(
67  hass,
68  ncm,
69  entry,
70  )
71 
72  await coordinator.async_config_entry_first_refresh()
73 
74  entry.runtime_data = coordinator
75 
76  await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
77 
78  return True
79 
80 
81 async def async_unload_entry(hass: HomeAssistant, entry: NextcloudConfigEntry) -> bool:
82  """Unload Nextcloud integration."""
83  return await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
bool async_unload_entry(HomeAssistant hass, NextcloudConfigEntry entry)
Definition: __init__.py:81
bool async_setup_entry(HomeAssistant hass, NextcloudConfigEntry entry)
Definition: __init__.py:34