diff --git a/src/api/api_server.py b/src/api/api_server.py index df0aae3..a670a9d 100755 --- a/src/api/api_server.py +++ b/src/api/api_server.py @@ -17,6 +17,7 @@ import psutil import yaml from flask import Flask, request, send_file, after_this_request, Response, redirect, url_for from sqlalchemy.orm.exc import DetachedInstanceError +from werkzeug.exceptions import HTTPException from src.api.job_import_handler import JobImportHandler from src.api.preview_manager import PreviewManager @@ -306,7 +307,7 @@ def add_job_handler(): return 'unknown error', 500 -@server.get('/api/job//cancel') +@server.post('/api/job//cancel') def cancel_job(job_id): if not request.args.get('confirm', False): return 'Confirmation required to cancel job', 400 @@ -320,7 +321,7 @@ def cancel_job(job_id): return "Unknown error", 500 -@server.route('/api/job//delete', methods=['POST', 'GET']) +@server.post('/api/job//delete') def delete_job(job_id): try: if not request.args.get("confirm", False): @@ -616,6 +617,9 @@ def handle_404(error): @server.errorhandler(Exception) def handle_general_error(general_error): + if isinstance(general_error, HTTPException): + return general_error.description, general_error.code + traceback.print_exception(type(general_error), general_error, general_error.__traceback__) err_msg = f"Server error: {general_error}" logger.error(err_msg) @@ -633,7 +637,7 @@ def detected_clients(): return ZeroconfServer.found_hostnames() -@server.get('/api/_debug/clear_history') +@server.post('/api/_debug/clear_history') def clear_history(): RenderQueue.clear_history() return 'success' diff --git a/src/api/server_proxy.py b/src/api/server_proxy.py index dfff16c..44d8d46 100644 --- a/src/api/server_proxy.py +++ b/src/api/server_proxy.py @@ -109,6 +109,11 @@ class RenderServerProxy: return requests.get(f'http://{self.hostname}:{self.port}/api/{payload}', timeout=timeout, headers={"X-API-Version": str(API_VERSION)}) + def _post(self, payload, timeout=5, **kwargs): + from src.api.api_server import API_VERSION + return requests.post(f'http://{self.hostname}:{self.port}/api/{payload}', timeout=timeout, + headers={"X-API-Version": str(API_VERSION)}, **kwargs) + # -------------------------------------------- # Background Updates: # -------------------------------------------- @@ -225,10 +230,10 @@ class RenderServerProxy: return response def cancel_job(self, job_id, confirm=False): - return self.request_data(f'job/{job_id}/cancel?confirm={confirm}') + return self._post(f'job/{job_id}/cancel', params={'confirm': confirm}) def delete_job(self, job_id, confirm=False): - return self.request_data(f'job/{job_id}/delete?confirm={confirm}') + return self._post(f'job/{job_id}/delete', params={'confirm': confirm}) def send_subjob_update_notification(self, parent_id, subjob): """