From b92074e6ff87a19133b4d973577779c4ee6286d7 Mon Sep 17 00:00:00 2001 From: John Chilton Date: Tue, 2 Feb 2016 11:29:37 +0000 Subject: [PATCH] Implement profile="XX.XX" on tools, better defaults for newer tools. - set -e in tool command scripts. - Disable implicit extra file collection. All dynamic extra file collection requires a 16.04) or 'legacy'. + """ + def parse_tests_to_dict(self): return {'tests': []} diff --git a/lib/galaxy/tools/parser/output_collection_def.py b/lib/galaxy/tools/parser/output_collection_def.py index 4811fe8bce93..1790c89a41e6 100644 --- a/lib/galaxy/tools/parser/output_collection_def.py +++ b/lib/galaxy/tools/parser/output_collection_def.py @@ -23,9 +23,9 @@ LEGACY_DEFAULT_DBKEY = None # don't use __input__ for legacy default collection -def dataset_collector_descriptions_from_elem( elem ): +def dataset_collector_descriptions_from_elem( elem, legacy=True ): primary_dataset_elems = elem.findall( "discover_datasets" ) - if not primary_dataset_elems: + if len(primary_dataset_elems) == 0 and legacy: return [ DEFAULT_DATASET_COLLECTOR_DESCRIPTION ] else: return map( lambda elem: DatasetCollectionDescription( **elem.attrib ), primary_dataset_elems ) diff --git a/lib/galaxy/tools/parser/xml.py b/lib/galaxy/tools/parser/xml.py index 37be5fa1e30c..dd98a4c39518 100644 --- a/lib/galaxy/tools/parser/xml.py +++ b/lib/galaxy/tools/parser/xml.py @@ -112,7 +112,12 @@ def parse_environment_variables(self): def parse_interpreter(self): command_el = self._command_el - return (command_el is not None) and command_el.get("interpreter", None) + interpreter = (command_el is not None) and command_el.get("interpreter", None) + if not self.legacy_defaults: + log.warn("Deprecated interpeter attribute on command element is now ignored.") + interpreter = None + + return interpreter def parse_version_command(self): version_cmd = self.root.find("version_command") @@ -195,7 +200,7 @@ def _parse(data_elem, **kwds): dataset_collector_descriptions = None if collection_elem.find( "discover_datasets" ) is not None: - dataset_collector_descriptions = dataset_collector_descriptions_from_elem( collection_elem ) + dataset_collector_descriptions = dataset_collector_descriptions_from_elem( collection_elem, legacy=False ) structure = ToolOutputCollectionStructure( collection_type=collection_type, collection_type_source=collection_type_source, @@ -262,7 +267,7 @@ def _parse_output( output.from_work_dir = data_elem.get("from_work_dir", None) output.hidden = string_as_bool( data_elem.get("hidden", "") ) output.actions = ToolOutputActionGroup( output, data_elem.find( 'actions' ) ) - output.dataset_collector_descriptions = dataset_collector_descriptions_from_elem( data_elem ) + output.dataset_collector_descriptions = dataset_collector_descriptions_from_elem( data_elem, legacy=self.legacy_defaults ) return output def parse_stdio(self): @@ -277,6 +282,8 @@ def parse_stdio(self): return aggressive_error_checks() else: raise ValueError("Unknown detect_errors value encountered [%s]" % detect_errors) + elif len(self.root.findall('stdio')) == 0 and not self.legacy_defaults: + return error_on_exit_code() else: parser = StdioParser(self.root) return parser.stdio_exit_codes, parser.stdio_regexes @@ -285,8 +292,10 @@ def parse_strict_shell(self): command_el = self._command_el if command_el is not None: return string_as_bool(command_el.get("strict", "False")) - else: + elif self.legacy_defaults: return False + else: + return True def parse_help(self): help_elem = self.root.find( 'help' ) @@ -307,6 +316,20 @@ def parse_tests_to_dict(self): return rval + @property + def legacy_defaults(self): + # Pre-16.04 or default XML defaults + # - Use standard error for error detection. + # - Don't run shells with -e + # - Auto-check for implicit multiple outputs. + # - Auto-check for $param_file. + # - Enable buggy interpreter attribute. + return self.parse_profile() == "legacy" + + def parse_profile(self): + profile = self.root.get("profile", "legacy") + return profile + def _test_elem_to_dict(test_elem, i): rval = dict( diff --git a/lib/galaxy/tools/parser/yaml.py b/lib/galaxy/tools/parser/yaml.py index a9fd1b94c698..e8990ef8dc20 100644 --- a/lib/galaxy/tools/parser/yaml.py +++ b/lib/galaxy/tools/parser/yaml.py @@ -168,6 +168,11 @@ def parse_tests_to_dict(self): return rval + def parse_profile(self): + """ + """ + return self.root_dict.get("profile", "16.04") + def _parse_test(i, test_dict): inputs = test_dict["inputs"] diff --git a/test/unit/tools/test_evaluation.py b/test/unit/tools/test_evaluation.py index 63ff8d542f2b..66721a5ca044 100644 --- a/test/unit/tools/test_evaluation.py +++ b/test/unit/tools/test_evaluation.py @@ -256,6 +256,7 @@ def tool_directory( self ): class MockTool( object ): def __init__( self, app ): + self.legacy_defaults = True self.app = app self.hooks_called = [] self.environment_variables = []