Skip to content

Commit

Permalink
bugy#201 added support for default values in included parameters
Browse files Browse the repository at this point in the history
  • Loading branch information
bugy committed Apr 19, 2019
1 parent 173cde3 commit dee6234
Show file tree
Hide file tree
Showing 4 changed files with 64 additions and 34 deletions.
Empty file added src/features/__init__.py
Empty file.
3 changes: 3 additions & 0 deletions src/model/script_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -182,6 +182,9 @@ def _reload_parameters(self, old_included_config):
self.parameter_values,
self.working_directory)
self.parameters.append(parameter)

if parameter.name not in self.parameter_values:
self.parameter_values[parameter.name] = parameter.default
continue
else:
LOGGER.warning('Parameter ' + parameter_name + ' exists in original and included file. '
Expand Down
86 changes: 52 additions & 34 deletions src/tests/script_config_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -352,28 +352,18 @@ def test_static_include_ignore_same_parameter(self):
self.assertEqual(True, param1.required)

def test_dynamic_include_add_parameter(self):
included_path = test_utils.write_script_config({'parameters': [
(config_model, included_path) = self.prepare_config_model_with_included([
create_script_param_config('included_param')
]}, 'included')
config_model = _create_config_model('main_conf', config={
'include': '${p1}',
'parameters': [create_script_param_config('p1')]})
config_model.set_param_value('p1', included_path)
], 'p1')

self.assertEqual(2, len(config_model.parameters))
included_param = config_model.parameters[1]
self.assertEqual('included_param', included_param.name)

def test_dynamic_include_remove_parameter(self):
included_path = test_utils.write_script_config({'parameters': [
(config_model, included_path) = self.prepare_config_model_with_included([
create_script_param_config('included_param')
]}, 'included')
config_model = _create_config_model(
'main_conf',
config={
'include': '${p1}',
'parameters': [create_script_param_config('p1')]},
parameter_values={'p1': included_path})
], 'p1')

config_model.set_param_value('p1', '')

Expand All @@ -382,17 +372,11 @@ def test_dynamic_include_remove_parameter(self):
self.assertEqual('p1', included_param.name)

def test_dynamic_include_remove_multiple_parameters(self):
included_path = test_utils.write_script_config({'parameters': [
(config_model, included_path) = self.prepare_config_model_with_included([
create_script_param_config('included_param1'),
create_script_param_config('included_param2'),
create_script_param_config('included_param3')
]}, 'included')
config_model = _create_config_model(
'main_conf',
config={
'include': '${p1}',
'parameters': [create_script_param_config('p1')]},
parameter_values={'p1': included_path})
], 'p1')

config_model.set_param_value('p1', '')

Expand Down Expand Up @@ -427,33 +411,25 @@ def test_dynamic_include_relative_path(self):
self.assertEqual(2, len(config_model.parameters))

def test_dynamic_include_replace(self):
included_path1 = test_utils.write_script_config({'parameters': [
(config_model, included_path1) = self.prepare_config_model_with_included([
create_script_param_config('included_param_X')
]}, 'included1')
], 'p1')

included_path2 = test_utils.write_script_config({'parameters': [
create_script_param_config('included_param_Y')
]}, 'included2')

config_model = _create_config_model('main_conf', config={
'include': '${p1}',
'parameters': [create_script_param_config('p1')]})
config_model.set_param_value('p1', included_path1)
config_model.set_param_value('p1', included_path2)

self.assertEqual(2, len(config_model.parameters))
self.assertEqual('p1', config_model.parameters[0].name)
self.assertEqual('included_param_Y', config_model.parameters[1].name)

def test_dynamic_include_replace_with_missing_file(self):
included_path1 = test_utils.write_script_config({'parameters': [
(config_model, included_path) = self.prepare_config_model_with_included([
create_script_param_config('included_param_X')
]}, 'included1')
], 'p1')

config_model = _create_config_model('main_conf', config={
'include': '${p1}',
'parameters': [create_script_param_config('p1')]})
config_model.set_param_value('p1', included_path1)
config_model.set_param_value('p1', 'a/b/c/some.txt')

self.assertEqual(1, len(config_model.parameters))
Expand All @@ -475,6 +451,48 @@ def test_set_all_values_for_included(self):

self.assertEqual(values, config_model.parameter_values)

def test_dynamic_include_add_parameter_with_default(self):
(config_model, included_path) = self.prepare_config_model_with_included([
create_script_param_config('included_param', default='abc 123')
], 'p1')

self.assertEqual('abc 123', config_model.parameter_values.get('included_param'))

def test_dynamic_include_add_parameter_with_default_when_value_exist(self):
(config_model, included_path) = self.prepare_config_model_with_included([
create_script_param_config('included_param', default='abc 123')
], 'p1')
config_model.set_param_value('p1', included_path)
config_model.set_param_value('included_param', 'def 456')

config_model.set_param_value('p1', 'random value')
self.assertEqual('def 456', config_model.parameter_values.get('included_param'))

config_model.set_param_value('p1', included_path)
self.assertEqual('def 456', config_model.parameter_values.get('included_param'))

def test_dynamic_include_add_2_parameters_with_default_when_one_dependant(self):
(config_model, included_path) = self.prepare_config_model_with_included([
create_script_param_config('included_param1', default='ABC'),
create_script_param_config('included_param2', default='xABCx', type='list',
values_script='echo x${included_param1}x'),
], 'p1')

self.assertEqual('ABC', config_model.parameter_values.get('included_param1'))
self.assertEqual('xABCx', config_model.parameter_values.get('included_param2'))

dependant_parameter = config_model.find_parameter('included_param2')
self.assertEqual(['xABCx'], dependant_parameter.values)

def prepare_config_model_with_included(self, included_params, static_param_name):
included_path = test_utils.write_script_config({'parameters': included_params}, 'included')
config_model = _create_config_model('main_conf', config={
'include': '${' + static_param_name + '}',
'parameters': [create_script_param_config(static_param_name)]})
config_model.set_param_value(static_param_name, included_path)

return (config_model, included_path)

def setUp(self):
test_utils.setup()

Expand Down
9 changes: 9 additions & 0 deletions web-src/js/script/script-controller.js
Original file line number Diff line number Diff line change
Expand Up @@ -383,6 +383,15 @@ ScriptController.prototype._initStore = function () {
[ADD_PARAMETER](state, parameter) {
_preprocessParameter(parameter, this);
state.parameters.push(parameter);

let parameterName = parameter.name;
if (!state.parameterValues.hasOwnProperty(parameterName)) {
if (!isNull(parameter.default)) {
state.parameterValues[parameterName] = parameter.default;
} else {
state.parameterValues[parameterName] = null;
}
}
},

[UPDATE_PARAMETER](state, parameter) {
Expand Down

0 comments on commit dee6234

Please sign in to comment.