diff --git a/lib/render_workers/blender_worker.py b/lib/render_workers/blender_worker.py index 83abb40..eb99666 100644 --- a/lib/render_workers/blender_worker.py +++ b/lib/render_workers/blender_worker.py @@ -27,12 +27,6 @@ class Blender(BaseRenderEngine): formats = re.findall(r"'([A-Z_0-9]+)'", format_string) return formats - @classmethod - def full_report(cls): - return {'version': cls.version(), - 'help_text': cls.get_help(), - 'formats': cls.get_formats()} - @classmethod def run_python_expression(cls, project_path, python_expression): if os.path.exists(project_path): diff --git a/lib/scheduled_job.py b/lib/scheduled_job.py index a97972c..49a9859 100644 --- a/lib/scheduled_job.py +++ b/lib/scheduled_job.py @@ -41,7 +41,7 @@ class ScheduledJob(Base): self.name = name or os.path.basename(input_path) + '_' + self.date_created.strftime("%Y.%m.%d_%H.%M.%S") 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.log_path = self.log_path() self.worker_object.validate() self.file_hash = None @@ -62,22 +62,25 @@ class ScheduledJob(Base): """Converts RenderJob into JSON-friendly dict""" job_dict = None try: - job_dict = self.__dict__.copy() - job_dict['status'] = self.render_status().value - job_dict['time_elapsed'] = self.time_elapsed() if type(self.time_elapsed) != str else self.time_elapsed - job_dict['file_hash'] = self.file_hash - job_dict['percent_complete'] = self.percent_complete() - job_dict['file_list'] = self.file_list() - job_dict['worker'] = self.worker.__dict__.copy() - job_dict['worker']['status'] = job_dict['status'] - - # remove unwanted keys from dict - keys_to_remove = ['thread', 'process'] - for key in job_dict['worker'].keys(): - if key.startswith('_'): - keys_to_remove.append(key) - for key in keys_to_remove: - job_dict['worker'].pop(key, None) + job_dict = { + 'id': self.id, + 'name': self.name, + 'input_path': self.input_path, + 'output_path': self.output_path, + 'priority': self.priority, + 'owner': self.owner, + 'client': self.client, + 'notify': self.notify, + 'date_created': self.date_created, + 'scheduled_start': self.scheduled_start, + 'status': self.render_status().value, + 'time_elapsed': self.worker().time_elapsed() if hasattr(self.worker(), 'time_elapsed') else None, + 'file_hash': self.file_hash, + 'percent_complete': self.percent_complete(), + 'file_list': self.file_list(), + 'renderer': self.renderer, + 'worker': self.worker().json() if hasattr(self.worker(), 'json') else {}, + } # convert to json and back to auto-convert dates to iso format def date_serializer(o): @@ -138,11 +141,11 @@ class ScheduledJob(Base): return glob.glob(os.path.join(job_dir, '*')) def log_path(self): - return self.worker.log_path + return os.path.join(os.path.dirname(self.input_path), self.name + '.log') def percent_complete(self): return self.worker.percent_complete() @classmethod def generate_id(cls): - return str(uuid.uuid4()).split('-')[0] \ No newline at end of file + return str(uuid.uuid4()).split('-')[0] diff --git a/lib/server/static/js/job_table.js b/lib/server/static/js/job_table.js index ba2d63c..d99039f 100644 --- a/lib/server/static/js/job_table.js +++ b/lib/server/static/js/job_table.js @@ -10,7 +10,7 @@ columns: [ data: (row) => row.name, formatter: (name, row) => gridjs.html(`${name}`) }, - { id: 'renderer', data: (row) => `${row.renderer}-${row.worker.renderer_version}`, name: 'Renderer' }, + { id: 'renderer', data: (row) => `${row.renderer}-${row.worker?.renderer_version}`, name: 'Renderer' }, { id: 'priority', name: 'Priority' }, { id: 'status', name: 'Status', @@ -21,9 +21,9 @@ columns: [ value="${(parseFloat(cell.percent_complete) * 100.0)}" max="100">${cell.status} `)}, { id: 'time_elapsed', name: 'Time Elapsed' }, - { data: (row) => row.worker.total_frames, name: 'Frame Count' }, + { data: (row) => row.worker?.total_frames ?? 'N/A', name: 'Frame Count' }, { id: 'client', name: 'Client'}, - { data: (row) => row.worker.last_output, + { data: (row) => row.worker?.last_output ?? 'N/A', name: 'Last Output', formatter: (output, row) => gridjs.html(`${output}`) },