Skip to content

Commit 4f78737

Browse files
committed
#133 fixed missing included parameters after normalization
1 parent cba8a13 commit 4f78737

5 files changed

Lines changed: 21 additions & 47 deletions

File tree

src/model/model_helper.py

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -105,16 +105,6 @@ def is_empty(value):
105105
return (not value) and (value != 0) and (value is not False)
106106

107107

108-
def normalize_incoming_values(param_values, parameters):
109-
normalized_values = {}
110-
111-
for param in parameters:
112-
if param.name in param_values:
113-
normalized_value = param.normalize_user_value(param_values[param.name])
114-
normalized_values[param.name] = normalized_value
115-
116-
return normalized_values
117-
118108
def fill_parameter_values(parameter_configs, template, values):
119109
result = template
120110

src/model/script_configs.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -91,10 +91,6 @@ def set_param_value(self, param_name, value):
9191
self.parameter_values[param_name] = value
9292

9393
def set_all_param_values(self, param_values):
94-
for key, value in param_values.items():
95-
if self.find_parameter(key) is None:
96-
LOGGER.warning('Incoming value for unknown parameter ' + key)
97-
9894
original_values = dict(self.parameter_values)
9995
processed = {}
10096

@@ -110,7 +106,7 @@ def set_all_param_values(self, param_values):
110106
if required_parameters and any(r not in processed for r in required_parameters):
111107
continue
112108

113-
value = param_values.get(parameter.name)
109+
value = parameter.normalize_user_value(param_values.get(parameter.name))
114110
validation_error = parameter.validate_value(value)
115111
if validation_error:
116112
self.parameter_values.set(original_values)
@@ -125,6 +121,10 @@ def set_all_param_values(self, param_values):
125121
self.parameter_values.set(original_values)
126122
raise Exception('Could not resolve order for dependencies. Remaining: ' + str(remaining))
127123

124+
for key, value in param_values.items():
125+
if self.find_parameter(key) is None:
126+
LOGGER.warning('Incoming value for unknown parameter ' + key)
127+
128128
def list_files_for_param(self, parameter_name, path):
129129
parameter = self.find_parameter(parameter_name)
130130
if not parameter:

src/tests/model_helper_test.py

Lines changed: 2 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import os
22
import unittest
33

4-
from config.constants import PARAM_TYPE_MULTISELECT, FILE_TYPE_FILE, FILE_TYPE_DIR
4+
from config.constants import FILE_TYPE_FILE, FILE_TYPE_DIR
55
from model import script_configs, model_helper
6-
from model.model_helper import read_list, read_dict, normalize_incoming_values, fill_parameter_values, resolve_env_vars, \
6+
from model.model_helper import read_list, read_dict, fill_parameter_values, resolve_env_vars, \
77
InvalidFileException
88
from tests import test_utils
99
from tests.test_utils import create_parameter_model
@@ -150,32 +150,6 @@ def test_default_when_specified(self):
150150
self.assertEqual(dict_value, {'key2': 'value2'})
151151

152152

153-
class TestNormalizeIncomingValues(unittest.TestCase):
154-
155-
def test_no_values(self):
156-
normalized = normalize_incoming_values({}, [])
157-
158-
self.assertEqual({}, normalized)
159-
160-
def test_normalize_simple_parameters(self):
161-
p1 = create_parameter_model('p1')
162-
p2 = create_parameter_model('p2')
163-
p3 = create_parameter_model('p3')
164-
165-
normalized = normalize_incoming_values({'p1': 1, 'p3': None}, [p1, p2, p3])
166-
167-
self.assertEqual({'p1': 1, 'p3': None}, normalized)
168-
169-
def test_normalize_one_multiselect(self):
170-
p1 = create_parameter_model('p1')
171-
p2 = create_parameter_model('p2', type=PARAM_TYPE_MULTISELECT, allowed_values=['abc'])
172-
p3 = create_parameter_model('p3')
173-
174-
normalized = normalize_incoming_values({'p2': 'abc', 'p3': True}, [p1, p2, p3])
175-
176-
self.assertEqual({'p2': ['abc'], 'p3': True}, normalized)
177-
178-
179153
class TestFillParameterValues(unittest.TestCase):
180154
def test_fill_single_parameter(self):
181155
result = fill_parameter_values(self.create_parameters('p1'), 'Hello, ${p1}!', {'p1': 'world'})

src/tests/script_config_test.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,18 @@ def test_set_all_values_when_dependants_cylce(self):
132132
values = {'p1': 'XabcX', 'p2': 'abc'}
133133
self.assertRaisesRegex(Exception, 'Could not resolve order', config_model.set_all_param_values, values)
134134

135+
def test_set_all_values_with_normalization(self):
136+
allowed_values = ['abc', 'def', 'xyz']
137+
parameters = [
138+
create_script_param_config('p1', type=PARAM_TYPE_MULTISELECT, allowed_values=allowed_values),
139+
create_script_param_config('p2', type=PARAM_TYPE_MULTISELECT, allowed_values=allowed_values),
140+
create_script_param_config('p3', type=PARAM_TYPE_MULTISELECT, allowed_values=allowed_values)]
141+
142+
config_model = _create_config_model('config', parameters=parameters)
143+
config_model.set_all_param_values({'p1': '', 'p2': ['def'], 'p3': 'abc'})
144+
145+
self.assertEqual({'p1': [], 'p2': ['def'], 'p3': ['abc']}, config_model.parameter_values)
146+
135147

136148
class ConfigModelListFilesTest(unittest.TestCase):
137149
def test_list_files_for_valid_param(self):

src/web/server.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
from features.file_download_feature import FileDownloadFeature
2828
from features.file_upload_feature import FileUploadFeature
2929
from model import external_model
30-
from model import model_helper
3130
from model.external_model import to_short_execution_log, to_long_execution_log, parameter_to_external
3231
from model.model_helper import is_empty
3332
from model.script_configs import InvalidValueException, ParameterNotFoundException, WrongParameterUsageException
@@ -373,10 +372,9 @@ def post(self, user):
373372
file_path = file_upload_feature.save_file(file_info.filename, file_info.body, audit_name)
374373
parameter_values[key] = file_path
375374

376-
parameter_values = model_helper.normalize_incoming_values(parameter_values, config_model.parameters)
377-
378375
try:
379376
config_model.set_all_param_values(parameter_values)
377+
normalized_values = dict(config_model.parameter_values)
380378
except InvalidValueException as e:
381379
message = 'Invalid parameter %s value: %s' % (e.param_name, str(e))
382380
LOGGER.error(message)
@@ -389,7 +387,7 @@ def post(self, user):
389387

390388
execution_id = self.application.execution_service.start_script(
391389
config_model,
392-
parameter_values,
390+
normalized_values,
393391
user_id,
394392
all_audit_names)
395393

0 commit comments

Comments
 (0)