|  | #!/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]:         <blank> | 
|  |  | 
|  | 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:                     <blank> | 
|  |  | 
|  | 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) |