RenderWorker cleanup and add camera methods to BlenderRenderWorker

This commit is contained in:
Brett Williams
2022-10-25 15:28:51 -07:00
parent 3ee3dfd4e2
commit 2da06ab166
5 changed files with 93 additions and 76 deletions

View File

@@ -1,3 +1,4 @@
#!/usr/bin/env python3
import io
import logging
import os
@@ -35,10 +36,6 @@ class BaseRenderWorker(object):
install_paths = []
supported_export_formats = []
@classmethod
def version(cls):
raise NotImplementedError("Unknown version")
def __init__(self, input_path, output_path, args=None, ignore_extensions=True):
if not ignore_extensions:
@@ -52,7 +49,6 @@ class BaseRenderWorker(object):
self.output = output_path
self.args = args or {}
self.date_created = datetime.now()
self.attributes = {}
self.renderer_version = self.version()
# Ranges
@@ -63,7 +59,6 @@ class BaseRenderWorker(object):
self.log_path = None
self.start_time = None
self.end_time = None
self.last_error = None
# History
self.status = RenderStatus.NOT_STARTED
@@ -79,17 +74,21 @@ class BaseRenderWorker(object):
self.is_finished = False
self.last_output = None
@classmethod
def version(cls):
raise NotImplementedError("Unknown version")
@classmethod
def renderer_path(cls):
path = None
try:
path = subprocess.check_output(['which', cls.render_engine]).decode('utf-8').strip()
except Exception as e:
except subprocess.CalledProcessError:
for p in cls.install_paths:
if os.path.exists(p):
path = p
# if not path:
# logger.error("Failed to get path to {}: {}".format(self.renderer, e))
except Exception as e:
logging.exception(e)
return path
def _generate_subprocess(self):
@@ -215,6 +214,15 @@ class BaseRenderWorker(object):
class RenderWorkerFactory:
@staticmethod
def supported_classes():
# to add support for any additional RenderWorker classes, import their classes and add to list here
from utilities.blender_worker import BlenderRenderWorker
from utilities.aerender_worker import AERenderWorker
from utilities.ffmpeg_worker import FFMPEGRenderWorker
classes = [BlenderRenderWorker, AERenderWorker, FFMPEGRenderWorker]
return classes
@staticmethod
def create_worker(renderer, input_path, output_path, args=None):
worker_class = RenderWorkerFactory.class_for_name(renderer)
@@ -222,23 +230,14 @@ class RenderWorkerFactory:
@staticmethod
def supported_renderers():
return ['aerender', 'blender', 'ffmpeg']
return [x.render_engine for x in RenderWorkerFactory.supported_classes()]
@staticmethod
def class_for_name(name):
from utilities.blender_worker import BlenderRenderWorker
from utilities.aerender_worker import AERenderWorker
from utilities.ffmpeg_worker import FFMPEGRenderWorker
name = name.lower()
if "blender" == name:
return BlenderRenderWorker
elif "aerender" == name:
return AERenderWorker
elif "ffmpeg" == name:
return FFMPEGRenderWorker
for render_class in RenderWorkerFactory.supported_classes():
if render_class.render_engine == name:
return render_class
raise LookupError(f'Cannot find class for name: {name}')