import flask from flask import request, jsonify import numpy as np from threading import Thread import logging log = logging.getLogger('werkzeug') log.setLevel(logging.ERROR) # hide the info-messages of each GET-request class BroadcastUpdates: """Broadcasts (out) updates for the hw-handler to be fetched periodically""" def __init__(self, port): """""" self.last_show = "" self.queue = [] #[{"matrices" : [np.full((16,16,3), 10).tolist(), np.full((16,16,3), 100).tolist(), np.full((16,16,3), 200).tolist()]} for _ in range(4)] self.port = port def start(self): t = Thread(target=self.run) t.start() def run(self): app = flask.Flask(__name__) @app.route('/getupdates', methods=['GET']) def get_updates(): return self.get_updates() @app.route('/getlast', methods=['GET']) def get_last(): return self.get_last() app.run('0.0.0.0', port=self.port) def get_updates(self): try: data = self.queue.pop(0) self.last_show = data is_new = True has_queue = len(self.queue) > 0 except: data = "" is_new = False has_queue = False return self.generate_response( is_new = is_new, data = data, has_queue = has_queue ) def get_last(self): try: try: data = self.queue[-1] self.queue = [] except: # list empty data = self.last_show, except: data = "" return self.generate_response( data = data, has_queue = False, ) def generate_response(self, **kwargs): ret = { "status" : "ok", **kwargs } return jsonify(ret)