diff --git a/client/src/components/Upload/UploadContainer.vue b/client/src/components/Upload/UploadContainer.vue index 329e9b92315f..7b918c349545 100644 --- a/client/src/components/Upload/UploadContainer.vue +++ b/client/src/components/Upload/UploadContainer.vue @@ -74,6 +74,7 @@ const props = defineProps({ }, }); +const collectionTabActive = ref(null); const extensionsSet = ref(false); const datatypesMapper = ref(null); const datatypesMapperReady = ref(false); @@ -81,6 +82,7 @@ const dbKeysSet = ref(false); const listExtensions = ref([]); const listDbKeys = ref([]); const regular = ref(null); +const regularTabActive = ref(null); const { percentage, status } = storeToRefs(useUploadStore()); @@ -112,12 +114,15 @@ const ready = computed( ); const canUploadToHistory = computed(() => currentHistory.value && canMutateHistory(currentHistory.value)); const showCollection = computed(() => !props.formats && props.multiple); -const showComposite = computed(() => !props.formats || hasCompositeExtension); -const showRegular = computed(() => !props.formats || hasRegularExtension); +const showComposite = computed(() => !props.formats || hasCompositeExtension.value); +const showRegular = computed(() => !props.formats || hasRegularExtension.value); const showRules = computed(() => !props.formats || props.multiple); function immediateUpload(files) { - regular.value?.addFiles(files, true); + if (showRegular.value) { + regularTabActive.value = true; + regular.value?.addFiles(files, true); + } } function toData(items, history_id, composite = false) { @@ -172,21 +177,7 @@ defineExpose({ - - + - - + +
diff --git a/client/src/utils/navigation/navigation.yml b/client/src/utils/navigation/navigation.yml index ebe847ba7639..dc4fcaeaa0cb 100644 --- a/client/src/utils/navigation/navigation.yml +++ b/client/src/utils/navigation/navigation.yml @@ -1139,7 +1139,7 @@ upload: setting_space_to_tab: '.upload-space-to-tab' source_button: '#upload-row-${n} .upload-source' start: '#activity-upload' - start_button: '#btn-start' + start_button: '#regular #btn-start' local_button: '#btn-local' new_user_welcome: diff --git a/config/plugins/tours/core.history.yaml b/config/plugins/tours/core.history.yaml index d0c1ecce2f54..5f8401e0c2a0 100644 --- a/config/plugins/tours/core.history.yaml +++ b/config/plugins/tours/core.history.yaml @@ -28,11 +28,11 @@ steps: https://raw.githubusercontent.com/bgruening/galaxytools/adf077b912ddebd97b07b947b855cdd2862ed8ef/tools/statistics/test-data/anderson.tabular - title: "Start the upload" - element: "#btn-start" + element: "#regular #btn-start" intro: "Upload the data into your Galaxy History." postclick: - - "#btn-start" - - "#btn-close" + - "#regular #btn-start" + - "#regular #btn-close" - title: "History" element: "#current-history-panel" diff --git a/lib/galaxy/datatypes/registry.py b/lib/galaxy/datatypes/registry.py index ce883da59009..0789b0dd9ee5 100644 --- a/lib/galaxy/datatypes/registry.py +++ b/lib/galaxy/datatypes/registry.py @@ -891,7 +891,16 @@ def find_conversion_destination_for_dataset_by_extensions( if datatype and datatype.matches_any(accepted_datatypes): return True, None, None - for convert_ext in self.get_converters_by_datatype(ext): + converter_extensions = self.get_converters_by_datatype(ext) + uncompressed_instance = getattr(datatype, "uncompressed_datatype_instance", None) + if uncompressed_instance and uncompressed_instance.file_ext in converter_extensions: + # sort uncompressed instance ahead of other possible conversions + converter_extensions = [ + uncompressed_instance.file_ext, + *(ext for ext in converter_extensions if ext != uncompressed_instance.file_ext), + ] + + for convert_ext in converter_extensions: convert_ext_datatype = self.get_datatype_by_extension(convert_ext) if convert_ext_datatype is None: self.log.warning( diff --git a/lib/galaxy/jobs/handler.py b/lib/galaxy/jobs/handler.py index 3cae6bf35750..7ec78bef89c2 100644 --- a/lib/galaxy/jobs/handler.py +++ b/lib/galaxy/jobs/handler.py @@ -1269,7 +1269,8 @@ def stop(self, job, job_wrapper): runner_name = job_runner_name.split(":", 1)[0] log.debug(f"Stopping job {job_wrapper.get_id_tag()} in {runner_name} runner") try: - self.job_runners[runner_name].stop_job(job_wrapper) + if job.state != model.Job.states.NEW: + self.job_runners[runner_name].stop_job(job_wrapper) except KeyError: log.error(f"stop(): ({job_wrapper.get_id_tag()}) Invalid job runner: {runner_name}") # Job and output dataset states have already been updated, so nothing is done here. diff --git a/lib/galaxy/jobs/runners/__init__.py b/lib/galaxy/jobs/runners/__init__.py index fd2a13804345..07a3faccd263 100644 --- a/lib/galaxy/jobs/runners/__init__.py +++ b/lib/galaxy/jobs/runners/__init__.py @@ -589,7 +589,8 @@ def _handle_runner_state(self, runner_state, job_state: "JobState"): log.exception("Caught exception in runner state handler") def fail_job(self, job_state: "JobState", exception=False, message="Job failed", full_status=None): - if getattr(job_state, "stop_job", True): + job = job_state.job_wrapper.get_job() + if getattr(job_state, "stop_job", True) and job.state != model.Job.states.NEW: self.stop_job(job_state.job_wrapper) job_state.job_wrapper.reclaim_ownership() self._handle_runner_state("failure", job_state) diff --git a/lib/galaxy/jobs/runners/aws.py b/lib/galaxy/jobs/runners/aws.py index 6003fb01d5e1..72b078207591 100644 --- a/lib/galaxy/jobs/runners/aws.py +++ b/lib/galaxy/jobs/runners/aws.py @@ -420,7 +420,8 @@ def recover(self, job, job_wrapper): self.monitor_queue.put(ajs) def fail_job(self, job_state: JobState, exception=False, message="Job failed", full_status=None): - if getattr(job_state, "stop_job", True): + job = job_state.job_wrapper.get_job() + if getattr(job_state, "stop_job", True) and job.state != model.Job.states.NEW: self.stop_job(job_state.job_wrapper) job_state.job_wrapper.reclaim_ownership() self._handle_runner_state("failure", job_state) diff --git a/lib/galaxy/selenium/navigates_galaxy.py b/lib/galaxy/selenium/navigates_galaxy.py index 3928e60b1483..7a1c2aab576c 100644 --- a/lib/galaxy/selenium/navigates_galaxy.py +++ b/lib/galaxy/selenium/navigates_galaxy.py @@ -876,7 +876,7 @@ def _perform_upload( self.upload_start() - self.wait_for_and_click_selector("button#btn-close") + self.components.upload.close_button.wait_for_and_click() def perform_upload_of_composite_dataset_pasted_data(self, ext, paste_content): self.home() diff --git a/lib/galaxy_test/selenium/test_uploads.py b/lib/galaxy_test/selenium/test_uploads.py index 6ce9607ea02e..aa8065af60de 100644 --- a/lib/galaxy_test/selenium/test_uploads.py +++ b/lib/galaxy_test/selenium/test_uploads.py @@ -182,7 +182,7 @@ def test_upload_modal_retains_content(self): self.upload_start_click() self.upload_queue_local_file(self.get_filename("1.sam")) self.upload_paste_data("some pasted data") - self.wait_for_and_click_selector("button#btn-close") + self.components.upload.close_button.wait_for_and_click() # reopen modal and check that the files are still there self.upload_start_click() @@ -191,12 +191,12 @@ def test_upload_modal_retains_content(self): # perform upload and close modal self.upload_start() - self.wait_for_and_click_selector("button#btn-close") + self.components.upload.close_button.wait_for_and_click() # add another pasted file, but don't upload it self.upload_start_click() self.upload_paste_data("some more pasted data") - self.wait_for_and_click_selector("button#btn-close") + self.components.upload.close_button.wait_for_and_click() # reopen modal and see 2 uploaded, 1 yet to upload self.upload_start_click() diff --git a/test/functional/tools/implicit_conversion_format_input.xml b/test/functional/tools/implicit_conversion_format_input.xml index e93f54095592..090aa474f0fc 100644 --- a/test/functional/tools/implicit_conversion_format_input.xml +++ b/test/functional/tools/implicit_conversion_format_input.xml @@ -3,7 +3,7 @@ cut -f 1 '$input1' > '$output1' - +