Home Assistant Unofficial Reference 2024.12.1
helpers.py
Go to the documentation of this file.
1 """Helper methods for common Plex integration operations."""
2 
3 from __future__ import annotations
4 
5 from collections.abc import Callable, Coroutine
6 from typing import TYPE_CHECKING, Any, TypedDict
7 
8 from plexapi.gdm import GDM
9 from plexwebsocket import PlexWebsocket
10 
11 from homeassistant.core import CALLBACK_TYPE, HomeAssistant
12 
13 from .const import DOMAIN, SERVERS
14 
15 if TYPE_CHECKING:
16  from . import PlexServer
17 
18 
19 class PlexData(TypedDict):
20  """Typed description of plex data stored in `hass.data`."""
21 
22  servers: dict[str, PlexServer]
23  dispatchers: dict[str, list[CALLBACK_TYPE]]
24  websockets: dict[str, PlexWebsocket]
25  gdm_scanner: GDM
26  gdm_debouncer: Callable[[], Coroutine[Any, Any, None]]
27 
28 
29 def get_plex_data(hass: HomeAssistant) -> PlexData:
30  """Get typed data from hass.data."""
31  return hass.data[DOMAIN]
32 
33 
34 def get_plex_server(hass: HomeAssistant, server_id: str) -> PlexServer:
35  """Get Plex server from hass.data."""
36  return get_plex_data(hass)[SERVERS][server_id]
37 
38 
39 def pretty_title(media, short_name=False):
40  """Return a formatted title for the given media item."""
41  year = None
42  if media.type == "album":
43  if short_name:
44  title = media.title
45  else:
46  title = f"{media.parentTitle} - {media.title}"
47  elif media.type == "episode":
48  title = f"{media.seasonEpisode.upper()} - {media.title}"
49  if not short_name:
50  title = f"{media.grandparentTitle} - {title}"
51  elif media.type == "season":
52  title = media.title
53  if not short_name:
54  title = f"{media.parentTitle} - {title}"
55  elif media.type == "track":
56  title = f"{media.index}. {media.title}"
57  else:
58  title = media.title
59 
60  if media.type in ["album", "movie", "season"]:
61  year = media.year
62 
63  if year:
64  title += f" ({year!s})"
65 
66  return title
PlexData get_plex_data(HomeAssistant hass)
Definition: helpers.py:29
def pretty_title(media, short_name=False)
Definition: helpers.py:39
PlexServer get_plex_server(HomeAssistant hass, str server_id)
Definition: helpers.py:34