Merge pull request #7071 from mvdbeek/fix_process_key

[18.09] Fix process key
This commit is contained in:
Martin Cech
2018-12-04 10:26:49 -05:00
committed by GitHub
2 changed files with 36 additions and 8 deletions
+12 -8
View File
@@ -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()
+24
View File
@@ -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):