[modules/spaceapi] Improve documentation / help text

This commit is contained in:
Tobias Manske 2019-01-07 01:37:10 +01:00
parent ab309f873b
commit 521b382131
No known key found for this signature in database
GPG key ID: 978D99F12D4E041F

View file

@ -3,7 +3,9 @@
# pylint: disable=C0111,R0903 # pylint: disable=C0111,R0903
"""Displays the state of a spaceapi endpoint """Displays the state of a Space API endpoint
Space API is an API for hackspaces based on JSON. See spaceapi.io for
an example.
Requires the following libraries: Requires the following libraries:
* requests * requests
@ -11,7 +13,17 @@ Requires the following libraries:
Parameters: Parameters:
* spaceapi.url: String representation of the api endpoint * spaceapi.url: String representation of the api endpoint
* spaceapi.format: Format string for the output (refer to code) * spaceapi.format: Format string for the output
Format Strings:
* Format strings are indicated by double %%
* They represent a leaf in the JSON tree, layers seperated by "."
* Boolean values can be overwritten by appending "%true%false"
in the format string
* Example: to reference "open" in "{"state":{"open": true}}"
you would write "%%state.open%%", if you also want
to say "Open/Closed" depending on the boolean you
would write "%%state.open%Open%Closed%%"
""" """
import bumblebee.input import bumblebee.input
@ -26,32 +38,30 @@ import json
def formatStringBuilder(s, json): def formatStringBuilder(s, json):
""" """
This function seems to be in dire need of some explanation so here it is: Parses Format Strings
It basically searches the format string for strings of the pattern Parameter:
%%ITEM.IN.TREE[%IFTRUE%IFFALSE]%%. For example to query the state of s -> format string
the hackspace you'd write %%state.open%% as it's located in json[state][open] json -> the spaceapi response object
according to the API specificaion. As the output of true or false doesn't
look to great you can specify the text you want to have shown so you'd
write %%state.open%Open%Closed%% to overwrite true/false with Open/Closed.
""" """
identifiers = re.findall("%%.*?%%", s) identifiers = re.findall("%%.*?%%", s)
for i in identifiers: for i in identifiers:
ic = i[2:-2] # Discard %% ic = i[2:-2] # Discard %%
j = ic.split("%") j = ic.split("%")
# Only neither of, or both true AND false may be overwritten
if len(j) != 3 and len(j) != 1: if len(j) != 3 and len(j) != 1:
return "INVALID SYNTAX" return "INVALID FORMAT STRING"
arr = j[0].split(".") arr = j[0].split(".")
repl = json repl = json
for a in arr: # Walk the JSON tree to find replacement for a in arr: # Walk the JSON tree to find replacement string
repl = repl[a] repl = repl[a]
if len(j) == 1: if len(j) == 1: # no overwrite
s = s.replace(i, repl) s = s.replace(i, repl)
elif repl: elif repl: # overwrite for Trfor True
s = s.replace(i, j[1]) s = s.replace(i, j[1])
else: else: # overwrite for False
s = s.replace(i, j[2]) s = s.replace(i, j[2])
return s return s
@ -62,8 +72,9 @@ class Module(bumblebee.engine.Module):
engine, config, bumblebee.output.Widget(full_text=self.getState) engine, config, bumblebee.output.Widget(full_text=self.getState)
) )
engine.input.register_callback(self, button=bumblebee.input.LEFT_MOUSE, engine.input.register_callback(
cmd=self.__forceReload) self, button=bumblebee.input.LEFT_MOUSE, cmd=self.__forceReload
)
self._data = {} self._data = {}
self._error = None self._error = None
@ -125,5 +136,6 @@ class Module(bumblebee.engine.Module):
self._threadingCount += 300 self._threadingCount += 300
self._error = "RELOADING" self._error = "RELOADING"
# Author: Tobias Manske <tobias@chaoswg.xyz> # Author: Tobias Manske <tobias@chaoswg.xyz>
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4 # vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4