Add proof-of-concept file uploading for job creation

This commit is contained in:
Brett Williams
2022-10-08 22:14:55 -07:00
parent e12171a6d2
commit 0f63aa629e
4 changed files with 57 additions and 7 deletions

View File

@@ -0,0 +1,4 @@
upload_folder: "/Users/brett/Desktop/zordon-uploads/"
max_content_path: 100000000
flask_log_level: error
queue_eval_seconds: 1

View File

@@ -5,3 +5,4 @@ PyYAML~=6.0
Flask==2.2.2
rich==12.6.0
ffmpeg-python
Werkzeug~=2.2.2

32
templates/upload.html Normal file
View File

@@ -0,0 +1,32 @@
<html>
<body>
<h1>Upload a file</h1>
<form action="http://localhost:8080/uploader" method="POST"
enctype="multipart/form-data">
<div>
<input type="file" name="file"/><br>
</div>
<div>
<label for="renderer">Renderer:</label>
<select id="renderer" name="renderer" onchange="javascript:rendererCheck();">
<option value="aerender">After Effects</option>
<option value="blender">Blender</option>
<option value="ffmpeg">FFMPEG</option>
</select>
</div>
<br>
<div id="show_blender">
Blender Engine:
<input type="radio" id="cycles" name="blender_engine" value="CYCLES" checked>
<label for="cycles">Cycles</label>
<input type="radio" id="eevee" name="blender_engine" value="BLENDER_EEVEE">
<label for="eevee">Eevee</label>
</div>
<br>
<input type="submit"/>
</form>
</body>
</html>

View File

@@ -27,8 +27,8 @@ JSON_FILE = 'job_history.json'
class RenderJob:
def __init__(self, render, priority, owner=None, client=None, notify=None):
self.id = str(uuid.uuid4()).split('-')[0]
def __init__(self, render, priority=2, owner=None, client=None, notify=None, custom_id=None):
self.id = custom_id or self.generate_id()
self.owner = owner
self.render = render
self.priority = priority
@@ -81,6 +81,10 @@ class RenderJob:
logger.error("Error converting to JSON: {}".format(e))
return json_string
@classmethod
def generate_id(cls):
return str(uuid.uuid4()).split('-')[0]
class RenderServer:
render_queue = []
@@ -380,11 +384,20 @@ def default():
return "Server running"
def start_server(background_thread=False):
def eval_loop():
while True:
RenderServer.evaluate_queue()
time.sleep(1)
@app.route('/upload')
def upload_file_page():
return render_template('upload.html')
@app.route('/uploader', methods=['GET', 'POST'])
def upload_file():
if request.method == 'POST':
try:
uploaded_file = request.files['file']
if not uploaded_file.filename:
return {'error': 'no file uploaded'}
with open('config.yaml') as f:
config = yaml.load(f, Loader=yaml.FullLoader)