From 8d896b17210f8b0aa9baed6446d180c0dbf39a81 Mon Sep 17 00:00:00 2001 From: mvdbeek <m.vandenbeek@gmail.com> Date: Mon, 20 May 2024 16:51:30 +0200 Subject: [PATCH 1/4] Don't fail metadata if we only have an extra output files dir --- lib/galaxy/metadata/set_metadata.py | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/lib/galaxy/metadata/set_metadata.py b/lib/galaxy/metadata/set_metadata.py index f1c8906c39fd..58b8a2f5a15f 100644 --- a/lib/galaxy/metadata/set_metadata.py +++ b/lib/galaxy/metadata/set_metadata.py @@ -409,15 +409,22 @@ def set_meta(new_dataset_instance, file_dict): external_filename = unnamed_id_to_path.get(dataset_instance_id, dataset_filename_override) if not os.path.exists(external_filename): matches = glob.glob(external_filename) - assert len(matches) == 1, f"{len(matches)} file(s) matched by output glob '{external_filename}'" - external_filename = matches[0] - assert safe_contains( - tool_job_working_directory, external_filename - ), f"Cannot collect output '{external_filename}' from outside of working directory" - created_from_basename = os.path.relpath( - external_filename, os.path.join(tool_job_working_directory, "working") - ) - dataset.dataset.created_from_basename = created_from_basename + if matches: + assert len(matches) == 1, f"{len(matches)} file(s) matched by output glob '{external_filename}'" + external_filename = matches[0] + assert safe_contains( + tool_job_working_directory, external_filename + ), f"Cannot collect output '{external_filename}' from outside of working directory" + created_from_basename = os.path.relpath( + external_filename, os.path.join(tool_job_working_directory, "working") + ) + dataset.dataset.created_from_basename = created_from_basename + elif os.path.exists(dataset_path_to_extra_path(external_filename)): + # Only output extra files dir, but no primary output file, that's fine + pass + else: + raise Exception(f"Output file '{external_filename}' not found") + # override filename if we're dealing with outputs to working directory and dataset is not linked to link_data_only = metadata_params.get("link_data_only") if not link_data_only: From fa5e852c67a23e946544980994c4db9925d5b126 Mon Sep 17 00:00:00 2001 From: mvdbeek <m.vandenbeek@gmail.com> Date: Mon, 20 May 2024 16:55:36 +0200 Subject: [PATCH 2/4] Revert "Always create output" This reverts commit 90d04a017e3dacd7c5638f8d2c17ad6d10c63995. --- test/functional/tools/composite_output.xml | 1 - test/functional/tools/composite_output_tests.xml | 1 - 2 files changed, 2 deletions(-) diff --git a/test/functional/tools/composite_output.xml b/test/functional/tools/composite_output.xml index e634ea49315e..9e5f574809d5 100644 --- a/test/functional/tools/composite_output.xml +++ b/test/functional/tools/composite_output.xml @@ -1,6 +1,5 @@ <tool id="composite_output" name="composite_output" version="1.0.0"> <command><![CDATA[ -touch '$output' && mkdir '$output.extra_files_path' && cp '$input.extra_files_path'/* '$output.extra_files_path' && cp '$input.extra_files_path'/Log '$output.extra_files_path'/second_log && diff --git a/test/functional/tools/composite_output_tests.xml b/test/functional/tools/composite_output_tests.xml index 1ea58bb18828..39a702c8417a 100644 --- a/test/functional/tools/composite_output_tests.xml +++ b/test/functional/tools/composite_output_tests.xml @@ -3,7 +3,6 @@ <command> mkdir '$output.files_path'; mkdir '$output.files_path/output'; - touch '$output'; cp '$input.extra_files_path'/* '$output.files_path'; echo "1 2 3" > '$output.files_path/md5out'; echo "1" > '$output.extra_files_path/output/1'; From 2f83ef358603747798e11e174c379cc793fdb622 Mon Sep 17 00:00:00 2001 From: mvdbeek <m.vandenbeek@gmail.com> Date: Tue, 21 May 2024 14:14:23 +0200 Subject: [PATCH 3/4] Create empty file if datatype is auto_primary_file --- lib/galaxy/metadata/set_metadata.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/galaxy/metadata/set_metadata.py b/lib/galaxy/metadata/set_metadata.py index 58b8a2f5a15f..221346b8b438 100644 --- a/lib/galaxy/metadata/set_metadata.py +++ b/lib/galaxy/metadata/set_metadata.py @@ -421,6 +421,9 @@ def set_meta(new_dataset_instance, file_dict): dataset.dataset.created_from_basename = created_from_basename elif os.path.exists(dataset_path_to_extra_path(external_filename)): # Only output extra files dir, but no primary output file, that's fine + if dataset.datatype.composite_type == "auto_primary_file": + with open(external_filename, "wb"): + pass pass else: raise Exception(f"Output file '{external_filename}' not found") From e80204e951a8a27b39b09ffb6c2a0119ed726f44 Mon Sep 17 00:00:00 2001 From: mvdbeek <m.vandenbeek@gmail.com> Date: Tue, 21 May 2024 14:17:57 +0200 Subject: [PATCH 4/4] Create empty primary file if we only have extra files dir --- lib/galaxy/metadata/set_metadata.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/lib/galaxy/metadata/set_metadata.py b/lib/galaxy/metadata/set_metadata.py index 221346b8b438..237b106d3c7f 100644 --- a/lib/galaxy/metadata/set_metadata.py +++ b/lib/galaxy/metadata/set_metadata.py @@ -420,11 +420,12 @@ def set_meta(new_dataset_instance, file_dict): ) dataset.dataset.created_from_basename = created_from_basename elif os.path.exists(dataset_path_to_extra_path(external_filename)): - # Only output extra files dir, but no primary output file, that's fine - if dataset.datatype.composite_type == "auto_primary_file": - with open(external_filename, "wb"): - pass - pass + # Only output is extra files dir, but no primary output file, that's fine, + # but make sure we create an empty primary output file. It's a little + # weird to do this, but it does indicate that there's nothing wrong with the file, + # as opposed to perhaps a storage issue. + with open(external_filename, "wb"): + pass else: raise Exception(f"Output file '{external_filename}' not found")