Home Assistant Unofficial Reference 2024.12.1
__init__.py
Go to the documentation of this file.
1 """The rova component."""
2 
3 from __future__ import annotations
4 
5 from requests.exceptions import ConnectTimeout, HTTPError
6 from rova.rova import Rova
7 
8 from homeassistant.config_entries import ConfigEntry
9 from homeassistant.const import Platform
10 from homeassistant.core import HomeAssistant
11 from homeassistant.exceptions import ConfigEntryError, ConfigEntryNotReady
12 from homeassistant.helpers.issue_registry import IssueSeverity, async_create_issue
13 
14 from .const import CONF_HOUSE_NUMBER, CONF_HOUSE_NUMBER_SUFFIX, CONF_ZIP_CODE, DOMAIN
15 from .coordinator import RovaCoordinator
16 
17 PLATFORMS: list[Platform] = [Platform.SENSOR]
18 
19 
20 async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
21  """Set up ROVA from a config entry."""
22 
23  api = Rova(
24  entry.data[CONF_ZIP_CODE],
25  entry.data[CONF_HOUSE_NUMBER],
26  entry.data[CONF_HOUSE_NUMBER_SUFFIX],
27  )
28 
29  try:
30  rova_area = await hass.async_add_executor_job(api.is_rova_area)
31  except (ConnectTimeout, HTTPError) as ex:
32  raise ConfigEntryNotReady from ex
33 
34  if not rova_area:
36  hass,
37  DOMAIN,
38  f"no_rova_area_{entry.data[CONF_ZIP_CODE]}",
39  is_fixable=False,
40  issue_domain=DOMAIN,
41  severity=IssueSeverity.ERROR,
42  translation_key="no_rova_area",
43  translation_placeholders={
44  CONF_ZIP_CODE: entry.data[CONF_ZIP_CODE],
45  },
46  )
47  raise ConfigEntryError("Rova does not collect garbage in this area")
48 
49  coordinator = RovaCoordinator(hass, api)
50 
51  await coordinator.async_config_entry_first_refresh()
52 
53  hass.data.setdefault(DOMAIN, {})[entry.entry_id] = coordinator
54  await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
55  return True
56 
57 
58 async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
59  """Unload ROVA config entry."""
60 
61  if unload_ok := await hass.config_entries.async_unload_platforms(entry, PLATFORMS):
62  hass.data[DOMAIN].pop(entry.entry_id)
63 
64  return unload_ok
None async_create_issue(HomeAssistant hass, str entry_id)
Definition: repairs.py:69
bool async_setup_entry(HomeAssistant hass, ConfigEntry entry)
Definition: __init__.py:20
bool async_unload_entry(HomeAssistant hass, ConfigEntry entry)
Definition: __init__.py:58