Home Assistant Unofficial Reference 2024.12.1
entity.py
Go to the documentation of this file.
1 """Base Entity for Jellyfin."""
2 
3 from __future__ import annotations
4 
5 from typing import Any
6 
7 from homeassistant.helpers.device_registry import DeviceEntryType, DeviceInfo
8 from homeassistant.helpers.update_coordinator import CoordinatorEntity
9 
10 from .const import DEFAULT_NAME, DOMAIN
11 from .coordinator import JellyfinDataUpdateCoordinator
12 
13 
14 class JellyfinEntity(CoordinatorEntity[JellyfinDataUpdateCoordinator]):
15  """Defines a base Jellyfin entity."""
16 
17  _attr_has_entity_name = True
18 
19 
21  """Defines a base Jellyfin server entity."""
22 
23  def __init__(self, coordinator: JellyfinDataUpdateCoordinator) -> None:
24  """Initialize the Jellyfin entity."""
25  super().__init__(coordinator)
26  self._attr_device_info_attr_device_info = DeviceInfo(
27  entry_type=DeviceEntryType.SERVICE,
28  identifiers={(DOMAIN, coordinator.server_id)},
29  manufacturer=DEFAULT_NAME,
30  name=coordinator.server_name,
31  sw_version=coordinator.server_version,
32  )
33 
34 
36  """Defines a base Jellyfin client entity."""
37 
38  def __init__(
39  self,
40  coordinator: JellyfinDataUpdateCoordinator,
41  session_id: str,
42  ) -> None:
43  """Initialize the Jellyfin entity."""
44  super().__init__(coordinator)
45  self.session_idsession_id = session_id
46  self.device_id: str = self.session_datasession_data["DeviceId"]
47  self.device_name: str = self.session_datasession_data["DeviceName"]
48  self.client_name: str = self.session_datasession_data["Client"]
49  self.app_version: str = self.session_datasession_data["ApplicationVersion"]
50  self.capabilities: dict[str, Any] = self.session_datasession_data["Capabilities"]
51 
52  if self.capabilities.get("SupportsPersistentIdentifier", False):
53  self._attr_device_info_attr_device_info = DeviceInfo(
54  identifiers={(DOMAIN, self.device_id)},
55  manufacturer="Jellyfin",
56  model=self.client_name,
57  name=self.device_name,
58  sw_version=self.app_version,
59  via_device=(DOMAIN, coordinator.server_id),
60  )
61  self._attr_name_attr_name = None
62  else:
63  self._attr_device_info_attr_device_info = None
64  self._attr_has_entity_name_attr_has_entity_name_attr_has_entity_name = False
65  self._attr_name_attr_name = self.device_name
66 
67  @property
68  def session_data(self) -> dict[str, Any]:
69  """Return the session data."""
70  return self.coordinator.data[self.session_idsession_id]
71 
72  @property
73  def available(self) -> bool:
74  """Return if entity is available."""
75  return super().available and self.session_idsession_id in self.coordinator.data
None __init__(self, JellyfinDataUpdateCoordinator coordinator, str session_id)
Definition: entity.py:42
None __init__(self, JellyfinDataUpdateCoordinator coordinator)
Definition: entity.py:23
web.Response get(self, web.Request request, str config_key)
Definition: view.py:88