diff --git a/i3pystatus/spaceapi.py b/i3pystatus/spaceapi.py new file mode 100644 index 0000000..27e5eb3 --- /dev/null +++ b/i3pystatus/spaceapi.py @@ -0,0 +1,48 @@ +import json + +from urllib.request import urlopen +from datetime import datetime + +from i3pystatus import IntervalModule +from i3pystatus.core.util import internet, require + + +class SpaceAPI(IntervalModule): + """ + Show if a hackerspace is open + + .. rubric:: Available formatters + + * {state} + * {message} + * {lastchange} + """ + + data = {} + format = "S: {state}" + color_open = "#00FF00" + color_closed = "#FF0000" + interval = 10 + + settings = ( + ("url", "spaceapi endpoint"), + ("format", "format string used for output."), + ("color_open", "color if hackerspace is opened"), + ("color_closed", "color if hackerspace is closed"), + ("interval", "update interval") + ) + + @require(internet) + def run(self): + res = urlopen(self.url) + api = json.loads(res.read()) + + self.data['color'] = self.color_open if api['state']['open'] else self.color_closed + self.data['state'] = 'open' if api['state']['open'] else 'closed' + self.data['message'] = api['state'].get('message', '') + self.data['lastchange'] = datetime.fromtimestamp(int(api['state']['lastchange'])) + + self.output = { + "full_text": self.format.format(**self.data), + "color": self.data['color'] + }