Home Assistant Unofficial Reference 2024.12.1
button.py
Go to the documentation of this file.
1 """Support for Dremel 3D Printer buttons."""
2 
3 from __future__ import annotations
4 
5 from collections.abc import Callable
6 from dataclasses import dataclass
7 
8 from dremel3dpy import Dremel3DPrinter
9 
10 from homeassistant.components.button import ButtonEntity, ButtonEntityDescription
11 from homeassistant.core import HomeAssistant
12 from homeassistant.exceptions import HomeAssistantError
13 from homeassistant.helpers.entity_platform import AddEntitiesCallback
14 
15 from .coordinator import DremelConfigEntry
16 from .entity import Dremel3DPrinterEntity
17 
18 
19 @dataclass(frozen=True, kw_only=True)
21  """Describes a Dremel 3D Printer button entity."""
22 
23  press_fn: Callable[[Dremel3DPrinter], None]
24 
25 
26 BUTTON_TYPES: tuple[Dremel3DPrinterButtonEntityDescription, ...] = (
28  key="cancel_job",
29  translation_key="cancel_job",
30  press_fn=lambda api: api.stop_print(),
31  ),
33  key="pause_job",
34  translation_key="pause_job",
35  press_fn=lambda api: api.pause_print(),
36  ),
38  key="resume_job",
39  translation_key="resume_job",
40  press_fn=lambda api: api.resume_print(),
41  ),
42 )
43 
44 
46  hass: HomeAssistant,
47  config_entry: DremelConfigEntry,
48  async_add_entities: AddEntitiesCallback,
49 ) -> None:
50  """Set up Dremel 3D Printer control buttons."""
52  Dremel3DPrinterButtonEntity(config_entry.runtime_data, description)
53  for description in BUTTON_TYPES
54  )
55 
56 
58  """Represent a Dremel 3D Printer button."""
59 
60  entity_description: Dremel3DPrinterButtonEntityDescription
61 
62  def press(self) -> None:
63  """Handle the button press."""
64  # api does not care about the current state
65  try:
66  self.entity_descriptionentity_description.press_fn(self._api_api)
67  except RuntimeError as ex:
68  raise HomeAssistantError(
69  "An error occurred while submitting command"
70  ) from ex
None async_setup_entry(HomeAssistant hass, DremelConfigEntry config_entry, AddEntitiesCallback async_add_entities)
Definition: button.py:49