Home Assistant Unofficial Reference 2024.12.1
__init__.py
Go to the documentation of this file.
1 """Initialization of FYTA integration."""
2 
3 from __future__ import annotations
4 
5 from datetime import datetime
6 import logging
7 
8 from fyta_cli.fyta_connector import FytaConnector
9 
10 from homeassistant.config_entries import ConfigEntry
11 from homeassistant.const import (
12  CONF_ACCESS_TOKEN,
13  CONF_PASSWORD,
14  CONF_USERNAME,
15  Platform,
16 )
17 from homeassistant.core import HomeAssistant
18 from homeassistant.helpers.aiohttp_client import async_get_clientsession
19 from homeassistant.util.dt import async_get_time_zone
20 
21 from .const import CONF_EXPIRATION
22 from .coordinator import FytaCoordinator
23 
24 _LOGGER = logging.getLogger(__name__)
25 
26 PLATFORMS = [
27  Platform.SENSOR,
28 ]
29 type FytaConfigEntry = ConfigEntry[FytaCoordinator]
30 
31 
32 async def async_setup_entry(hass: HomeAssistant, entry: FytaConfigEntry) -> bool:
33  """Set up the Fyta integration."""
34  tz: str = hass.config.time_zone
35 
36  username = entry.data[CONF_USERNAME]
37  password = entry.data[CONF_PASSWORD]
38  access_token: str = entry.data[CONF_ACCESS_TOKEN]
39  expiration: datetime = datetime.fromisoformat(
40  entry.data[CONF_EXPIRATION]
41  ).astimezone(await async_get_time_zone(tz))
42 
43  fyta = FytaConnector(
44  username, password, access_token, expiration, tz, async_get_clientsession(hass)
45  )
46 
47  coordinator = FytaCoordinator(hass, fyta)
48 
49  await coordinator.async_config_entry_first_refresh()
50 
51  entry.runtime_data = coordinator
52 
53  await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
54 
55  return True
56 
57 
58 async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
59  """Unload Fyta entity."""
60 
61  return await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
62 
63 
64 async def async_migrate_entry(hass: HomeAssistant, config_entry: ConfigEntry) -> bool:
65  """Migrate old entry."""
66  _LOGGER.debug("Migrating from version %s", config_entry.version)
67 
68  if config_entry.version > 1:
69  # This means the user has downgraded from a future version
70  return False
71 
72  if config_entry.version == 1:
73  if config_entry.minor_version < 2:
74  new = {**config_entry.data}
75  fyta = FytaConnector(
76  config_entry.data[CONF_USERNAME], config_entry.data[CONF_PASSWORD]
77  )
78  credentials = await fyta.login()
79  await fyta.client.close()
80 
81  new[CONF_ACCESS_TOKEN] = credentials.access_token
82  new[CONF_EXPIRATION] = credentials.expiration.isoformat()
83 
84  hass.config_entries.async_update_entry(
85  config_entry, data=new, minor_version=2, version=1
86  )
87 
88  _LOGGER.debug(
89  "Migration to version %s.%s successful",
90  config_entry.version,
91  config_entry.minor_version,
92  )
93 
94  return True
bool async_migrate_entry(HomeAssistant hass, ConfigEntry config_entry)
Definition: __init__.py:64
bool async_unload_entry(HomeAssistant hass, ConfigEntry entry)
Definition: __init__.py:58
bool async_setup_entry(HomeAssistant hass, FytaConfigEntry entry)
Definition: __init__.py:32
aiohttp.ClientSession async_get_clientsession(HomeAssistant hass, bool verify_ssl=True, socket.AddressFamily family=socket.AF_UNSPEC, ssl_util.SSLCipherList ssl_cipher=ssl_util.SSLCipherList.PYTHON_DEFAULT)
zoneinfo.ZoneInfo|None async_get_time_zone(str time_zone_str)
Definition: dt.py:110