diff --git a/lib/job_server.py b/lib/job_server.py index ed42cdf..ed61ab4 100755 --- a/lib/job_server.py +++ b/lib/job_server.py @@ -140,33 +140,32 @@ def add_job_handler(): try: """Create new job and add to server render queue""" - json_string = request.form.get('json', None) - uploaded_file = request.files.get('file', None) - if not json_string: + if not request.form.get('json', None) and not request.is_json: return 'missing json data', 400 # handle uploaded files + uploaded_file = request.files.get('file', None) uploaded_file_local_path = None job_dir = None if uploaded_file and uploaded_file.filename: logger.info(f"Receiving uploaded file {uploaded_file.filename}") - new_id = RenderJob.generate_id() - job_dir = os.path.join(server.config['UPLOAD_FOLDER'], new_id + "-" + uploaded_file.filename) - if not os.path.exists(job_dir): - os.makedirs(job_dir) + job_dir = os.path.join(server.config['UPLOAD_FOLDER'], (uploaded_file.filename + "_" + + datetime.now().strftime("%Y.%m.%d_%H.%M.%S"))) + os.makedirs(job_dir, exist_ok=True) uploaded_file_local_path = os.path.join(job_dir, secure_filename(uploaded_file.filename)) uploaded_file.save(uploaded_file_local_path) # convert job input paths for uploaded files and add jobs - jobs_list = json.loads(json_string) + json_string = request.form.get('json', None) + jobs_list = json.loads(json_string) if json_string else [request.json] results = [] for job in jobs_list: if uploaded_file_local_path: job['input_path'] = uploaded_file_local_path - output_dir = os.path.join(job_dir, job.get('name', 'output')) + output_dir = os.path.join(job_dir, job.get('name', None) or 'output') os.makedirs(output_dir, exist_ok=True) job['output_path'] = os.path.join(output_dir, os.path.basename(job['output_path'])) - remove_job_dir = len(jobs_list) == 1 # remove failed job dir for single file uploads only + remove_job_dir = len(jobs_list) == 1 and uploaded_file_local_path # remove failed job dir for single file uploads only add_result = add_job(job, remove_job_dir_on_failure=remove_job_dir) results.append(add_result) diff --git a/lib/render_job.py b/lib/render_job.py index 640af8e..6a366d7 100644 --- a/lib/render_job.py +++ b/lib/render_job.py @@ -22,7 +22,7 @@ class RenderJob: self.date_created = datetime.now() self.scheduled_start = None self.renderer = renderer - self.name = name or os.path.basename(input_path) + '_' + self.date_created.isoformat() + self.name = name or os.path.basename(input_path) + '_' + self.date_created.strftime("%Y.%m.%d_%H.%M.%S") self.worker = RenderWorkerFactory.create_worker(renderer, input_path, output_path, args) self.worker.log_path = os.path.join(os.path.dirname(input_path), self.name + '.log') @@ -45,7 +45,7 @@ class RenderJob: try: job_dict = self.__dict__.copy() job_dict['status'] = self.render_status().value - job_dict['file_hash'] = self.file_hash if isinstance(self.file_hash, str) else self.file_hash() + job_dict['file_hash'] = self.file_hash if self.file_hash and isinstance(self.file_hash, str) else self.file_hash() job_dict['worker'] = self.worker.__dict__.copy() job_dict['worker']['status'] = job_dict['status']