mirror of
https://github.com/blw1138/Zordon.git
synced 2025-12-17 08:48:13 +00:00
Fix HTML error codes in server response
This commit is contained in:
83
server.py
83
server.py
@@ -10,7 +10,7 @@ from datetime import datetime
|
|||||||
|
|
||||||
import requests
|
import requests
|
||||||
import yaml
|
import yaml
|
||||||
from flask import Flask, jsonify, request, render_template
|
from flask import Flask, request, render_template
|
||||||
from werkzeug.utils import secure_filename
|
from werkzeug.utils import secure_filename
|
||||||
|
|
||||||
from lib.render_job import RenderJob
|
from lib.render_job import RenderJob
|
||||||
@@ -60,6 +60,11 @@ def unregister_client():
|
|||||||
return "Success" if x else "Fail"
|
return "Success" if x else "Fail"
|
||||||
|
|
||||||
|
|
||||||
|
@app.get('/clients')
|
||||||
|
def render_clients():
|
||||||
|
return RenderManager.render_clients
|
||||||
|
|
||||||
|
|
||||||
@app.get('/full_status')
|
@app.get('/full_status')
|
||||||
def full_status():
|
def full_status():
|
||||||
full_results = {'timestamp': datetime.now().isoformat(), 'servers': {}}
|
full_results = {'timestamp': datetime.now().isoformat(), 'servers': {}}
|
||||||
@@ -106,9 +111,14 @@ def add_job():
|
|||||||
# handle request values from HTML pages - may deprecate if HTML is not used or can pass JSON from HTML
|
# handle request values from HTML pages - may deprecate if HTML is not used or can pass JSON from HTML
|
||||||
request_params = request.values
|
request_params = request.values
|
||||||
|
|
||||||
|
json_string = request.form.get('json', None)
|
||||||
|
if not json_string:
|
||||||
|
return 'missing json data', 400
|
||||||
|
|
||||||
|
request_params = json.loads(json_string)
|
||||||
renderer = request_params.get("renderer", None)
|
renderer = request_params.get("renderer", None)
|
||||||
input_path = request_params.get("input", None)
|
input_path = request_params.get("input", None)
|
||||||
output_path = request_params.get("output", "test-output.mp4")
|
output_path = request_params.get("output", None)
|
||||||
priority = int(request_params.get('priority', 2))
|
priority = int(request_params.get('priority', 2))
|
||||||
args = request_params.get('args', {})
|
args = request_params.get('args', {})
|
||||||
client = request_params.get('client', RenderManager.host_name)
|
client = request_params.get('client', RenderManager.host_name)
|
||||||
@@ -120,13 +130,13 @@ def add_job():
|
|||||||
if None in [renderer, input_path or (uploaded_file and uploaded_file.filename), output_path]:
|
if None in [renderer, input_path or (uploaded_file and uploaded_file.filename), output_path]:
|
||||||
err_msg = 'Cannot add job: Missing required parameters'
|
err_msg = 'Cannot add job: Missing required parameters'
|
||||||
logger.error(err_msg)
|
logger.error(err_msg)
|
||||||
return {'error': err_msg}
|
return err_msg, 400
|
||||||
|
|
||||||
# cleanup args from html form and convert them into an args dict
|
# # cleanup args from html form and convert them into an args dict
|
||||||
for key, val in request_params.items():
|
# for key, val in request_params.items():
|
||||||
if key.startswith(renderer):
|
# if key.startswith(renderer):
|
||||||
cleaned_key = key.split('+')[-1]
|
# cleaned_key = key.split('+')[-1]
|
||||||
args[cleaned_key] = val
|
# args[cleaned_key] = val
|
||||||
|
|
||||||
# handle uploaded files
|
# handle uploaded files
|
||||||
if uploaded_file and uploaded_file.filename:
|
if uploaded_file and uploaded_file.filename:
|
||||||
@@ -139,9 +149,7 @@ def add_job():
|
|||||||
local_path = os.path.join(job_dir, secure_filename(uploaded_file.filename))
|
local_path = os.path.join(job_dir, secure_filename(uploaded_file.filename))
|
||||||
uploaded_file.save(local_path)
|
uploaded_file.save(local_path)
|
||||||
input_path = local_path
|
input_path = local_path
|
||||||
|
output_path = os.path.join(job_dir, os.path.basename(output_path))
|
||||||
# todo: finish output_path - currently placeholder data
|
|
||||||
output_path = os.path.join(job_dir, uploaded_file.filename + "-output.mp4")
|
|
||||||
|
|
||||||
# local renders
|
# local renders
|
||||||
if client == RenderManager.host_name:
|
if client == RenderManager.host_name:
|
||||||
@@ -149,8 +157,9 @@ def add_job():
|
|||||||
try:
|
try:
|
||||||
render_job = RenderWorkerFactory.create_worker(renderer, input_path, output_path, args)
|
render_job = RenderWorkerFactory.create_worker(renderer, input_path, output_path, args)
|
||||||
except ValueError as e:
|
except ValueError as e:
|
||||||
logger.exception(e)
|
err_msg = f"Error creating job: {str(e)}"
|
||||||
return {'error': str(e)}, 400
|
logger.exception(err_msg)
|
||||||
|
return err_msg, 400
|
||||||
|
|
||||||
new_job = RenderJob(render_job, priority=priority, custom_id=custom_id)
|
new_job = RenderJob(render_job, priority=priority, custom_id=custom_id)
|
||||||
RenderManager.add_to_render_queue(new_job, force_start=force_start)
|
RenderManager.add_to_render_queue(new_job, force_start=force_start)
|
||||||
@@ -163,47 +172,34 @@ def add_job():
|
|||||||
# see if host is available
|
# see if host is available
|
||||||
if RenderManager.is_client_available(client):
|
if RenderManager.is_client_available(client):
|
||||||
|
|
||||||
if args and renderer == 'blender' and args.get('pack_files', False):
|
|
||||||
from utilities.blender_worker import pack_blender_files
|
|
||||||
new_path = pack_blender_files(path=input_path)
|
|
||||||
if new_path:
|
|
||||||
logger.info(f'Packed Blender file successfully: {new_path}')
|
|
||||||
input_path = new_path
|
|
||||||
else:
|
|
||||||
err_msg = f'Failed to pack Blender file: {input_path}'
|
|
||||||
logger.error(err_msg)
|
|
||||||
return {'error': err_msg}, 400
|
|
||||||
|
|
||||||
# call uploader on remote client
|
# call uploader on remote client
|
||||||
try:
|
try:
|
||||||
job_files = {'file': open(input_path, 'rb')}
|
|
||||||
job_data = request.json
|
|
||||||
job_data['input'] = input_path
|
|
||||||
logger.info(f"Uploading file {input_path} to client {client}")
|
logger.info(f"Uploading file {input_path} to client {client}")
|
||||||
response = requests.post(f"http://{client}:8080/add_job", files=job_files, data=job_data)
|
job_data = request.json
|
||||||
|
response = post_job_to_server(input_path, job_data)
|
||||||
if response.ok:
|
if response.ok:
|
||||||
logger.info("Job submitted successfully!")
|
logger.info("Job submitted successfully!")
|
||||||
return response.json() if response.json() else "Job ok"
|
return response.json() if response.json() else "Job ok"
|
||||||
else:
|
else:
|
||||||
return {'error', 'Job rejected by client'}, 400
|
return 'Job rejected by client', 403
|
||||||
except requests.ConnectionError as e:
|
except requests.ConnectionError as e:
|
||||||
err_msg = f"Error submitting job to client: {client}"
|
err_msg = f"Error submitting job to client: {client}"
|
||||||
logger.error(err_msg)
|
logger.error(err_msg)
|
||||||
return {'error', err_msg}, 400
|
return err_msg, 500
|
||||||
else:
|
else:
|
||||||
# client is not available
|
# client is not available
|
||||||
err_msg = f"Render client '{client}' is unreachable"
|
err_msg = f"Render client '{client}' is unreachable"
|
||||||
logger.error(err_msg)
|
logger.error(err_msg)
|
||||||
return {'error', err_msg}, 400
|
return err_msg, 503
|
||||||
|
|
||||||
else:
|
else:
|
||||||
err_msg = f"Unknown render client: '{client}'"
|
err_msg = f"Unknown render client: '{client}'"
|
||||||
logger.error(err_msg)
|
logger.error(err_msg)
|
||||||
return {'error', err_msg}, 400
|
return err_msg, 400
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.exception(f"Unknown error adding job: {e}")
|
logger.exception(f"Unknown error adding job: {e}")
|
||||||
return {'error', 'cannot add job'}
|
return 'unknown error', 500
|
||||||
|
|
||||||
|
|
||||||
@app.get('/cancel_job')
|
@app.get('/cancel_job')
|
||||||
@@ -211,24 +207,24 @@ def cancel_job():
|
|||||||
job_id = request.args.get('id', None)
|
job_id = request.args.get('id', None)
|
||||||
confirm = request.args.get('confirm', False)
|
confirm = request.args.get('confirm', False)
|
||||||
if not job_id:
|
if not job_id:
|
||||||
return {'error': 'job id not found'}, 400
|
return 'job id not found', 400
|
||||||
elif not confirm:
|
elif not confirm:
|
||||||
return {'error': 'confirmation required'}, 400
|
return 'confirmation required', 400
|
||||||
else:
|
else:
|
||||||
found = [x for x in RenderManager.render_queue if x.id == job_id]
|
found = [x for x in RenderManager.render_queue if x.id == job_id]
|
||||||
if len(found) > 1:
|
if len(found) > 1:
|
||||||
# logger.error('Multiple jobs found for ID {}'.format(job_id))
|
# logger.error('Multiple jobs found for ID {}'.format(job_id))
|
||||||
return jsonify({'error': 'multiple jobs found for ID {}'.format(job_id)})
|
return f'multiple jobs found for ID {job_id}', 400
|
||||||
elif found:
|
elif found:
|
||||||
success = RenderManager.cancel_job(found[0])
|
success = RenderManager.cancel_job(found[0])
|
||||||
return jsonify({'result': success})
|
return success
|
||||||
return {'error': 'job not found'}, 400
|
return 'job not found', 400
|
||||||
|
|
||||||
|
|
||||||
@app.get('/clear_history')
|
@app.get('/clear_history')
|
||||||
def clear_history():
|
def clear_history():
|
||||||
RenderManager.clear_history()
|
RenderManager.clear_history()
|
||||||
return {'result': True}
|
return 'success'
|
||||||
|
|
||||||
|
|
||||||
@app.route('/status')
|
@app.route('/status')
|
||||||
@@ -247,6 +243,15 @@ def upload_file_page():
|
|||||||
supported_renderers=RenderWorkerFactory.supported_renderers())
|
supported_renderers=RenderWorkerFactory.supported_renderers())
|
||||||
|
|
||||||
|
|
||||||
|
def post_job_to_server(input_path, job_json, client, server_port=8080):
|
||||||
|
# Pack job data and submit to server
|
||||||
|
job_files = {'file': (os.path.basename(input_path), open(input_path, 'rb'), 'application/octet-stream'),
|
||||||
|
'json': (None, json.dumps(job_json), 'application/json')}
|
||||||
|
|
||||||
|
req = requests.post(f'http://{client}:{server_port}/add_job', files=job_files)
|
||||||
|
return req
|
||||||
|
|
||||||
|
|
||||||
def start_server(background_thread=False):
|
def start_server(background_thread=False):
|
||||||
|
|
||||||
def eval_loop(delay_sec=1):
|
def eval_loop(delay_sec=1):
|
||||||
|
|||||||
Reference in New Issue
Block a user