Home Assistant Unofficial Reference 2024.12.1
__init__.py
Go to the documentation of this file.
1 """Support for RSS/Atom feeds."""
2 
3 from __future__ import annotations
4 
5 import voluptuous as vol
6 
7 from homeassistant.config_entries import SOURCE_IMPORT, ConfigEntry
8 from homeassistant.const import CONF_SCAN_INTERVAL, CONF_URL, Platform
9 from homeassistant.core import DOMAIN as HOMEASSISTANT_DOMAIN, HomeAssistant
11 from homeassistant.helpers.issue_registry import IssueSeverity, async_create_issue
12 from homeassistant.helpers.typing import ConfigType
13 from homeassistant.util.hass_dict import HassKey
14 
15 from .const import CONF_MAX_ENTRIES, DEFAULT_MAX_ENTRIES, DEFAULT_SCAN_INTERVAL, DOMAIN
16 from .coordinator import FeedReaderCoordinator, StoredData
17 
18 type FeedReaderConfigEntry = ConfigEntry[FeedReaderCoordinator]
19 
20 CONF_URLS = "urls"
21 
22 MY_KEY: HassKey[StoredData] = HassKey(DOMAIN)
23 
24 CONFIG_SCHEMA = vol.Schema(
25  vol.All(
26  cv.deprecated(DOMAIN),
27  {
28  DOMAIN: vol.Schema(
29  {
30  vol.Required(CONF_URLS): vol.All(cv.ensure_list, [cv.url]),
31  vol.Optional(
32  CONF_SCAN_INTERVAL, default=DEFAULT_SCAN_INTERVAL
33  ): cv.time_period,
34  vol.Optional(
35  CONF_MAX_ENTRIES, default=DEFAULT_MAX_ENTRIES
36  ): cv.positive_int,
37  }
38  )
39  },
40  ),
41  extra=vol.ALLOW_EXTRA,
42 )
43 
44 
45 async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool:
46  """Set up the Feedreader component."""
47  if DOMAIN in config:
48  for url in config[DOMAIN][CONF_URLS]:
49  hass.async_create_task(
50  hass.config_entries.flow.async_init(
51  DOMAIN,
52  context={"source": SOURCE_IMPORT},
53  data={
54  CONF_URL: url,
55  CONF_MAX_ENTRIES: config[DOMAIN][CONF_MAX_ENTRIES],
56  },
57  )
58  )
59 
61  hass,
62  HOMEASSISTANT_DOMAIN,
63  f"deprecated_yaml_{DOMAIN}",
64  breaks_in_ha_version="2025.1.0",
65  is_fixable=False,
66  is_persistent=False,
67  issue_domain=DOMAIN,
68  severity=IssueSeverity.WARNING,
69  translation_key="deprecated_yaml",
70  translation_placeholders={
71  "domain": DOMAIN,
72  "integration_title": "Feedreader",
73  },
74  )
75 
76  return True
77 
78 
79 async def async_setup_entry(hass: HomeAssistant, entry: FeedReaderConfigEntry) -> bool:
80  """Set up Feedreader from a config entry."""
81  storage = hass.data.setdefault(MY_KEY, StoredData(hass))
82  if not storage.is_initialized:
83  await storage.async_setup()
84 
85  coordinator = FeedReaderCoordinator(
86  hass,
87  entry.data[CONF_URL],
88  entry.options[CONF_MAX_ENTRIES],
89  storage,
90  )
91 
92  await coordinator.async_setup()
93 
94  entry.runtime_data = coordinator
95 
96  # we need to setup event entities before the first coordinator data fetch
97  # so that the event entities can already fetch the events during the first fetch
98  await hass.config_entries.async_forward_entry_setups(entry, [Platform.EVENT])
99 
100  await coordinator.async_config_entry_first_refresh()
101 
102  entry.async_on_unload(entry.add_update_listener(_async_update_listener))
103 
104  return True
105 
106 
107 async def async_unload_entry(hass: HomeAssistant, entry: FeedReaderConfigEntry) -> bool:
108  """Unload a config entry."""
109  entries = hass.config_entries.async_entries(
110  DOMAIN, include_disabled=False, include_ignore=False
111  )
112  # if this is the last entry, remove the storage
113  if len(entries) == 1:
114  hass.data.pop(MY_KEY)
115  return await hass.config_entries.async_unload_platforms(entry, Platform.EVENT)
116 
117 
119  hass: HomeAssistant, entry: FeedReaderConfigEntry
120 ) -> None:
121  """Handle reconfiguration."""
122  await hass.config_entries.async_reload(entry.entry_id)
None _async_update_listener(HomeAssistant hass, FeedReaderConfigEntry entry)
Definition: __init__.py:120
bool async_setup(HomeAssistant hass, ConfigType config)
Definition: __init__.py:45
bool async_setup_entry(HomeAssistant hass, FeedReaderConfigEntry entry)
Definition: __init__.py:79
bool async_unload_entry(HomeAssistant hass, FeedReaderConfigEntry entry)
Definition: __init__.py:107
None async_create_issue(HomeAssistant hass, str entry_id)
Definition: repairs.py:69