""" ##### Plex Media Server Connect to Plex Media Server and see current sessions details ```ini [variable_name] platform = plex url = http://plex_host:plex_port token = plex_token value_template = {{ value_template }} ``` > **Returns:** `value_template` as rendered string | Variable | Required | Description | Options | |-----------------|----------|-----------------------------------------------------------------|-------------------| | [variable_name] | Yes | Name for the data source. | [variable_name] | | platform | Yes | Name of the platform. | plex | | host | Yes | URL of Plex Media Server (include port, normally 32400) | url | | 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 | | value_template | Yes | Jinja template for how the returned data from API is displayed. | jinja template |
###### **Available fields for value_template** * sessions * transcodes * libraries > **Example:** >```ini >[plex] >platform = plex >host = http://plex.example.com:32400 >token = abcde_fghi_jklmnopqr >value_template = Sessions: {{sessions}}
Transcodes: {{transcodes}} > >[Plex] >prefix = http:// >url = plex.example.com:32400 >icon = static/images/apps/plex.png >description = Plex data sources example >open_in = this_tab >data_sources = plex >``` """ import requests from flask import render_template_string json_header = {"Accept": "application/json"} class Plex(object): def __init__(self, url, token): self.url = url self.token = token def refresh(self): if self.token != None: sessions = requests.get( self.url + "/status/sessions?X-Plex-Token=" + self.token, headers=json_header, ).json() self.sessions = sessions["MediaContainer"]["size"] transcodes = requests.get( self.url + "/transcode/sessions?X-Plex-Token=" + self.token, headers=json_header, ).json() self.transcodes = transcodes["MediaContainer"]["size"] libraries = requests.get( self.url + "/library/sections?X-Plex-Token=" + self.token, headers=json_header, ).json() self.libraries = libraries["MediaContainer"]["size"] class Platform: def docs(self): documentation = { "name": "plex", "author": "reedhaffner", "author_url": "https://github.com/reedhaffner", "version": 1.0, "description": "Connect to Plex Media Server and see current sessions details", "returns": "`value_template` as rendered string", "returns_json_keys": ["sessions", "transcodes", "libraries",], "example": """ ```ini [plex] platform = plex host = http://plex.example.com:32400 token = abcde_fghi_jklmnopqr value_template = Sessions: {{sessions}}
Transcodes: {{transcodes}} > [Plex] prefix = http:// url = plex.example.com:32400 icon = static/images/apps/plex.png description = Plex data sources example open_in = this_tab data_sources = plex ``` """, "variables": [ { "variable": "[variable_name]", "description": "Name for the data source.", "default": "None, entry is required", "options": ".ini header", }, { "variable": "platform", "description": "Name of the platform.", "default": "plex", "options": "plex", }, { "variable": "host", "description": "URL of Plex Media Server (include port, normally 32400)", "default": "", "options": "url", }, { "variable": "token", "description": "X-Plex-Token (See [here](https://support.plex.tv/articles/204059436-finding-an-authentication-token-x-plex-token/) for how to find it.)", "default": "", "options": "string", }, { "variable": "value_template", "description": "Jinja template for how the returned data from API is displayed.", "default": "", "options": "jinja template", }, ], } return documentation def __init__(self, *args, **kwargs): # parse the user's options from the config entries for key, value in kwargs.items(): self.__dict__[key] = value if not hasattr(self, "token"): self.token = None else: self.plex = Plex(self.host, self.token) def process(self): self.plex.refresh() value_template = render_template_string( self.value_template, **self.plex.__dict__ ) return value_template