Skip to content

Commit dee6234

Browse files
committed
#201 added support for default values in included parameters
1 parent 173cde3 commit dee6234

4 files changed

Lines changed: 64 additions & 34 deletions

File tree

src/features/__init__.py

Whitespace-only changes.

src/model/script_config.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,9 @@ def _reload_parameters(self, old_included_config):
182182
self.parameter_values,
183183
self.working_directory)
184184
self.parameters.append(parameter)
185+
186+
if parameter.name not in self.parameter_values:
187+
self.parameter_values[parameter.name] = parameter.default
185188
continue
186189
else:
187190
LOGGER.warning('Parameter ' + parameter_name + ' exists in original and included file. '

src/tests/script_config_test.py

Lines changed: 52 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -352,28 +352,18 @@ def test_static_include_ignore_same_parameter(self):
352352
self.assertEqual(True, param1.required)
353353

354354
def test_dynamic_include_add_parameter(self):
355-
included_path = test_utils.write_script_config({'parameters': [
355+
(config_model, included_path) = self.prepare_config_model_with_included([
356356
create_script_param_config('included_param')
357-
]}, 'included')
358-
config_model = _create_config_model('main_conf', config={
359-
'include': '${p1}',
360-
'parameters': [create_script_param_config('p1')]})
361-
config_model.set_param_value('p1', included_path)
357+
], 'p1')
362358

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

367363
def test_dynamic_include_remove_parameter(self):
368-
included_path = test_utils.write_script_config({'parameters': [
364+
(config_model, included_path) = self.prepare_config_model_with_included([
369365
create_script_param_config('included_param')
370-
]}, 'included')
371-
config_model = _create_config_model(
372-
'main_conf',
373-
config={
374-
'include': '${p1}',
375-
'parameters': [create_script_param_config('p1')]},
376-
parameter_values={'p1': included_path})
366+
], 'p1')
377367

378368
config_model.set_param_value('p1', '')
379369

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

384374
def test_dynamic_include_remove_multiple_parameters(self):
385-
included_path = test_utils.write_script_config({'parameters': [
375+
(config_model, included_path) = self.prepare_config_model_with_included([
386376
create_script_param_config('included_param1'),
387377
create_script_param_config('included_param2'),
388378
create_script_param_config('included_param3')
389-
]}, 'included')
390-
config_model = _create_config_model(
391-
'main_conf',
392-
config={
393-
'include': '${p1}',
394-
'parameters': [create_script_param_config('p1')]},
395-
parameter_values={'p1': included_path})
379+
], 'p1')
396380

397381
config_model.set_param_value('p1', '')
398382

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

429413
def test_dynamic_include_replace(self):
430-
included_path1 = test_utils.write_script_config({'parameters': [
414+
(config_model, included_path1) = self.prepare_config_model_with_included([
431415
create_script_param_config('included_param_X')
432-
]}, 'included1')
416+
], 'p1')
433417

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

438-
config_model = _create_config_model('main_conf', config={
439-
'include': '${p1}',
440-
'parameters': [create_script_param_config('p1')]})
441-
config_model.set_param_value('p1', included_path1)
442422
config_model.set_param_value('p1', included_path2)
443423

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

448428
def test_dynamic_include_replace_with_missing_file(self):
449-
included_path1 = test_utils.write_script_config({'parameters': [
429+
(config_model, included_path) = self.prepare_config_model_with_included([
450430
create_script_param_config('included_param_X')
451-
]}, 'included1')
431+
], 'p1')
452432

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

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

476452
self.assertEqual(values, config_model.parameter_values)
477453

454+
def test_dynamic_include_add_parameter_with_default(self):
455+
(config_model, included_path) = self.prepare_config_model_with_included([
456+
create_script_param_config('included_param', default='abc 123')
457+
], 'p1')
458+
459+
self.assertEqual('abc 123', config_model.parameter_values.get('included_param'))
460+
461+
def test_dynamic_include_add_parameter_with_default_when_value_exist(self):
462+
(config_model, included_path) = self.prepare_config_model_with_included([
463+
create_script_param_config('included_param', default='abc 123')
464+
], 'p1')
465+
config_model.set_param_value('p1', included_path)
466+
config_model.set_param_value('included_param', 'def 456')
467+
468+
config_model.set_param_value('p1', 'random value')
469+
self.assertEqual('def 456', config_model.parameter_values.get('included_param'))
470+
471+
config_model.set_param_value('p1', included_path)
472+
self.assertEqual('def 456', config_model.parameter_values.get('included_param'))
473+
474+
def test_dynamic_include_add_2_parameters_with_default_when_one_dependant(self):
475+
(config_model, included_path) = self.prepare_config_model_with_included([
476+
create_script_param_config('included_param1', default='ABC'),
477+
create_script_param_config('included_param2', default='xABCx', type='list',
478+
values_script='echo x${included_param1}x'),
479+
], 'p1')
480+
481+
self.assertEqual('ABC', config_model.parameter_values.get('included_param1'))
482+
self.assertEqual('xABCx', config_model.parameter_values.get('included_param2'))
483+
484+
dependant_parameter = config_model.find_parameter('included_param2')
485+
self.assertEqual(['xABCx'], dependant_parameter.values)
486+
487+
def prepare_config_model_with_included(self, included_params, static_param_name):
488+
included_path = test_utils.write_script_config({'parameters': included_params}, 'included')
489+
config_model = _create_config_model('main_conf', config={
490+
'include': '${' + static_param_name + '}',
491+
'parameters': [create_script_param_config(static_param_name)]})
492+
config_model.set_param_value(static_param_name, included_path)
493+
494+
return (config_model, included_path)
495+
478496
def setUp(self):
479497
test_utils.setup()
480498

web-src/js/script/script-controller.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -383,6 +383,15 @@ ScriptController.prototype._initStore = function () {
383383
[ADD_PARAMETER](state, parameter) {
384384
_preprocessParameter(parameter, this);
385385
state.parameters.push(parameter);
386+
387+
let parameterName = parameter.name;
388+
if (!state.parameterValues.hasOwnProperty(parameterName)) {
389+
if (!isNull(parameter.default)) {
390+
state.parameterValues[parameterName] = parameter.default;
391+
} else {
392+
state.parameterValues[parameterName] = null;
393+
}
394+
}
386395
},
387396

388397
[UPDATE_PARAMETER](state, parameter) {

0 commit comments

Comments
 (0)