Home Assistant Unofficial Reference 2024.12.1
__init__.py
Go to the documentation of this file.
1 """The pyLoad integration."""
2 
3 from __future__ import annotations
4 
5 from aiohttp import CookieJar
6 from pyloadapi.api import PyLoadAPI
7 from pyloadapi.exceptions import CannotConnect, InvalidAuth, ParserError
8 
9 from homeassistant.config_entries import ConfigEntry
10 from homeassistant.const import (
11  CONF_HOST,
12  CONF_PASSWORD,
13  CONF_PORT,
14  CONF_SSL,
15  CONF_USERNAME,
16  CONF_VERIFY_SSL,
17  Platform,
18 )
19 from homeassistant.core import HomeAssistant
20 from homeassistant.exceptions import ConfigEntryAuthFailed, ConfigEntryNotReady
21 from homeassistant.helpers.aiohttp_client import async_create_clientsession
22 
23 from .const import DOMAIN
24 from .coordinator import PyLoadCoordinator
25 
26 PLATFORMS: list[Platform] = [Platform.BUTTON, Platform.SENSOR, Platform.SWITCH]
27 
28 type PyLoadConfigEntry = ConfigEntry[PyLoadCoordinator]
29 
30 
31 async def async_setup_entry(hass: HomeAssistant, entry: PyLoadConfigEntry) -> bool:
32  """Set up pyLoad from a config entry."""
33 
34  url = (
35  f"{"https" if entry.data[CONF_SSL] else "http"}://"
36  f"{entry.data[CONF_HOST]}:{entry.data[CONF_PORT]}/"
37  )
38 
40  hass,
41  verify_ssl=entry.data[CONF_VERIFY_SSL],
42  cookie_jar=CookieJar(unsafe=True),
43  )
44  pyloadapi = PyLoadAPI(
45  session,
46  api_url=url,
47  username=entry.data[CONF_USERNAME],
48  password=entry.data[CONF_PASSWORD],
49  )
50 
51  try:
52  await pyloadapi.login()
53  except CannotConnect as e:
54  raise ConfigEntryNotReady(
55  translation_domain=DOMAIN,
56  translation_key="setup_request_exception",
57  ) from e
58  except ParserError as e:
59  raise ConfigEntryNotReady(
60  translation_domain=DOMAIN,
61  translation_key="setup_parse_exception",
62  ) from e
63  except InvalidAuth as e:
65  translation_domain=DOMAIN,
66  translation_key="setup_authentication_exception",
67  translation_placeholders={CONF_USERNAME: entry.data[CONF_USERNAME]},
68  ) from e
69  coordinator = PyLoadCoordinator(hass, pyloadapi)
70 
71  await coordinator.async_config_entry_first_refresh()
72 
73  entry.runtime_data = coordinator
74  await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
75 
76  return True
77 
78 
79 async def async_unload_entry(hass: HomeAssistant, entry: PyLoadConfigEntry) -> bool:
80  """Unload a config entry."""
81  return await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
bool async_setup_entry(HomeAssistant hass, PyLoadConfigEntry entry)
Definition: __init__.py:31
bool async_unload_entry(HomeAssistant hass, PyLoadConfigEntry entry)
Definition: __init__.py:79
aiohttp.ClientSession async_create_clientsession()
Definition: coordinator.py:51