Home Assistant Unofficial Reference 2024.12.1
__init__.py
Go to the documentation of this file.
1 """The NZBGet integration."""
2 
3 import voluptuous as vol
4 
5 from homeassistant.config_entries import ConfigEntry
6 from homeassistant.const import Platform
7 from homeassistant.core import HomeAssistant, ServiceCall
8 from homeassistant.helpers import config_validation as cv
9 
10 from .const import (
11  ATTR_SPEED,
12  DATA_COORDINATOR,
13  DATA_UNDO_UPDATE_LISTENER,
14  DEFAULT_SPEED_LIMIT,
15  DOMAIN,
16  SERVICE_PAUSE,
17  SERVICE_RESUME,
18  SERVICE_SET_SPEED,
19 )
20 from .coordinator import NZBGetDataUpdateCoordinator
21 
22 PLATFORMS = [Platform.SENSOR, Platform.SWITCH]
23 
24 
25 SPEED_LIMIT_SCHEMA = vol.Schema(
26  {vol.Optional(ATTR_SPEED, default=DEFAULT_SPEED_LIMIT): cv.positive_int}
27 )
28 
29 
30 async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
31  """Set up NZBGet from a config entry."""
32  hass.data.setdefault(DOMAIN, {})
33 
34  coordinator = NZBGetDataUpdateCoordinator(
35  hass,
36  config=entry.data,
37  )
38 
39  await coordinator.async_config_entry_first_refresh()
40 
41  undo_listener = entry.add_update_listener(_async_update_listener)
42 
43  hass.data[DOMAIN][entry.entry_id] = {
44  DATA_COORDINATOR: coordinator,
45  DATA_UNDO_UPDATE_LISTENER: undo_listener,
46  }
47 
48  await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
49 
50  _async_register_services(hass, coordinator)
51 
52  return True
53 
54 
55 async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
56  """Unload a config entry."""
57  unload_ok = await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
58 
59  if unload_ok:
60  hass.data[DOMAIN][entry.entry_id][DATA_UNDO_UPDATE_LISTENER]()
61  hass.data[DOMAIN].pop(entry.entry_id)
62 
63  return unload_ok
64 
65 
67  hass: HomeAssistant,
68  coordinator: NZBGetDataUpdateCoordinator,
69 ) -> None:
70  """Register integration-level services."""
71 
72  def pause(call: ServiceCall) -> None:
73  """Service call to pause downloads in NZBGet."""
74  coordinator.nzbget.pausedownload()
75 
76  def resume(call: ServiceCall) -> None:
77  """Service call to resume downloads in NZBGet."""
78  coordinator.nzbget.resumedownload()
79 
80  def set_speed(call: ServiceCall) -> None:
81  """Service call to rate limit speeds in NZBGet."""
82  coordinator.nzbget.rate(call.data[ATTR_SPEED])
83 
84  hass.services.async_register(DOMAIN, SERVICE_PAUSE, pause, schema=vol.Schema({}))
85  hass.services.async_register(DOMAIN, SERVICE_RESUME, resume, schema=vol.Schema({}))
86  hass.services.async_register(
87  DOMAIN, SERVICE_SET_SPEED, set_speed, schema=SPEED_LIMIT_SCHEMA
88  )
89 
90 
91 async def _async_update_listener(hass: HomeAssistant, entry: ConfigEntry) -> None:
92  """Handle options update."""
93  await hass.config_entries.async_reload(entry.entry_id)
None _async_register_services(HomeAssistant hass, NZBGetDataUpdateCoordinator coordinator)
Definition: __init__.py:69
bool async_unload_entry(HomeAssistant hass, ConfigEntry entry)
Definition: __init__.py:55
bool async_setup_entry(HomeAssistant hass, ConfigEntry entry)
Definition: __init__.py:30
None _async_update_listener(HomeAssistant hass, ConfigEntry entry)
Definition: __init__.py:91