From 053240a0d7f7ce61eecfe33375a3b28499070cea Mon Sep 17 00:00:00 2001 From: "Alfie \"Azelphur\" Day" Date: Sun, 12 Jul 2020 01:01:48 +0100 Subject: [PATCH 1/2] Add octoprint platform --- dashmachine/platform/octoprint.py | 84 +++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 dashmachine/platform/octoprint.py diff --git a/dashmachine/platform/octoprint.py b/dashmachine/platform/octoprint.py new file mode 100644 index 00000000..d3543905 --- /dev/null +++ b/dashmachine/platform/octoprint.py @@ -0,0 +1,84 @@ +""" + +##### Octoprint +Display information from octoprint. +```ini +[variable_name] +platform = octoprint +resource = http://octopi.local +value_template = +api_key = +``` +> **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. | octoprint | +| resource | Yes | Url of your octoprint instance | url | +| value_template | Yes | Jinja template for how the returned data from api is displayed. | jinja template | +| api_key | Yes | API key to use for auth. | string | + +> **Working example:** +>``` +>[octoprint] +>platform = octoprint +>resource = http://octopi.local +>api_key = ABC123MYAPIKEY +>value_template = State: {{ state }} {% if state == "Printing" %} ({{completion|int}}%){% endif %} +> +>[Octoprint] +>prefix = http:// +>url = octopi.local +>icon = static/images/icons/octoprint.png +>sidebar_icon = static/images/icons/octoprint.png +>description = Manage 3D printer +>open_in = new_tab +>data_sources = octoprint +>``` + +""" + +from flask import render_template_string +import requests + +def flatten_dict(d, r=None): + if r is None: + r = {} + for k, v in d.items(): + r[k] = v + if type(v) == dict: + flatten_dict(v, r) + return r + + +class Platform: + JOB_PATH = "/api/job" + + def __init__(self, *args, **kwargs): + for key, value in kwargs.items(): + self.__dict__[key] = value + + if not hasattr(self, "resource"): + self.resource = "http://octopi.local" + + if not hasattr(self, "api_key"): + self.api_key = "" + + self.session = requests.Session() + + def process(self): + job = self.get_current_job() + value_template = render_template_string(self.value_template, **flatten_dict(job)) + return value_template + + def get_current_job(self): + return self.get(self.JOB_PATH).json() + + def request(self, verb, path, json={}): + headers = {"X-Api-Key": self.api_key} + return self.session.request(verb, self.resource + path, headers=headers, json=json) + + def get(self, path): + return self.request("GET", path) + From 9664d9affc6c68e09187bdbec009d13e2418014e Mon Sep 17 00:00:00 2001 From: "Alfie \"Azelphur\" Day" Date: Sun, 12 Jul 2020 01:17:57 +0100 Subject: [PATCH 2/2] Add octoprint template --- dashmachine/static/images/apps/octoprint.png | Bin 0 -> 13115 bytes template_apps/Octoprint.ini | 22 +++++++++++++++++++ 2 files changed, 22 insertions(+) create mode 100644 dashmachine/static/images/apps/octoprint.png create mode 100644 template_apps/Octoprint.ini diff --git a/dashmachine/static/images/apps/octoprint.png b/dashmachine/static/images/apps/octoprint.png new file mode 100644 index 0000000000000000000000000000000000000000..dd9aefe8178d9ed57229e9a7d6e41de592ef8fab GIT binary patch literal 13115 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 VA=)Yv-U|Q#002ovPDHLkV1lX65KaI9 literal 0 HcmV?d00001 diff --git a/template_apps/Octoprint.ini b/template_apps/Octoprint.ini new file mode 100644 index 00000000..06e8e969 --- /dev/null +++ b/template_apps/Octoprint.ini @@ -0,0 +1,22 @@ +# ----------------- +# App config entry +# ----------------- +[Octoprint] +prefix = http:// +url = octopi.local +icon = static/images/apps/octoprint.png +sidebar_icon = static/images/apps/octoprint.png +description = OctoPrint is the snappy web interface for your 3D printer that allows you to control and monitor all aspects of your printer and print jobs, right from your browser. +open_in = this_tab + +# ----------------------------------------------------------- +# Data Source (place this above the app entry in config.ini) +# ----------------------------------------------------------- +[variable_name] +platform = octoprint +resource = http://octopi.local +value_template = State: {{ state }} {% if state == "Printing" %} ({{completion|int}}%){% endif %} +api_key = ABC123MYAPIKEY + +# then add to the app config entry: +data_sources = variable name