From 4446c61f1dafec334ffb4ee946c2c38b27fd35ad Mon Sep 17 00:00:00 2001 From: Brett Williams Date: Tue, 23 May 2023 23:52:29 -0500 Subject: [PATCH] Adding initial db to queue --- lib/render_queue.py | 11 ++++++++++- lib/scheduled_job.py | 25 +++++++++++++++++-------- 2 files changed, 27 insertions(+), 9 deletions(-) diff --git a/lib/render_queue.py b/lib/render_queue.py index a3a56ad..4212228 100755 --- a/lib/render_queue.py +++ b/lib/render_queue.py @@ -4,10 +4,12 @@ import os import platform from datetime import datetime +from sqlalchemy import create_engine +from sqlalchemy.orm import sessionmaker import psutil import requests -from .scheduled_job import ScheduledJob +from .scheduled_job import ScheduledJob, Base from .render_workers.render_worker import RenderStatus logger = logging.getLogger() @@ -23,6 +25,11 @@ class JobNotFoundError(Exception): class RenderQueue: + + engine = create_engine('sqlite:///database.db') + Base.metadata.create_all(engine) + Session = sessionmaker(bind=engine) + session = Session() job_queue = [] render_clients = [] maximum_renderer_instances = {'blender': 2, 'aerender': 1, 'ffmpeg': 4} @@ -45,6 +52,8 @@ class RenderQueue: cls.job_queue.append(render_job) if force_start: cls.start_job(render_job) + cls.session.add(render_job) + cls.session.commit() else: # todo: implement client rendering logger.warning('remote client rendering not implemented yet') diff --git a/lib/scheduled_job.py b/lib/scheduled_job.py index 42171c5..a97972c 100644 --- a/lib/scheduled_job.py +++ b/lib/scheduled_job.py @@ -7,12 +7,18 @@ import threading import uuid from datetime import datetime +from sqlalchemy import Column, Integer, String, DateTime, JSON +from sqlalchemy.ext.declarative import declarative_base + from .render_workers.render_worker import RenderStatus, RenderWorkerFactory logger = logging.getLogger() +Base = declarative_base() -class ScheduledJob: +class ScheduledJob(Base): + __tablename__ = 'scheduled_jobs' + id = Column(String, primary_key=True) # Get file hash on bg thread def __get_file_hash(self): @@ -22,18 +28,21 @@ class ScheduledJob: def __init__(self, renderer, input_path, output_path, args, priority=2, owner=None, client=None, notify=None, custom_id=None, name=None): self.id = custom_id or self.generate_id() - self.owner = owner + + self.renderer = renderer + self.input_path = input_path + self.output_path = output_path self.priority = priority + self.owner = owner self.client = client self.notify = notify self.date_created = datetime.now() self.scheduled_start = None - self.renderer = renderer self.name = name or os.path.basename(input_path) + '_' + self.date_created.strftime("%Y.%m.%d_%H.%M.%S") - self.worker = RenderWorkerFactory.create_worker(renderer, input_path, output_path, args) - self.worker.log_path = os.path.join(os.path.dirname(input_path), self.name + '.log') - self.worker.validate() + self.worker_object = RenderWorkerFactory.create_worker(renderer, input_path, output_path, args) + self.worker_object.log_path = os.path.join(os.path.dirname(input_path), self.name + '.log') + self.worker_object.validate() self.file_hash = None threading.Thread(target=self.__get_file_hash).start() # get file hash on bg thread @@ -122,10 +131,10 @@ class ScheduledJob: return self.worker.total_frames def work_path(self): - return os.path.dirname(self.worker.output_path) + return os.path.dirname(self.output_path) def file_list(self): - job_dir = os.path.dirname(self.worker.output_path) + job_dir = os.path.dirname(self.output_path) return glob.glob(os.path.join(job_dir, '*')) def log_path(self):