From 86977b9d6d041e9fd08eeff0e9fe5bcbd2125d46 Mon Sep 17 00:00:00 2001 From: Brett Williams Date: Sun, 4 Aug 2024 11:47:56 -0500 Subject: [PATCH] Fix issue where custom job name was being ignored --- src/api/add_job_helpers.py | 3 +-- src/engines/blender/blender_worker.py | 5 ++++- src/ui/add_job.py | 29 ++++++++++++++------------- 3 files changed, 20 insertions(+), 17 deletions(-) diff --git a/src/api/add_job_helpers.py b/src/api/add_job_helpers.py index 755564a..95d604a 100644 --- a/src/api/add_job_helpers.py +++ b/src/api/add_job_helpers.py @@ -49,12 +49,11 @@ def handle_uploaded_project_files(request, jobs_list, upload_directory): raise ValueError(f"Error downloading file from URL: {project_url}") elif local_path and os.path.exists(local_path): referred_name = os.path.basename(local_path) - else: raise ValueError("Cannot find any valid project paths") # Prepare the local filepath - cleaned_path_name = os.path.splitext(referred_name)[0].replace(' ', '_') + cleaned_path_name = jobs_list[0].get('name', os.path.splitext(referred_name)[0]).replace(' ', '-') job_dir = os.path.join(upload_directory, '-'.join( [datetime.now().strftime("%Y.%m.%d_%H.%M.%S"), renderer, cleaned_path_name])) os.makedirs(job_dir, exist_ok=True) diff --git a/src/engines/blender/blender_worker.py b/src/engines/blender/blender_worker.py index 1a5db5e..b789388 100644 --- a/src/engines/blender/blender_worker.py +++ b/src/engines/blender/blender_worker.py @@ -62,7 +62,10 @@ class BlenderRenderWorker(BaseRenderWorker): # Export format export_format = self.args.get('export_format', None) or 'JPEG' - path_without_ext = os.path.splitext(self.output_path)[0] + "_" + main_part, ext = os.path.splitext(self.output_path) + # Remove the extension only if it is not composed entirely of digits + path_without_ext = main_part if not ext[1:].isdigit() else self.output_path + path_without_ext += "_" cmd.extend(['-E', blender_engine, '-o', path_without_ext, '-F', export_format]) # set frame range diff --git a/src/ui/add_job.py b/src/ui/add_job.py index a2ba65e..c671b16 100644 --- a/src/ui/add_job.py +++ b/src/ui/add_job.py @@ -55,7 +55,7 @@ class NewRenderJobForm(QWidget): self.priority_input = None self.end_frame_input = None self.start_frame_input = None - self.output_path_input = None + self.render_name_input = None self.scene_file_input = None self.scene_file_browse_button = None self.job_name_input = None @@ -136,11 +136,11 @@ class NewRenderJobForm(QWidget): self.output_settings_group = QGroupBox("Output Settings") output_settings_layout = QVBoxLayout(self.output_settings_group) # output path - output_path_layout = QHBoxLayout() - output_path_layout.addWidget(QLabel("Render name:")) - self.output_path_input = QLineEdit() - output_path_layout.addWidget(self.output_path_input) - output_settings_layout.addLayout(output_path_layout) + render_name_layout = QHBoxLayout() + render_name_layout.addWidget(QLabel("Render name:")) + self.render_name_input = QLineEdit() + render_name_layout.addWidget(self.render_name_input) + output_settings_layout.addLayout(render_name_layout) # file format file_format_layout = QHBoxLayout() file_format_layout.addWidget(QLabel("Format:")) @@ -281,7 +281,7 @@ class NewRenderJobForm(QWidget): output_name, _ = os.path.splitext(os.path.basename(self.scene_file_input.text())) output_name = output_name.replace(' ', '_') - self.output_path_input.setText(output_name) + self.render_name_input.setText(output_name) file_name = self.scene_file_input.text() # setup bg worker @@ -292,7 +292,7 @@ class NewRenderJobForm(QWidget): def browse_output_path(self): directory = QFileDialog.getExistingDirectory(self, "Select Output Directory") if directory: - self.output_path_input.setText(directory) + self.render_name_input.setText(directory) def args_help_button_clicked(self): url = (f'http://{self.server_proxy.hostname}:{self.server_proxy.port}/api/renderer/' @@ -316,8 +316,6 @@ class NewRenderJobForm(QWidget): self.renderer_type.setCurrentIndex(0) #todo: find out why we don't have renderer info yet # not ideal but if we don't have the renderer info we have to pick something - self.output_path_input.setText(os.path.basename(input_path)) - # cleanup progress UI self.load_file_group.setHidden(True) self.toggle_renderer_enablement(True) @@ -451,14 +449,16 @@ class SubmitWorker(QThread): job_json = {'owner': psutil.Process().username() + '@' + socket.gethostname(), 'renderer': self.window.renderer_type.currentText().lower(), 'engine_version': self.window.renderer_version_combo.currentText(), - 'args': {'raw': self.window.raw_args.text()}, - 'output_path': self.window.output_path_input.text(), + 'args': {'raw': self.window.raw_args.text(), + 'export_format': self.window.file_format_combo.currentText()}, + 'output_path': self.window.render_name_input.text(), 'start_frame': self.window.start_frame_input.value(), 'end_frame': self.window.end_frame_input.value(), 'priority': self.window.priority_input.currentIndex() + 1, 'notes': self.window.notes_input.toPlainText(), 'enable_split_jobs': self.window.enable_splitjobs.isChecked(), - 'split_jobs_same_os': self.window.splitjobs_same_os.isChecked()} + 'split_jobs_same_os': self.window.splitjobs_same_os.isChecked(), + 'name': self.window.render_name_input.text()} # get the dynamic args for i in range(self.window.renderer_options_layout.count()): @@ -487,7 +487,8 @@ class SubmitWorker(QThread): for cam in selected_cameras: job_copy = copy.deepcopy(job_json) job_copy['args']['camera'] = cam - job_copy['name'] = pathlib.Path(input_path).stem.replace(' ', '_') + "-" + cam.replace(' ', '') + job_copy['name'] = job_copy['name'].replace(' ', '-') + "_" + cam.replace(' ', '') + job_copy['output_path'] = job_copy['name'] job_list.append(job_copy) else: job_list = [job_json]