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'
-
+