Home Assistant Unofficial Reference 2024.12.1
__init__.py
Go to the documentation of this file.
1 """The islamic_prayer_times component."""
2 
3 from __future__ import annotations
4 
5 import logging
6 
7 from homeassistant.config_entries import ConfigEntry
8 from homeassistant.const import CONF_LATITUDE, CONF_LONGITUDE, Platform
9 from homeassistant.core import HomeAssistant, callback
10 from homeassistant.helpers import entity_registry as er
11 
12 from .coordinator import IslamicPrayerDataUpdateCoordinator
13 
14 PLATFORMS = [Platform.SENSOR]
15 
16 
17 _LOGGER = logging.getLogger(__name__)
18 
19 type IslamicPrayerTimesConfigEntry = ConfigEntry[IslamicPrayerDataUpdateCoordinator]
20 
21 
23  hass: HomeAssistant, config_entry: IslamicPrayerTimesConfigEntry
24 ) -> bool:
25  """Set up the Islamic Prayer Component."""
26 
27  @callback
28  def update_unique_id(
29  entity_entry: er.RegistryEntry,
30  ) -> dict[str, str] | None:
31  """Update unique ID of entity entry."""
32  if not entity_entry.unique_id.startswith(f"{config_entry.entry_id}-"):
33  new_unique_id = f"{config_entry.entry_id}-{entity_entry.unique_id}"
34  return {"new_unique_id": new_unique_id}
35  return None
36 
37  await er.async_migrate_entries(hass, config_entry.entry_id, update_unique_id)
38 
39  coordinator = IslamicPrayerDataUpdateCoordinator(hass)
40  await coordinator.async_config_entry_first_refresh()
41 
42  config_entry.runtime_data = coordinator
43  config_entry.async_on_unload(
44  config_entry.add_update_listener(async_options_updated)
45  )
46  await hass.config_entries.async_forward_entry_setups(config_entry, PLATFORMS)
47 
48  return True
49 
50 
51 async def async_migrate_entry(hass: HomeAssistant, config_entry: ConfigEntry) -> bool:
52  """Migrate old entry."""
53  _LOGGER.debug("Migrating from version %s", config_entry.version)
54 
55  if config_entry.version > 1:
56  # This means the user has downgraded from a future version
57  return False
58  if config_entry.version == 1:
59  new = {**config_entry.data}
60  if config_entry.minor_version < 2:
61  lat = hass.config.latitude
62  lon = hass.config.longitude
63  new = {
64  CONF_LATITUDE: lat,
65  CONF_LONGITUDE: lon,
66  }
67  unique_id = f"{lat}-{lon}"
68  hass.config_entries.async_update_entry(
69  config_entry, data=new, unique_id=unique_id, version=1, minor_version=2
70  )
71 
72  _LOGGER.debug("Migration to version %s successful", config_entry.version)
73 
74  return True
75 
76 
78  hass: HomeAssistant, config_entry: IslamicPrayerTimesConfigEntry
79 ) -> bool:
80  """Unload Islamic Prayer entry from config_entry."""
81  if unload_ok := await hass.config_entries.async_unload_platforms(
82  config_entry, PLATFORMS
83  ):
84  coordinator = config_entry.runtime_data
85  if coordinator.event_unsub:
86  coordinator.event_unsub()
87  return unload_ok
88 
89 
91  hass: HomeAssistant, entry: IslamicPrayerTimesConfigEntry
92 ) -> None:
93  """Triggered by config entry options updates."""
94  coordinator = entry.runtime_data
95  if coordinator.event_unsub:
96  coordinator.event_unsub()
97  await coordinator.async_request_refresh()
dict[str, str]|None update_unique_id(er.RegistryEntry entity_entry, str unique_id)
Definition: __init__.py:168
bool async_unload_entry(HomeAssistant hass, IslamicPrayerTimesConfigEntry config_entry)
Definition: __init__.py:79
bool async_setup_entry(HomeAssistant hass, IslamicPrayerTimesConfigEntry config_entry)
Definition: __init__.py:24
bool async_migrate_entry(HomeAssistant hass, ConfigEntry config_entry)
Definition: __init__.py:51
None async_options_updated(HomeAssistant hass, IslamicPrayerTimesConfigEntry entry)
Definition: __init__.py:92