#!/usr/bin/env python r""" This file contains functions useful for validating variables in robot. """ import gen_print as gp import gen_valid as gv from robot.libraries.BuiltIn import BuiltIn from robot.api import logger def rvalid_value(var_name, invalid_values=[], valid_values=[]): r""" Validate a robot value. This function is the robot wrapper for gen_valid.svalid_value. Description of arguments: var_name The name of the variable whose value is to be validated. invalid_values A list of invalid values. If var_value is equal to any of these, it is invalid. Note that if you specify anything for invalid_values (below), the valid_values list is not even processed. valid_values A list of invalid values. var_value must be equal to one of these values to be considered valid. If either the invalid_values or the valid_values parms are not of type "list", they will be processed as python code in order to generate a list. This allows the robot programmer to essentially specify a list literal. For example, the robot code could contain the following: Rvalid Value var1 valid_values=['one', 'two'] Examples of robot calls and corresponding output: Robot code... rvalid_value MY_PARM Output... #(CDT) 2016/11/02 10:04:20 - **ERROR** Variable "MY_PARM" not found (i.e. #it's undefined). or if it is defined but blank: Output... #(CDT) 2016/11/02 10:14:24 - **ERROR** The following variable has an #invalid value: MY_PARM: It must NOT be one of the following values: invalid_values: invalid_values[0]: Robot code... ${invalid_values}= Create List one two three ${MY_PARM}= Set Variable one rvalid_value MY_PARM invalid_values=${invalid_values} Output... #(CDT) 2016/11/02 10:20:05 - **ERROR** The following variable has an #invalid value: MY_PARM: one It must NOT be one of the following values: invalid_values: invalid_values[0]: one invalid_values[1]: two invalid_values[2]: three """ # Note: get_variable_value() seems to have no trouble with local variables. var_value = BuiltIn().get_variable_value("${" + var_name + "}") if type(valid_values) is not list: # Evaluate python syntax to convert to a list. exec("valid_values = " + valid_values) if type(invalid_values) is not list: # Evaluate python syntax to convert to a list. exec("invalid_values = " + invalid_values) if var_value is None: var_value = "" error_message = "Variable \"" + var_name +\ "\" not found (i.e. it's undefined).\n" else: error_message = gv.svalid_value(var_value, invalid_values, valid_values, var_name) if not error_message == "": error_message = gp.sprint_error_report(error_message) BuiltIn().fail(error_message) def rvalid_integer(var_name): r""" Validate a robot integer. This function is the robot wrapper for gen_valid.svalid_integer. Description of arguments: var_name The name of the variable whose value is to be validated. Examples of robot calls and corresponding output: Robot code... Rvalid Integer MY_PARM Output... #(CDT) 2016/11/02 10:44:43 - **ERROR** Variable "MY_PARM" not found (i.e. #it's undefined). or if it is defined but blank: Output... #(CDT) 2016/11/02 10:45:37 - **ERROR** Invalid integer value: MY_PARM: Robot code... ${MY_PARM}= Set Variable HELLO Rvalid Integer MY_PARM Output... #(CDT) 2016/11/02 10:46:18 - **ERROR** Invalid integer value: MY_PARM: HELLO """ # Note: get_variable_value() seems to have no trouble with local variables. var_value = BuiltIn().get_variable_value("${" + var_name + "}") if var_value is None: var_value = "" error_message = "Variable \"" + var_name +\ "\" not found (i.e. it's undefined).\n" else: error_message = gv.svalid_integer(var_value, var_name) if not error_message == "": error_message = gp.sprint_error_report(error_message) BuiltIn().fail(error_message) def rvalid_range(var_name, range): r""" Validate that a robot integer is within the given range. This function is the robot wrapper for gen_valid.svalid_range. Description of arguments: var_name The name of the variable whose value is to be validated. range A list comprised of one or two elements which are the lower and upper ends of a range. These values must be integers except where noted. Valid specifications may be of the following forms: [lower, upper], [lower] or [None, upper]. The caller may also specify this value as a string which will then be converted to a list in the aforementioned format: lower..upper, lower.. or ..upper. Examples of robot calls and corresponding output: Robot code... Rvalid Range MY_PARM 5..9 Output... #(CDT) 2018/05/09 11:45:00.166344 - 0.004252 - **ERROR** The following # variable is not within the expected range: MY_PARM: 4 valid_range: 5..9 """ var_value = BuiltIn().get_variable_value("${" + var_name + "}") if var_value is None: var_value = "" error_message = "Variable \"" + var_name +\ "\" not found (i.e. it's undefined).\n" else: try: range = range.split("..") except AttributeError: pass if range[0] == "": range[0] = None range = [x for x in range if x] error_message = gv.svalid_range(var_value, range, var_name) if not error_message == "": error_message = gp.sprint_error_report(error_message) BuiltIn().fail(error_message)