mirror of
https://github.com/blw1138/Zordon.git
synced 2025-12-17 16:58:12 +00:00
Convert render_queue and scheduledjob to use sql instead of json
This commit is contained in:
@@ -3,7 +3,6 @@ import hashlib
|
||||
import json
|
||||
import logging
|
||||
import os
|
||||
import threading
|
||||
import uuid
|
||||
from datetime import datetime
|
||||
|
||||
@@ -20,10 +19,17 @@ class ScheduledJob(Base):
|
||||
__tablename__ = 'scheduled_jobs'
|
||||
id = Column(String, primary_key=True)
|
||||
|
||||
# Get file hash on bg thread
|
||||
def __get_file_hash(self):
|
||||
if os.path.exists(self.worker.input_path):
|
||||
self.file_hash = hashlib.md5(open(self.worker.input_path, 'rb').read()).hexdigest()
|
||||
renderer = Column(String)
|
||||
input_path = Column(String)
|
||||
output_path = Column(String)
|
||||
priority = Column(Integer)
|
||||
owner = Column(String)
|
||||
client = Column(String)
|
||||
notify = Column(String)
|
||||
date_created = Column(DateTime)
|
||||
scheduled_start = Column(DateTime)
|
||||
name = Column(String)
|
||||
file_hash = Column(String)
|
||||
|
||||
def __init__(self, renderer, input_path, output_path, args, priority=2, owner=None, client=None, notify=None,
|
||||
custom_id=None, name=None):
|
||||
@@ -45,18 +51,23 @@ class ScheduledJob(Base):
|
||||
self.worker_object.validate()
|
||||
|
||||
self.file_hash = None
|
||||
threading.Thread(target=self.__get_file_hash).start() # get file hash on bg thread
|
||||
if not self.file_hash and os.path.exists(input_path):
|
||||
self.file_hash = hashlib.md5(open(input_path, 'rb').read()).hexdigest()
|
||||
|
||||
def worker(self):
|
||||
if hasattr(self, 'worker_object'):
|
||||
return self.worker_object
|
||||
else:
|
||||
return {}
|
||||
|
||||
def render_status(self):
|
||||
if self.scheduled_start and self.worker.status == RenderStatus.NOT_STARTED:
|
||||
return RenderStatus.SCHEDULED
|
||||
else:
|
||||
return self.worker.status
|
||||
|
||||
def file_hash(self):
|
||||
if os.path.exists(self.worker.input_path):
|
||||
return hashlib.md5(open(self.worker.input_path, 'rb').read()).hexdigest()
|
||||
return None
|
||||
try:
|
||||
if self.scheduled_start and self.worker().status == RenderStatus.NOT_STARTED:
|
||||
return RenderStatus.SCHEDULED
|
||||
else:
|
||||
return self.worker().status
|
||||
except:
|
||||
return RenderStatus.CANCELLED
|
||||
|
||||
def json(self):
|
||||
"""Converts RenderJob into JSON-friendly dict"""
|
||||
@@ -94,44 +105,15 @@ class ScheduledJob(Base):
|
||||
return job_dict
|
||||
|
||||
def start(self):
|
||||
self.worker.start()
|
||||
if hasattr(self, 'worker'):
|
||||
self.worker().start()
|
||||
|
||||
def stop(self):
|
||||
self.worker.stop()
|
||||
|
||||
def time_elapsed(self):
|
||||
|
||||
from string import Template
|
||||
|
||||
class DeltaTemplate(Template):
|
||||
delimiter = "%"
|
||||
|
||||
def strfdelta(tdelta, fmt='%H:%M:%S'):
|
||||
d = {"D": tdelta.days}
|
||||
hours, rem = divmod(tdelta.seconds, 3600)
|
||||
minutes, seconds = divmod(rem, 60)
|
||||
d["H"] = '{:02d}'.format(hours)
|
||||
d["M"] = '{:02d}'.format(minutes)
|
||||
d["S"] = '{:02d}'.format(seconds)
|
||||
t = DeltaTemplate(fmt)
|
||||
return t.substitute(**d)
|
||||
|
||||
# calculate elapsed time
|
||||
elapsed_time = None
|
||||
start_time = self.worker.start_time
|
||||
end_time = self.worker.end_time
|
||||
|
||||
if start_time:
|
||||
if end_time:
|
||||
elapsed_time = end_time - start_time
|
||||
elif self.render_status() == RenderStatus.RUNNING:
|
||||
elapsed_time = datetime.now() - start_time
|
||||
|
||||
elapsed_time_string = strfdelta(elapsed_time) if elapsed_time else "Unknown"
|
||||
return elapsed_time_string
|
||||
if hasattr(self, 'worker'):
|
||||
self.worker().stop()
|
||||
|
||||
def frame_count(self):
|
||||
return self.worker.total_frames
|
||||
return self.worker().total_frames
|
||||
|
||||
def work_path(self):
|
||||
return os.path.dirname(self.output_path)
|
||||
@@ -144,7 +126,10 @@ class ScheduledJob(Base):
|
||||
return os.path.join(os.path.dirname(self.input_path), self.name + '.log')
|
||||
|
||||
def percent_complete(self):
|
||||
return self.worker.percent_complete()
|
||||
try:
|
||||
return self.worker().percent_complete()
|
||||
except:
|
||||
return -1
|
||||
|
||||
@classmethod
|
||||
def generate_id(cls):
|
||||
|
||||
Reference in New Issue
Block a user