diff --git a/lib/galaxy/tools/parameters/meta.py b/lib/galaxy/tools/parameters/meta.py index d5fb5f53590..7440b1bf64c 100644 --- a/lib/galaxy/tools/parameters/meta.py +++ b/lib/galaxy/tools/parameters/meta.py @@ -72,26 +72,30 @@ def expand_workflow_inputs(inputs): return params, params_keys -def process_key(incoming_key, d): +def process_key(incoming_key, incoming_value, d): key_parts = incoming_key.split('|') if len(key_parts) == 1: # Regular parameter - d[incoming_key] = object() + d[incoming_key] = incoming_value elif key_parts[0].rsplit('_', 1)[-1].isdigit(): # Repeat input_name_index = key_parts[0].rsplit('_', 1) input_name, index = input_name_index + index = int(index) if input_name not in d: d[input_name] = [] - subdict = {} - d[input_name].append(subdict) - process_key("|".join(key_parts[1:]), d=subdict) + if len(d[input_name]) > index: + subdict = d[input_name][index] + else: + subdict = {} + d[input_name].append(subdict) + process_key("|".join(key_parts[1:]), incoming_value=incoming_value, d=subdict) else: # Section / Conditional input_name = key_parts[0] subdict = {} d[input_name] = subdict - process_key("|".join(key_parts[1:]), d=subdict) + process_key("|".join(key_parts[1:]), incoming_value=incoming_value, d=subdict) def expand_meta_parameters(trans, tool, incoming): @@ -113,9 +117,9 @@ def expand_meta_parameters(trans, tool, incoming): # according to tool.inputs (which is ordered). incoming_copy = incoming.copy() nested_dict = {} - for incoming_key in incoming_copy: + for incoming_key, incoming_value in incoming_copy.items(): if not incoming_key.startswith('__'): - process_key(incoming_key, d=nested_dict) + process_key(incoming_key, incoming_value=incoming_value, d=nested_dict) reordered_incoming = OrderedDict() diff --git a/test/unit/tools/test_parameter_parsing.py b/test/unit/tools/test_parameter_parsing.py index 79b3ac35afd..047222a26be 100644 --- a/test/unit/tools/test_parameter_parsing.py +++ b/test/unit/tools/test_parameter_parsing.py @@ -3,10 +3,34 @@ from xml.etree.ElementTree import XML from galaxy import model from galaxy.tools.parameters import basic +from galaxy.tools.parameters.meta import process_key from galaxy.util import bunch from ..tools_support import UsesApp +def test_process_key(): + nested_dict = {} + d = { + 'repeat_0|inner_repeat_0|data_table_column_value': u'bla', + 'repeat_1|inner_repeat_1|data_table_column_value': u'bla2', + } + for key, value in d.items(): + process_key(key, value, nested_dict) + assert len(nested_dict) == 1 + + +def test_process_key_2(): + nested_dict = {} + d = { + 'data_tables_0|columns_0|data_table_column_value': 'Amel_HAv3.1', + 'data_tables': [], + 'directory_content': [], + } + for key, value in d.items(): + process_key(key, value, nested_dict) + assert len(nested_dict) == 2 + + class BaseParameterTestCase(TestCase, UsesApp): def setUp(self):