diff --git a/lib/galaxy/jobs/__init__.py b/lib/galaxy/jobs/__init__.py index d0911bbc056c..c2c062d2ae9c 100644 --- a/lib/galaxy/jobs/__init__.py +++ b/lib/galaxy/jobs/__init__.py @@ -1752,9 +1752,14 @@ def setup_external_metadata(self, exec_dir=None, tmp_dir=None, if datatypes_config is None: datatypes_config = os.path.join(self.working_directory, 'registry.xml') self.app.datatypes_registry.to_xml_file(path=datatypes_config) - command = self.external_output_metadata.setup_external_metadata([output_dataset_assoc.dataset for - output_dataset_assoc in - job.output_datasets + job.output_library_datasets], + + output_datasets = {} + for output_dataset_assoc in job.output_datasets + job.output_library_datasets: + output_name = output_dataset_assoc.name + assert output_name not in output_datasets + output_datasets[output_dataset_assoc.name] = output_dataset_assoc.dataset + + command = self.external_output_metadata.setup_external_metadata(output_datasets, self.sa_session, exec_dir=exec_dir, tmp_dir=tmp_dir, diff --git a/lib/galaxy/metadata/__init__.py b/lib/galaxy/metadata/__init__.py index ebfca7994782..2c4fcfcda181 100644 --- a/lib/galaxy/metadata/__init__.py +++ b/lib/galaxy/metadata/__init__.py @@ -38,7 +38,7 @@ def cleanup_external_metadata(self, sa_session): pass @abc.abstractmethod - def setup_external_metadata(self, datasets, sa_session, exec_dir=None, + def setup_external_metadata(self, datasets_dict, sa_session, exec_dir=None, tmp_dir=None, dataset_files_path=None, output_fnames=None, config_root=None, config_file=None, datatypes_config=None, @@ -104,7 +104,7 @@ def invalidate_external_metadata(self, datasets, sa_session): sa_session.flush() jeom = self._get_output_filenames_by_dataset(dataset, sa_session) - def setup_external_metadata(self, datasets, sa_session, exec_dir=None, + def setup_external_metadata(self, datasets_dict, sa_session, exec_dir=None, tmp_dir=None, dataset_files_path=None, output_fnames=None, config_root=None, config_file=None, datatypes_config=None, @@ -143,8 +143,8 @@ def __get_filename_override(): metadata_path_on_compute(metadata_files.filename_override_metadata), ) return line - if not isinstance(datasets, list): - datasets = [datasets] + + datasets = list(datasets_dict.values()) if exec_dir is None: exec_dir = os.path.abspath(os.getcwd()) if dataset_files_path is None: diff --git a/lib/galaxy/tools/actions/metadata.py b/lib/galaxy/tools/actions/metadata.py index 9038a7f2fb6d..2b0afc46dec1 100644 --- a/lib/galaxy/tools/actions/metadata.py +++ b/lib/galaxy/tools/actions/metadata.py @@ -75,7 +75,10 @@ def execute_via_app(self, tool, app, session_id, history_id, user=None, datatypes_config = os.path.join(job_working_dir, 'registry.xml') app.datatypes_registry.to_xml_file(path=datatypes_config) external_metadata_wrapper = get_metadata_compute_strategy(app, job.id) - cmd_line = external_metadata_wrapper.setup_external_metadata(dataset, + output_datatasets_dict = { + dataset_name: dataset, + } + cmd_line = external_metadata_wrapper.setup_external_metadata(output_datatasets_dict, sa_session, exec_dir=None, tmp_dir=job_working_dir,