Verified Commit f16de4ab authored by Grégor JOUET's avatar Grégor JOUET 🔧
Browse files

Fix queues and get queues infos

parent 5aaa8f66
Loading
Loading
Loading
Loading
Loading
+21 −7
Original line number Diff line number Diff line
@@ -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()
@@ -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
"""
@@ -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"])
@@ -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()
@@ -775,7 +784,10 @@ def manage_queues():
            "name": "queue_name",
            "weight": 0, queue weight,
            "printers": [ids ],*
            "enabled": true
            "enabled": true,
            "elements": [
                {PrintRequest}...
            ]
        }
    ]
    """
@@ -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,
@@ -793,6 +806,7 @@ def manage_queues():
                        get_printers_for_queue(q),
                    )),
                    "enabled": q.enabled,
                    "elements": elems
                }
            )
        return jsonify(qs)
+17 −2
Original line number Diff line number Diff line
@@ -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
@@ -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()
@@ -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")