job_queue: register remote method to control the queue

Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
This commit is contained in:
Eric Callahan 2021-11-26 20:35:10 -05:00
parent e9b3d8e7ae
commit 4837ea56cb
1 changed files with 16 additions and 9 deletions

View File

@ -52,6 +52,10 @@ class JobQueue:
self.server.register_event_handler(
"job_state:cancelled", self._on_job_abort)
self.server.register_remote_method("pause_job_queue", self.pause_queue)
self.server.register_remote_method("resume_job_queue",
self.resume_queue)
self.server.register_endpoint(
"/server/job_queue/job", ['POST', 'DELETE'],
self._handle_job_request)
@ -168,6 +172,17 @@ class JobQueue:
await self.lock.acquire()
self.lock.release()
async def resume_queue(self) -> None:
async with self.lock:
if self.queue_state != "loading":
if self.queued_jobs and await self._check_can_print():
self.queue_state = "loading"
event_loop = self.server.get_event_loop()
self.pop_queue_handle = event_loop.delay_callback(
0.01, self._pop_job)
else:
self.queue_state = "ready"
def _job_map_to_list(self) -> List[Dict[str, Any]]:
cur_time = time.time()
return [job.as_dict(cur_time) for
@ -223,15 +238,7 @@ class JobQueue:
async def _handle_resume_queue(self,
web_request: WebRequest
) -> Dict[str, Any]:
async with self.lock:
if self.queue_state != "loading":
if self.queued_jobs and await self._check_can_print():
self.queue_state = "loading"
event_loop = self.server.get_event_loop()
self.pop_queue_handle = event_loop.delay_callback(
0.01, self._pop_job)
else:
self.queue_state = "ready"
await self.resume_queue()
return {
'queued_jobs': self._job_map_to_list(),
'queue_state': self.queue_state