1*7423c01aSMichael Walsh#!/usr/bin/env python 2*7423c01aSMichael Walsh 3*7423c01aSMichael Walshr""" 4*7423c01aSMichael WalshThis module provides valuable argument processing functions like 5*7423c01aSMichael Walshgen_get_options and sprint_args. 6*7423c01aSMichael Walsh""" 7*7423c01aSMichael Walsh 8*7423c01aSMichael Walshimport sys 9*7423c01aSMichael Walsh 10*7423c01aSMichael Walshimport gen_print as gp 11*7423c01aSMichael Walsh 12*7423c01aSMichael Walsh 13*7423c01aSMichael Walsh 14*7423c01aSMichael Walsh############################################################################### 15*7423c01aSMichael Walshdef valid_value(var_value, 16*7423c01aSMichael Walsh invalid_values=[""], 17*7423c01aSMichael Walsh valid_values=[]): 18*7423c01aSMichael Walsh 19*7423c01aSMichael Walsh r""" 20*7423c01aSMichael Walsh Return True if var_value is a valid value. Otherwise, return False and 21*7423c01aSMichael Walsh print an error message to stderr. 22*7423c01aSMichael Walsh 23*7423c01aSMichael Walsh Description of arguments: 24*7423c01aSMichael Walsh var_value The value being validated. 25*7423c01aSMichael Walsh invalid_values A list of invalid values. If var_value is 26*7423c01aSMichael Walsh equal to any of these, it is invalid. 27*7423c01aSMichael Walsh Note that if you specify anything for 28*7423c01aSMichael Walsh invalid_values (below), the valid_values 29*7423c01aSMichael Walsh list is not even processed. 30*7423c01aSMichael Walsh valid_values A list of invalid values. var_value must 31*7423c01aSMichael Walsh be equal to one of these values to be 32*7423c01aSMichael Walsh considered valid. 33*7423c01aSMichael Walsh """ 34*7423c01aSMichael Walsh 35*7423c01aSMichael Walsh len_valid_values = len(valid_values) 36*7423c01aSMichael Walsh len_invalid_values = len(invalid_values) 37*7423c01aSMichael Walsh if len_valid_values > 0 and len_invalid_values > 0: 38*7423c01aSMichael Walsh gp.print_error_report("Programmer error - You must provide either an" + 39*7423c01aSMichael Walsh " invalid_values list or a valid_values" + 40*7423c01aSMichael Walsh " list but NOT both.") 41*7423c01aSMichael Walsh return False 42*7423c01aSMichael Walsh 43*7423c01aSMichael Walsh if len_valid_values > 0: 44*7423c01aSMichael Walsh # Processing the valid_values list. 45*7423c01aSMichael Walsh if var_value in valid_values: 46*7423c01aSMichael Walsh return True 47*7423c01aSMichael Walsh var_name = gp.get_arg_name(0, 1, 2) 48*7423c01aSMichael Walsh gp.print_error_report("The following variable has an invalid" + 49*7423c01aSMichael Walsh " value:\n" + 50*7423c01aSMichael Walsh gp.sprint_varx(var_name, var_value) + 51*7423c01aSMichael Walsh "\nIt must be one of the following values:\n" + 52*7423c01aSMichael Walsh gp.sprint_varx("valid_values", valid_values)) 53*7423c01aSMichael Walsh return False 54*7423c01aSMichael Walsh 55*7423c01aSMichael Walsh if len_invalid_values == 0: 56*7423c01aSMichael Walsh gp.print_error_report("Programmer error - You must provide either an" + 57*7423c01aSMichael Walsh " invalid_values list or a valid_values" + 58*7423c01aSMichael Walsh " list. Both are empty.") 59*7423c01aSMichael Walsh return False 60*7423c01aSMichael Walsh 61*7423c01aSMichael Walsh # Assertion: We have an invalid_values list. Processing it now. 62*7423c01aSMichael Walsh if var_value not in invalid_values: 63*7423c01aSMichael Walsh return True 64*7423c01aSMichael Walsh 65*7423c01aSMichael Walsh var_name = gp.get_arg_name(0, 1, 2) 66*7423c01aSMichael Walsh gp.print_error_report("The following variable has an invalid value:\n" + 67*7423c01aSMichael Walsh gp.sprint_varx(var_name, var_value) + "\nIt must" + 68*7423c01aSMichael Walsh " NOT be one of the following values:\n" + 69*7423c01aSMichael Walsh gp.sprint_varx("invalid_values", invalid_values)) 70*7423c01aSMichael Walsh return False 71*7423c01aSMichael Walsh 72*7423c01aSMichael Walsh############################################################################### 73*7423c01aSMichael Walsh 74*7423c01aSMichael Walsh 75*7423c01aSMichael Walsh############################################################################### 76*7423c01aSMichael Walshdef valid_integer(var_value): 77*7423c01aSMichael Walsh 78*7423c01aSMichael Walsh r""" 79*7423c01aSMichael Walsh Return True if var_value is a valid integer. Otherwise, return False and 80*7423c01aSMichael Walsh print an error message to stderr. 81*7423c01aSMichael Walsh 82*7423c01aSMichael Walsh Description of arguments: 83*7423c01aSMichael Walsh var_value The value being validated. 84*7423c01aSMichael Walsh """ 85*7423c01aSMichael Walsh 86*7423c01aSMichael Walsh # This currently allows floats which is not good. 87*7423c01aSMichael Walsh 88*7423c01aSMichael Walsh try: 89*7423c01aSMichael Walsh if type(int(var_value)) is int: 90*7423c01aSMichael Walsh return True 91*7423c01aSMichael Walsh except ValueError: 92*7423c01aSMichael Walsh pass 93*7423c01aSMichael Walsh 94*7423c01aSMichael Walsh # If we get to this point, the validation has failed. 95*7423c01aSMichael Walsh 96*7423c01aSMichael Walsh var_name = gp.get_arg_name(0, 1, 2) 97*7423c01aSMichael Walsh gp.print_varx("var_name", var_name) 98*7423c01aSMichael Walsh 99*7423c01aSMichael Walsh gp.print_error_report("Invalid integer value:\n" + 100*7423c01aSMichael Walsh gp.sprint_varx(var_name, var_value)) 101*7423c01aSMichael Walsh 102*7423c01aSMichael Walsh return False 103*7423c01aSMichael Walsh 104*7423c01aSMichael Walsh############################################################################### 105