Commit fc98fa0715fa829e1396142a58501dfea05bf2b6
1 parent
f9a5a0a6
Implement parameters passing through command line
Parameters defined in brokers.yaml and users.yaml can be overridden through command line. Example of usage: -v BROKERS_PARAMS:'{"Quinta": {"intervals": {"default": {"enquiry": [0, 0], "tender": [0, 5.3]}}}}' -v USERS_PARAMS:'{"users": {"Tender_Owner": {"api_key": "a"}}}'
Showing
2 changed files
with
30 additions
and
12 deletions
@@ -68,7 +68,8 @@ Set Suite Variable With Default Value | @@ -68,7 +68,8 @@ Set Suite Variable With Default Value | ||
68 | 68 | ||
69 | # Load brokers data | 69 | # Load brokers data |
70 | ${file_path}= Get Variable Value ${BROKERS_FILE} brokers.yaml | 70 | ${file_path}= Get Variable Value ${BROKERS_FILE} brokers.yaml |
71 | - ${BROKERS}= load_data_from ${file_path} mode=brokers | 71 | + ${BROKERS_PARAMS}= Get Variable Value ${BROKERS_PARAMS} |
72 | + ${BROKERS}= load_data_from ${file_path} mode=brokers external_params_name=BROKERS_PARAMS | ||
72 | Log ${BROKERS} | 73 | Log ${BROKERS} |
73 | Set Suite Variable ${BROKERS} | 74 | Set Suite Variable ${BROKERS} |
74 | # List of currently used brokers | 75 | # List of currently used brokers |
@@ -76,7 +77,8 @@ Set Suite Variable With Default Value | @@ -76,7 +77,8 @@ Set Suite Variable With Default Value | ||
76 | 77 | ||
77 | # Load users data | 78 | # Load users data |
78 | ${file_path}= Get Variable Value ${USERS_FILE} users.yaml | 79 | ${file_path}= Get Variable Value ${USERS_FILE} users.yaml |
79 | - ${USERS}= load_data_from ${file_path} | 80 | + ${USERS_PARAMS}= Get Variable Value ${USERS_PARAMS} |
81 | + ${USERS}= load_data_from ${file_path} users.yaml external_params_name=USERS_PARAMS | ||
80 | Log ${USERS.users} | 82 | Log ${USERS.users} |
81 | Set Suite Variable ${USERS} | 83 | Set Suite Variable ${USERS} |
82 | # List of currently used users | 84 | # List of currently used users |
@@ -7,9 +7,9 @@ from dateutil.parser import parse | @@ -7,9 +7,9 @@ from dateutil.parser import parse | ||
7 | from dpath.util import new as xpathnew | 7 | from dpath.util import new as xpathnew |
8 | from haversine import haversine | 8 | from haversine import haversine |
9 | from iso8601 import parse_date | 9 | from iso8601 import parse_date |
10 | -from json import load | 10 | +from json import load, loads |
11 | from jsonpath_rw import parse as parse_path | 11 | from jsonpath_rw import parse as parse_path |
12 | -from munch import fromYAML, Munch, munchify | 12 | +from munch import Munch, munchify |
13 | from robot.errors import ExecutionFailed | 13 | from robot.errors import ExecutionFailed |
14 | from robot.libraries.BuiltIn import BuiltIn | 14 | from robot.libraries.BuiltIn import BuiltIn |
15 | from robot.output import LOGGER | 15 | from robot.output import LOGGER |
@@ -200,22 +200,38 @@ def munch_to_object(data, format="yaml"): | @@ -200,22 +200,38 @@ def munch_to_object(data, format="yaml"): | ||
200 | return data.toYAML(allow_unicode=True, default_flow_style=False) | 200 | return data.toYAML(allow_unicode=True, default_flow_style=False) |
201 | 201 | ||
202 | 202 | ||
203 | -def load_data_from(file_name, mode=None): | 203 | +def load_data_from(file_name, mode=None, external_params_name=None): |
204 | + """We assume that 'external_params' is a a valid json if passed | ||
205 | + """ | ||
206 | + | ||
207 | + external_params = BuiltIn().\ | ||
208 | + get_variable_value('${{{name}}}'.format(name=external_params_name)) | ||
209 | + | ||
204 | if not os.path.exists(file_name): | 210 | if not os.path.exists(file_name): |
205 | file_name = os.path.join(os.path.dirname(__file__), 'data', file_name) | 211 | file_name = os.path.join(os.path.dirname(__file__), 'data', file_name) |
206 | with open(file_name) as file_obj: | 212 | with open(file_name) as file_obj: |
207 | - if file_name.endswith(".json"): | 213 | + if file_name.endswith('.json'): |
208 | file_data = Munch.fromDict(load(file_obj)) | 214 | file_data = Munch.fromDict(load(file_obj)) |
209 | - elif file_name.endswith(".yaml"): | ||
210 | - file_data = fromYAML(file_obj) | ||
211 | - if mode == "brokers": | 215 | + elif file_name.endswith('.yaml'): |
216 | + file_data = Munch.fromYAML(file_obj) | ||
217 | + if mode == 'brokers': | ||
212 | default = file_data.pop('Default') | 218 | default = file_data.pop('Default') |
213 | brokers = {} | 219 | brokers = {} |
214 | for k, v in file_data.iteritems(): | 220 | for k, v in file_data.iteritems(): |
215 | brokers[k] = merge_dicts(default, v) | 221 | brokers[k] = merge_dicts(default, v) |
216 | - return brokers | ||
217 | - else: | ||
218 | - return file_data | 222 | + file_data = brokers |
223 | + | ||
224 | + try: | ||
225 | + ext_params_munch \ | ||
226 | + = Munch.fromDict(loads(external_params)) \ | ||
227 | + if external_params else Munch() | ||
228 | + except ValueError: | ||
229 | + raise ValueError( | ||
230 | + 'Value {param} of command line parameter {name} is invalid'. | ||
231 | + format(name=external_params_name, param=str(external_params)) | ||
232 | + ) | ||
233 | + | ||
234 | + return merge_dicts(file_data, ext_params_munch) | ||
219 | 235 | ||
220 | 236 | ||
221 | def compute_intrs(brokers_data, used_brokers): | 237 | def compute_intrs(brokers_data, used_brokers): |
Please
register
or
login
to post a comment