''' Created on 19 mar 2020 @author: Emanuele Trabattoni @copyright: Briq srl @contact: Scritto per Briq srl come collaboratore esterno, contiene dei frammenti di codice di proprieta' di Briq srl ''' from flask import Flask, escape, request import threading import queue import sys import logging import os from waitress import serve from driver import tsc_manager, notifier #inizializza ascoltatore di Flask app = Flask(__name__) #questo manda le rest di risposta a django @app.route('/tscprinter/printer//', methods=['POST']) def printer_in(ip, command): parameters = request.get_json() print(f"Comando Stampante: {ip} {command} {str(parameters)}") # questo prossimo mi sa che non funzia perché la funzione # inizia a esistere quando si esegue tsc_manager.main ma poi non # viene esportata nello scope del modulo tsc_manager queue_id = tsc_manager.get_queue_id(ip) print(queue_id) if queue_id is not None and queue_id in queues_in: queues_in[queue_id].put({'name': command, 'parameters': parameters}) return "Comando Stampante Inviato", 200 else: return "Stampante non trovata", 404 @app.route('/tscprinter/gest/', methods=['POST']) def gest_in(command): parameters = request.get_json() print(f"Comando Gestore: {str(parameters)}") # istes di sopra queue_command = tsc_manager.get_queue_command() if queue_command is not None: queue_command.put({'name': command, 'parameters': parameters}) return "Comando Gestore Inviato", 200 else: return "Gestore non Disponibile", 404 def build_logger(): logger = logging.getLogger(__name__) logger.setLevel(logging.INFO) logger.propagate = False formatter = logging.Formatter(("%(asctime)s|%(levelname)-7s|%(funcName)-10s|%(lineno)-3d: %(message)-50s"), ("%m-%d %H:%M:%S")) # File Logging fh = logging.FileHandler(("./log/tsc.log")) fh.setLevel(logging.DEBUG) fh.setFormatter(formatter) logger.addHandler(fh) # Console Logging cl = logging.StreamHandler(sys.stdout) cl.setLevel(logging.DEBUG) cl.setFormatter(formatter) logger.addHandler(cl) return logger if __name__ == '__main__': logger = build_logger() queues_in = {} queue_command = queue.Queue() queue_out = queue.Queue() t_notify_django = threading.Thread(target=notifier.notifier, args=[queue_out, logger], daemon=True) t_notify_django.start() t_manager = threading.Thread(target=tsc_manager.main, args=[queues_in, queue_out, queue_command, logger], daemon=True) t_manager.start() listen = "{}:{}".format(os.getenv("TSC_PRINTER_DRIVER_HOST"), os.getenv("TSC_PRINTER_DRIVER_PORT")) # dico (aspettando) a django che siamo pronti a ricevere gli indirizzi # delle stampanti notifier.send_hello(queue_out) serve(app, listen=listen)