diff --git a/src/web.py b/src/web.py index a40d09b..6aba3f2 100644 --- a/src/web.py +++ b/src/web.py @@ -1,16 +1,16 @@ -from flask import Flask, request, flash +from flask import flash from werkzeug.utils import secure_filename -from printer import Printer import time import os +from task import TextTask, ImageTask, CutTask class Web(object): """Web is the class that gets all of the information from web calls ( API and Web page ) and provides checks before sending stuff to printing""" - def __init__(self, app, printer): + def __init__(self, app, print_queue): super(Web).__init__() - self.printer = printer + self.print_queue = print_queue self.app = app def print_sms(self, texte, sign: str) -> bool: @@ -18,13 +18,19 @@ class Web(object): Get text and a signature, prints the text and cuts after that. """ self.app.logger.debug("Printing : " + str(texte) + " from " + str(sign)) + try: - self.printer.print_sms(texte, sign) - self.printer.cut() + # We create two new tasks and add them directly to the queue + # TODO: this might need to be improved because + # !! there is no garantee !! that both the SMS task and the Cut task + # are added back to back, another task could be + # inserted between the two. + sms = self.print_queue.enqueue(TextTask(content=texte, signature=sign)) + cut = self.print_queue.enqueue(CutTask()) except Exception as e: self.app.logger.error(e) - raise RuntimeError("Could not print SMS, " + str(e)) from e - + raise RuntimeError("Could not add SMS to queue, " + str(e)) from e + self.app.logger.info("Added two new tasks at position %s and %s", sms, cut ) return True def print_image(self, image, sign: str) -> bool: @@ -32,28 +38,28 @@ class Web(object): Get an image and a signature, prints the image and cuts after that. """ try: - self.upload_file(image) + file_uploaded = self.upload_file(image) except Exception as e: self.app.logger.error(e) raise RuntimeError("Could not upload file") from e - self.app.logger.debug("File has been uploaded, printing...") - - - try: - self.printer.print_img( - os.path.join( + if file_uploaded: + self.app.logger.debug("File has been uploaded, printing...") + try: + img = self.print_queue.enqueue(ImageTask(os.path.join( self.app.config["UPLOAD_FOLDER"], secure_filename(image.filename), ), - sign=sign, - process=True, - ) - self.printer.cut() - except Exception as e: - raise RuntimeError("Could not print file") from e + signature=sign, + process=True)) + + cut = self.print_queue.enqueue(CutTask()) + except Exception as e: + raise RuntimeError("Could not add IMG to queue" + str(e)) from e + + self.app.logger.info("Added two new tasks at position %s and %s", img, cut ) + - self.app.logger.debug("Image printed and cut !") return True def login(self, username: str, password: str) -> bool: @@ -74,20 +80,28 @@ class Web(object): def upload_file(self, image) -> bool: self.app.logger.debug("Validating file") - if image and self.allowed_file(image.filename): - filename = secure_filename(image.filename) - self.app.logger.debug("File valid") - try: - image.save(os.path.join(self.app.config["UPLOAD_FOLDER"], filename)) - except Exception as e: - self.app.logger.error("Could not save file %s", e) - return False + if image: + if self.allowed_file(image.filename): + filename = secure_filename(image.filename) + self.app.logger.debug("File valid") + try: + image.save(os.path.join(self.app.config["UPLOAD_FOLDER"], filename)) + except OSError as e: + self.app.logger.error("Could not save file %s", e) + return False - self.app.logger.debug( - "File saved to " - + str(os.path.join(self.app.config["UPLOAD_FOLDER"], filename)) - ) - return True + self.app.logger.debug( + "File saved to " + + str(os.path.join(self.app.config["UPLOAD_FOLDER"], filename)) + ) + return True + else: + self.app.logger.error("Could not save file because the filename is forbidden") + return False else: - self.app.logger.error("Could not save file " + str(filename)) + self.app.logger.error("Could not save file, it seems to be null ? : " + str(filename)) return False + + def get_queue_state(self): + """Return current queue state""" + return self.print_queue.get_queue_state()