1#!/usr/bin/env python 2 3r""" 4This file contains functions useful for validating variables in robot. 5""" 6 7import gen_robot_print as grp 8import gen_valid as gv 9 10from robot.libraries.BuiltIn import BuiltIn 11from robot.api import logger 12 13 14def rvalid_value(var_name, 15 invalid_values=[], 16 valid_values=[]): 17 r""" 18 Validate a robot value. 19 20 This function is the robot wrapper for gen_robot_print.svalid_value. 21 22 Description of arguments: 23 var_name The name of the variable whose value is to 24 be validated. 25 invalid_values A list of invalid values. If var_value is 26 equal to any of these, it is invalid. 27 Note that if you specify anything for 28 invalid_values (below), the valid_values 29 list is not even processed. 30 valid_values A list of invalid values. var_value must 31 be equal to one of these values to be 32 considered valid. 33 34 Examples of robot calls and corresponding output: 35 36 Robot code... 37 rvalid_value MY_PARM 38 39 Output... 40 #(CDT) 2016/11/02 10:04:20 - **ERROR** Variable "MY_PARM" not found (i.e. 41 #it's undefined). 42 43 or if it is defined but blank: 44 45 Output... 46 #(CDT) 2016/11/02 10:14:24 - **ERROR** The following variable has an 47 #invalid value: 48 MY_PARM: 49 50 It must NOT be one of the following values: 51 invalid_values: 52 invalid_values[0]: <blank> 53 54 Robot code... 55 ${invalid_values}= Create List one two three 56 ${MY_PARM}= Set Variable one 57 rvalid_value MY_PARM invalid_values=${invalid_values} 58 59 Output... 60 #(CDT) 2016/11/02 10:20:05 - **ERROR** The following variable has an 61 #invalid value: 62 MY_PARM: one 63 64 It must NOT be one of the following values: 65 invalid_values: 66 invalid_values[0]: one 67 invalid_values[1]: two 68 invalid_values[2]: three 69 70 """ 71 72 # Note: get_variable_value() seems to have no trouble with local variables. 73 var_value = BuiltIn().get_variable_value("${" + var_name + "}") 74 75 if var_value is None: 76 var_value = "" 77 error_message = "Variable \"" + var_name +\ 78 "\" not found (i.e. it's undefined).\n" 79 else: 80 error_message = gv.svalid_value(var_value, invalid_values, 81 valid_values, var_name) 82 if not error_message == "": 83 error_message = grp.sprint_error_report(error_message) 84 BuiltIn().fail(error_message) 85 86 87def rvalid_integer(var_name): 88 r""" 89 Validate a robot integer. 90 91 This function is the robot wrapper for gen_robot_print.svalid_integer. 92 93 Description of arguments: 94 var_name The name of the variable whose value is to 95 be validated. 96 97 Examples of robot calls and corresponding output: 98 99 Robot code... 100 Rvalid Integer MY_PARM 101 102 Output... 103 #(CDT) 2016/11/02 10:44:43 - **ERROR** Variable "MY_PARM" not found (i.e. 104 #it's undefined). 105 106 or if it is defined but blank: 107 108 Output... 109 #(CDT) 2016/11/02 10:45:37 - **ERROR** Invalid integer value: 110 MY_PARM: <blank> 111 112 Robot code... 113 ${MY_PARM}= Set Variable HELLO 114 Rvalid Integer MY_PARM 115 116 Output... 117 #(CDT) 2016/11/02 10:46:18 - **ERROR** Invalid integer value: 118 MY_PARM: HELLO 119 120 """ 121 122 # Note: get_variable_value() seems to have no trouble with local variables. 123 var_value = BuiltIn().get_variable_value("${" + var_name + "}") 124 125 if var_value is None: 126 var_value = "" 127 error_message = "Variable \"" + var_name +\ 128 "\" not found (i.e. it's undefined).\n" 129 else: 130 error_message = gv.svalid_integer(var_value, var_name) 131 if not error_message == "": 132 error_message = grp.sprint_error_report(error_message) 133 BuiltIn().fail(error_message) 134 135 136def rvalid_range(var_name, 137 range): 138 r""" 139 Validate that a robot integer is within the given range. 140 141 This function is the robot wrapper for gen_robot_print.svalid_range. 142 143 Description of arguments: 144 var_name The name of the variable whose value is to 145 be validated. 146 range A list comprised of one or two elements 147 which are the lower and upper ends of a 148 range. These values must be integers 149 except where noted. Valid specifications 150 may be of the following forms: [lower, 151 upper], [lower] or [None, upper]. The 152 caller may also specify this value as a 153 string which will then be converted to a 154 list in the aforementioned format: 155 lower..upper, lower.. or ..upper. 156 157 Examples of robot calls and corresponding output: 158 159 Robot code... 160 Rvalid Range MY_PARM 5..9 161 162 Output... 163 #(CDT) 2018/05/09 11:45:00.166344 - 0.004252 - **ERROR** The following 164 # variable is not within the expected range: 165 MY_PARM: 4 166 valid_range: 5..9 167 """ 168 169 var_value = BuiltIn().get_variable_value("${" + var_name + "}") 170 171 if var_value is None: 172 var_value = "" 173 error_message = "Variable \"" + var_name +\ 174 "\" not found (i.e. it's undefined).\n" 175 else: 176 if isinstance(range, unicode): 177 range = range.split("..") 178 if range[0] == "": 179 range[0] = None 180 range = [x for x in range if x] 181 error_message = gv.svalid_range(var_value, range, var_name) 182 if not error_message == "": 183 error_message = grp.sprint_error_report(error_message) 184 BuiltIn().fail(error_message) 185