From 395380fc66c76dbbc49ef8f99792c17c23e5e3ba Mon Sep 17 00:00:00 2001 From: John Chilton Date: Mon, 17 Dec 2018 11:59:29 -0500 Subject: [PATCH] Fix: Handle galaxy.json entries without dataset_id in galaxy.json. --- lib/galaxy/tools/provided_metadata.py | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/lib/galaxy/tools/provided_metadata.py b/lib/galaxy/tools/provided_metadata.py index 5722989813e..d4c9e937009 100644 --- a/lib/galaxy/tools/provided_metadata.py +++ b/lib/galaxy/tools/provided_metadata.py @@ -1,6 +1,7 @@ import json import logging import os +import re from galaxy.util import stringify_dictionary_keys @@ -114,12 +115,19 @@ class LegacyToolProvidedMetadata(object): # This isn't insecure. We loop the job's output datasets in # the finish method, so if a tool writes out metadata for a # dataset id that it doesn't own, it'll just be ignored. - if job_wrapper and line['type'] == 'dataset' and 'dataset_id' not in line: - try: - line['dataset_id'] = job_wrapper.get_output_file_id(line['dataset']) - except KeyError: - log.warning('(%s) Tool provided job dataset-specific metadata without specifying a dataset' % job_wrapper.job_id) - continue + dataset_id_not_specified = line['type'] == 'dataset' and 'dataset_id' not in line + if dataset_id_not_specified: + dataset_basename = line['dataset'] + if job_wrapper: + try: + line['dataset_id'] = job_wrapper.get_output_file_id(dataset_basename) + except KeyError: + log.warning('(%s) Tool provided job dataset-specific metadata without specifying a dataset' % job_wrapper.job_id) + continue + else: + match = re.match(r'dataset_(\d+)\.dat', dataset_basename) + line['dataset_id'] = int(match.group(1)) + self.tool_provided_job_metadata.append(line) def get_dataset_meta(self, output_name, dataset_id):