Skip to content

Commit ef23aec

Browse files
committed
(MANUALLY ADDING PR FROM reedhaffner ) Add Plex as a platform
1 parent 3226127 commit ef23aec

File tree

2 files changed

+95
-0
lines changed

2 files changed

+95
-0
lines changed

dashmachine/platform/plex.py

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
"""
2+
##### Plex Media Server
3+
Connect to Plex Media Server and see current sessions details
4+
```ini
5+
[variable_name]
6+
platform = plex
7+
url = http://plex_host:plex_port
8+
token = plex_token
9+
value_template = {{ value_template }}
10+
```
11+
> **Returns:** `value_template` as rendered string
12+
| Variable | Required | Description | Options |
13+
|-----------------|----------|-----------------------------------------------------------------|-------------------|
14+
| [variable_name] | Yes | Name for the data source. | [variable_name] |
15+
| platform | Yes | Name of the platform. | plex |
16+
| host | Yes | URL of Plex Media Server (include port, normally 32400) | url |
17+
| token | Yes | X-Plex-Token (See [here](https://support.plex.tv/articles/204059436-finding-an-authentication-token-x-plex-token/) for how to find it.) | string |
18+
| value_template | Yes | Jinja template for how the returned data from API is displayed. | jinja template |
19+
<br />
20+
###### **Available fields for value_template**
21+
* sessions
22+
* transcodes
23+
* libraries
24+
> **Example:**
25+
>```ini
26+
>[plex]
27+
>platform = plex
28+
>host = http://plex.example.com:32400
29+
>token = abcde_fghi_jklmnopqr
30+
>value_template = Sessions: {{sessions}}<br />Transcodes: {{transcodes}}
31+
>
32+
>[Plex]
33+
>prefix = http://
34+
>url = plex.example.com:32400
35+
>icon = static/images/apps/plex.png
36+
>description = Plex data sources example
37+
>open_in = this_tab
38+
>data_sources = plex
39+
>```
40+
"""
41+
import requests
42+
from flask import render_template_string
43+
44+
json_header = {"Accept": "application/json"}
45+
46+
47+
class Plex(object):
48+
def __init__(self, url, token):
49+
self.url = url
50+
self.token = token
51+
52+
def refresh(self):
53+
if self.token != None:
54+
sessions = requests.get(
55+
self.url + "/status/sessions?X-Plex-Token=" + self.token,
56+
headers=json_header,
57+
).json()
58+
59+
self.sessions = sessions["MediaContainer"]["size"]
60+
61+
transcodes = requests.get(
62+
self.url + "/transcode/sessions?X-Plex-Token=" + self.token,
63+
headers=json_header,
64+
).json()
65+
66+
self.transcodes = transcodes["MediaContainer"]["size"]
67+
68+
libraries = requests.get(
69+
self.url + "/library/sections?X-Plex-Token=" + self.token,
70+
headers=json_header,
71+
).json()
72+
73+
self.libraries = libraries["MediaContainer"]["size"]
74+
75+
76+
class Platform:
77+
def __init__(self, *args, **kwargs):
78+
# parse the user's options from the config entries
79+
for key, value in kwargs.items():
80+
self.__dict__[key] = value
81+
82+
if not hasattr(self, "token"):
83+
print(
84+
"Please add a token\nSee https://support.plex.tv/articles/204059436-finding-an-authentication-token-x-plex-token/ to find it."
85+
)
86+
exit(1)
87+
else:
88+
self.plex = Plex(self.host, self.token)
89+
90+
def process(self):
91+
self.plex.refresh()
92+
value_template = render_template_string(
93+
self.value_template, **self.plex.__dict__
94+
)
95+
return value_template
-17.7 KB
Loading

0 commit comments

Comments
 (0)