Loading back/myfab/api.py +21 −7 Original line number Diff line number Diff line Loading @@ -43,7 +43,8 @@ from myfab.queue import ( delete_printer, pull_printers, get_printer_for_request, get_queue_element_pos get_queue_element_pos, get_queue_elements_list ) init_db_connection() Loading Loading @@ -157,6 +158,13 @@ def add_request_event(req: PrintRequest, desc: str, op: User = None): Event.create(request=req, description=desc, operator=op) def dequeue_apply(req: PrintRequest): if req.queue_element != None: req.queue_element.state = 3 req.queue_element.save() req.queue_element = None req.save() """ Datetime to str """ Loading Loading @@ -262,10 +270,7 @@ def dequeue_request(req_id): if req.queue_element == None: return jsonify({"error": "Not queued"}), status.HTTP_404_NOT_FOUND req.queue_element.state = 3 req.queue_element.save() req.queue_element = None req.save() dequque_apply(req) return jsonify({}) @app.route("/requests/<req_id>", methods=["PUT"]) Loading @@ -291,8 +296,12 @@ def update_request(req_id): if get_access_level_to_request(req, current_user) < required_access: return jsonify({"error": "Access denied"}), status.HTTP_401_UNAUTHORIZED # TODO V3: successfull request statistics # TODO V3: request statistics for e in changes: if e == "status": if changes[e] == REQUEST_STATUS_CLOSED: # Dequeue request on close dequeue_apply(req) setattr(req, e, changes[e]) req.last_modification = datetime.datetime.now() req.save() Loading Loading @@ -775,7 +784,10 @@ def manage_queues(): "name": "queue_name", "weight": 0, queue weight, "printers": [ids ],* "enabled": true "enabled": true, "elements": [ {PrintRequest}... ] } ] """ Loading @@ -783,6 +795,7 @@ def manage_queues(): # get queues qs = [] for q in get_queues(): elems = get_queue_elements_list(q.id) qs.append( { "id": q.id, Loading @@ -793,6 +806,7 @@ def manage_queues(): get_printers_for_queue(q), )), "enabled": q.enabled, "elements": elems } ) return jsonify(qs) Loading back/myfab/queue.py +17 −2 Original line number Diff line number Diff line Loading @@ -97,6 +97,15 @@ def remove_queue(qid): def create_queue(name, weight, meta): Queue.create(name=name, weight=weight, meta=meta) def get_queue_elements_list(qid): elems = [] for ql in PrintRequest.join(QueueElement).select().where(QueueElement.queue == qid).order_by(QueueElement.id): elems.append({ "id": ql.id, "author": ql.author, "title": ql.title }) return elems """ Add request to the end of the queue Loading @@ -118,7 +127,7 @@ def enqueue(req: PrintRequest, queue: Queue): def get_next_request(queue): try: qe = QueueElement.select().where(QueueElement.state == QUEUE_ELEMENT_STATE_INQUEUE).where(QueueElement.queue == queue).order_by(QueueElement.id.desc()).limit(1).get() qe = QueueElement.select().where(QueueElement.state == QUEUE_ELEMENT_STATE_INQUEUE).where(QueueElement.queue == queue).order_by(QueueElement.id).limit(1).get() if qe == None: return None return PrintRequest.select().where(PrintRequest.queue_element == qe).get() Loading Loading @@ -602,13 +611,19 @@ class OctoPrinter(PrinterBase): } self.log(f"Status is \"{status['state']['text']}\"") if status["state"]["flags"]["error"]: if self.current_print != None: self.log("Printer Error") self.reset_current_print(RESET_ERROR) return if not status["state"]["flags"]["printing"]: if self.current_print != None: # We just finished a print, check the reason; # set the print status and remove current print if not self.cancel_flag: self.log("Normal print end") self.reset_current_print(RESET_ERROR if status["state"]["flags"]["error"] else RESET_SUCCESS) self.reset_current_print(RESET_SUCCESS) return job = self._make_octoprint_raw_request("/api/job") Loading Loading
back/myfab/api.py +21 −7 Original line number Diff line number Diff line Loading @@ -43,7 +43,8 @@ from myfab.queue import ( delete_printer, pull_printers, get_printer_for_request, get_queue_element_pos get_queue_element_pos, get_queue_elements_list ) init_db_connection() Loading Loading @@ -157,6 +158,13 @@ def add_request_event(req: PrintRequest, desc: str, op: User = None): Event.create(request=req, description=desc, operator=op) def dequeue_apply(req: PrintRequest): if req.queue_element != None: req.queue_element.state = 3 req.queue_element.save() req.queue_element = None req.save() """ Datetime to str """ Loading Loading @@ -262,10 +270,7 @@ def dequeue_request(req_id): if req.queue_element == None: return jsonify({"error": "Not queued"}), status.HTTP_404_NOT_FOUND req.queue_element.state = 3 req.queue_element.save() req.queue_element = None req.save() dequque_apply(req) return jsonify({}) @app.route("/requests/<req_id>", methods=["PUT"]) Loading @@ -291,8 +296,12 @@ def update_request(req_id): if get_access_level_to_request(req, current_user) < required_access: return jsonify({"error": "Access denied"}), status.HTTP_401_UNAUTHORIZED # TODO V3: successfull request statistics # TODO V3: request statistics for e in changes: if e == "status": if changes[e] == REQUEST_STATUS_CLOSED: # Dequeue request on close dequeue_apply(req) setattr(req, e, changes[e]) req.last_modification = datetime.datetime.now() req.save() Loading Loading @@ -775,7 +784,10 @@ def manage_queues(): "name": "queue_name", "weight": 0, queue weight, "printers": [ids ],* "enabled": true "enabled": true, "elements": [ {PrintRequest}... ] } ] """ Loading @@ -783,6 +795,7 @@ def manage_queues(): # get queues qs = [] for q in get_queues(): elems = get_queue_elements_list(q.id) qs.append( { "id": q.id, Loading @@ -793,6 +806,7 @@ def manage_queues(): get_printers_for_queue(q), )), "enabled": q.enabled, "elements": elems } ) return jsonify(qs) Loading
back/myfab/queue.py +17 −2 Original line number Diff line number Diff line Loading @@ -97,6 +97,15 @@ def remove_queue(qid): def create_queue(name, weight, meta): Queue.create(name=name, weight=weight, meta=meta) def get_queue_elements_list(qid): elems = [] for ql in PrintRequest.join(QueueElement).select().where(QueueElement.queue == qid).order_by(QueueElement.id): elems.append({ "id": ql.id, "author": ql.author, "title": ql.title }) return elems """ Add request to the end of the queue Loading @@ -118,7 +127,7 @@ def enqueue(req: PrintRequest, queue: Queue): def get_next_request(queue): try: qe = QueueElement.select().where(QueueElement.state == QUEUE_ELEMENT_STATE_INQUEUE).where(QueueElement.queue == queue).order_by(QueueElement.id.desc()).limit(1).get() qe = QueueElement.select().where(QueueElement.state == QUEUE_ELEMENT_STATE_INQUEUE).where(QueueElement.queue == queue).order_by(QueueElement.id).limit(1).get() if qe == None: return None return PrintRequest.select().where(PrintRequest.queue_element == qe).get() Loading Loading @@ -602,13 +611,19 @@ class OctoPrinter(PrinterBase): } self.log(f"Status is \"{status['state']['text']}\"") if status["state"]["flags"]["error"]: if self.current_print != None: self.log("Printer Error") self.reset_current_print(RESET_ERROR) return if not status["state"]["flags"]["printing"]: if self.current_print != None: # We just finished a print, check the reason; # set the print status and remove current print if not self.cancel_flag: self.log("Normal print end") self.reset_current_print(RESET_ERROR if status["state"]["flags"]["error"] else RESET_SUCCESS) self.reset_current_print(RESET_SUCCESS) return job = self._make_octoprint_raw_request("/api/job") Loading