Change Renderer classes to RenderWorkers. Created RenderWorkerFactory.

This commit is contained in:
Brett Williams
2022-10-08 17:09:13 -07:00
parent 1c304e77f5
commit 7b33f06405
6 changed files with 79 additions and 61 deletions

View File

@@ -13,11 +13,7 @@ import json
import os
from flask import Flask, jsonify, request
from utilities.aerender import AERenderer
from utilities.blender import BlenderRenderer
from utilities.ffmpeg_render import FFMPEGRenderer
from utilities.generic_renderer import RenderStatus
from utilities.generic_renderer import string_to_status
from utilities.render_worker import RenderWorkerFactory, RenderStatus, string_to_status
data = 'foo'
app = Flask(__name__)
@@ -86,11 +82,6 @@ class RenderJob:
return json_string
def render_factory(input_path, output_path):
if '.blend' in input_path.lower():
return BlenderRenderer(input_path, output_path)
class RenderServer:
render_queue = []
render_clients = []
@@ -154,14 +145,7 @@ class RenderServer:
for job in job_list:
# Identify renderer type and recreate Renderer object
# TODO: refactor to factory class
job_render_object = None
if job['renderer'] == 'Blender':
job_render_object = BlenderRenderer(job['render']['input'], job['render']['output'])
elif job['renderer'] == 'After Effects':
AERenderer()
elif job['renderer'] == 'ffmpeg':
job_render_object = FFMPEGRenderer(job['render']['input'], job['render']['output'])
job_render_object = RenderWorkerFactory.create_worker(job['renderer'], input_path=job['render']['input'], output_path=job['render']['output'])
# Load Renderer values
for key, val in job['render'].items():
@@ -335,27 +319,29 @@ def add_job():
renderer = request.json["renderer"]
input_path = request.json["input"]
output_path = request.json["output"]
priority = request.json.get('priority', 2)
args = request.json.get('args', None)
force_start = request.json.get('force_start', False)
return add_job_handler(renderer, input_path, output_path, args=args, priority=priority, force_start=force_start)
def add_job_handler(renderer, input_path, output_path, args=None, priority=2, force_start=False):
if not os.path.exists(input_path):
err_msg = f"Cannot add job. Cannot find input file: {input_path}"
logger.error(err_msg)
return {"error": err_msg}, 400
# todo: create factory class for creating renderers
if "blender" in renderer:
render_job = BlenderRenderer(input_path, output_path)
render_job.engine = request.json.get('engine', 'BLENDER_EEVEE')
elif "aerender" in renderer:
render_job = AERenderer(input_path, output_path)
elif "ffmpeg" in renderer:
render_job = FFMPEGRenderer(input_path, output_path, args=request.json.get('args', None))
else:
err_msg = "Unknown renderer: {}".format(renderer)
logger.error(err_msg)
return {'error': err_msg}, 400
try:
render_job = RenderWorkerFactory.create_worker(renderer, input_path, output_path, args)
except ValueError as e:
logger.exception(e)
return {'error': str(e)}, 400
new_job = RenderJob(render_job, priority=priority)
RenderServer.add_to_render_queue(new_job, force_start=force_start)
new_job = RenderJob(render_job, priority=request.json.get('priority', 2))
RenderServer.add_to_render_queue(new_job, force_start=request.json.get('force_start', False))
return new_job.json()