Home Assistant Unofficial Reference 2024.12.1
button.py
Go to the documentation of this file.
1 """Button platform for the SABnzbd component."""
2 
3 from collections.abc import Callable
4 from dataclasses import dataclass
5 from typing import Any
6 
7 from pysabnzbd import SabnzbdApiException
8 
9 from homeassistant.components.button import ButtonEntity, ButtonEntityDescription
10 from homeassistant.core import HomeAssistant
11 from homeassistant.exceptions import HomeAssistantError
12 from homeassistant.helpers.entity_platform import AddEntitiesCallback
13 
14 from . import SabnzbdConfigEntry
15 from .const import DOMAIN
16 from .coordinator import SabnzbdUpdateCoordinator
17 from .entity import SabnzbdEntity
18 
19 
20 @dataclass(kw_only=True, frozen=True)
22  """Describes SABnzbd button entity."""
23 
24  press_fn: Callable[[SabnzbdUpdateCoordinator], Any]
25 
26 
27 BUTTON_DESCRIPTIONS: tuple[SabnzbdButtonEntityDescription, ...] = (
29  key="pause",
30  translation_key="pause",
31  press_fn=lambda coordinator: coordinator.sab_api.pause_queue(),
32  ),
34  key="resume",
35  translation_key="resume",
36  press_fn=lambda coordinator: coordinator.sab_api.resume_queue(),
37  ),
38 )
39 
40 
42  hass: HomeAssistant,
43  entry: SabnzbdConfigEntry,
44  async_add_entities: AddEntitiesCallback,
45 ) -> None:
46  """Set up buttons from a config entry."""
47  coordinator = entry.runtime_data
48 
50  SabnzbdButton(coordinator, description) for description in BUTTON_DESCRIPTIONS
51  )
52 
53 
55  """Representation of a SABnzbd button."""
56 
57  entity_description: SabnzbdButtonEntityDescription
58 
59  async def async_press(self) -> None:
60  """Handle the button press."""
61  try:
62  await self.entity_descriptionentity_description.press_fn(self.coordinator)
63  except SabnzbdApiException as e:
64  raise HomeAssistantError(
65  translation_domain=DOMAIN,
66  translation_key="service_call_exception",
67  ) from e
68  else:
69  await self.coordinator.async_request_refresh()
None async_setup_entry(HomeAssistant hass, SabnzbdConfigEntry entry, AddEntitiesCallback async_add_entities)
Definition: button.py:45