Home Assistant Unofficial Reference 2024.12.1
button.py
Go to the documentation of this file.
1 """Support for monitoring pyLoad."""
2 
3 from __future__ import annotations
4 
5 from collections.abc import Awaitable, Callable
6 from dataclasses import dataclass
7 from enum import StrEnum
8 from typing import Any
9 
10 from pyloadapi.api import CannotConnect, InvalidAuth, PyLoadAPI
11 
12 from homeassistant.components.button import ButtonEntity, ButtonEntityDescription
13 from homeassistant.core import HomeAssistant
14 from homeassistant.exceptions import ServiceValidationError
15 from homeassistant.helpers.entity_platform import AddEntitiesCallback
16 
17 from . import PyLoadConfigEntry
18 from .const import DOMAIN
19 from .entity import BasePyLoadEntity
20 
21 
22 @dataclass(kw_only=True, frozen=True)
24  """Describes pyLoad button entity."""
25 
26  press_fn: Callable[[PyLoadAPI], Awaitable[Any]]
27 
28 
29 class PyLoadButtonEntity(StrEnum):
30  """PyLoad button Entities."""
31 
32  ABORT_DOWNLOADS = "abort_downloads"
33  RESTART_FAILED = "restart_failed"
34  DELETE_FINISHED = "delete_finished"
35  RESTART = "restart"
36 
37 
38 SENSOR_DESCRIPTIONS: tuple[PyLoadButtonEntityDescription, ...] = (
40  key=PyLoadButtonEntity.ABORT_DOWNLOADS,
41  translation_key=PyLoadButtonEntity.ABORT_DOWNLOADS,
42  press_fn=lambda api: api.stop_all_downloads(),
43  ),
45  key=PyLoadButtonEntity.RESTART_FAILED,
46  translation_key=PyLoadButtonEntity.RESTART_FAILED,
47  press_fn=lambda api: api.restart_failed(),
48  ),
50  key=PyLoadButtonEntity.DELETE_FINISHED,
51  translation_key=PyLoadButtonEntity.DELETE_FINISHED,
52  press_fn=lambda api: api.delete_finished(),
53  ),
55  key=PyLoadButtonEntity.RESTART,
56  translation_key=PyLoadButtonEntity.RESTART,
57  press_fn=lambda api: api.restart(),
58  entity_registry_enabled_default=False,
59  ),
60 )
61 
62 
64  hass: HomeAssistant,
65  entry: PyLoadConfigEntry,
66  async_add_entities: AddEntitiesCallback,
67 ) -> None:
68  """Set up buttons from a config entry."""
69 
70  coordinator = entry.runtime_data
71 
73  PyLoadBinarySensor(coordinator, description)
74  for description in SENSOR_DESCRIPTIONS
75  )
76 
77 
79  """Representation of a pyLoad button."""
80 
81  entity_description: PyLoadButtonEntityDescription
82 
83  async def async_press(self) -> None:
84  """Handle the button press."""
85  try:
86  await self.entity_descriptionentity_description.press_fn(self.coordinator.pyload)
87  except CannotConnect as e:
89  translation_domain=DOMAIN,
90  translation_key="service_call_exception",
91  ) from e
92  except InvalidAuth as e:
94  translation_domain=DOMAIN,
95  translation_key="service_call_auth_exception",
96  ) from e
None async_setup_entry(HomeAssistant hass, PyLoadConfigEntry entry, AddEntitiesCallback async_add_entities)
Definition: button.py:67