from flask import render_template_string
import requests
class Sabnzbd(object):
# Takes the ip address of Sabnzbd
def __init__(self, ip_address, port, api_key):
self.ip_address = ip_address
self.port = port
self.api_key = api_key
def refresh(self):
if self.api_key != None:
rawdata = requests.get(
"http://"
+ self.ip_address
+ ":"
+ self.port
+ "/api?"
+ "apikey="
+ self.api_key
+ "&mode=queue"
+ "&output=json"
).json()
queue = rawdata["queue"]
self.status = queue["status"]
self.no_of_slots = queue["noofslots_total"]
self.speed = queue["speed"]
self.size = queue["size"]
self.disk_free = queue["diskspace1_norm"]
self.eta = queue["eta"]
self.mb_left = queue["mbleft"]
self.time_left = queue["timeleft"]
class Platform:
def docs(self):
documentation = {
"name": "sabnzbd",
"author": "rxmii4269",
"author_url": "https://github.com/rxmii4269",
"version": 1.0,
"description": "Display information from the SABnzbd API",
"example": """
```ini
[sabnzbd-data]
platform = sabnzbd
host = 192.168.x.x
port = 8080
api_key = my_api_key
value_template = Status:{{status}}
⬇ {{speed}}
Size: {{size}}
[Sabnzbd]
prefix = http://
url = 192.168.1.32:8080
icon = static/images/apps/sabnzbd.png
description = SABnzbd is a multi-platform binary newsgroup downloader. The program works in the background and simplifies the downloading verifying and extracting of files from Usenet.
open_in = iframe
data_sources = sabnzbd-data
```
""",
"returns": "`value_template` as rendered string",
"returns_json_keys": [
"status",
"no_of_slots",
"speed",
"size",
"disk_free",
"eta",
"mb_left",
"time_left",
],
"variables": [
{
"variable": "[variable_name]",
"description": "Name for the data source.",
"default": "",
"options": ".ini header",
},
{
"variable": "platform",
"description": "Name of the platform.",
"default": "sabnzbd",
"options": "sabnzbd",
},
{
"variable": "host",
"description": "Host of Sabnzbd",
"default": "192.168.x.x",
"options": "host",
},
{
"variable": "port",
"description": "Port of Sabnzbd",
"default": "8080",
"options": "port",
},
{
"variable": "api_key",
"description": "Api key for the Sabnzbd",
"default": "my_api_key",
"options": "api key",
},
{
"variable": "value_template",
"description": "Jinja template for how the returned data from API is displayed.",
"default": "Status:{{status}}
⬇ {{speed}}
Size: {{size}}
",
"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
def pre_process(self):
self.sabnzbd = Sabnzbd(self.host, self.port, self.api_key)
return self
def process(self):
self = self.pre_process(self)
self.sabnzbd.refresh()
value_template = render_template_string(
self.value_template, **self.sabnzbd.__dict__
)
return value_template