#!/usr/bin/env python r""" This module provides valuable argument processing functions like gen_get_options and sprint_args. """ import sys import os import gen_print as gp def svalid_value(var_value, invalid_values=[], valid_values=[], var_name=""): r""" Return an empty string if var_value is a valid value. Otherwise, return an error string. Description of arguments: var_value The value being 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. var_name The name of the variable whose value is passed in var_value. This parameter is normally unnecessary as this function can figure out the var_name. This is provided for Robot callers. In this scenario, we are unable to get the variable name ourselves. """ success_message = "" error_message = "" stack_frame_ix = 3 len_valid_values = len(valid_values) len_invalid_values = len(invalid_values) if len_valid_values > 0 and len_invalid_values > 0: error_message += "Programmer error - You must provide either an" +\ " invalid_values list or a valid_values" +\ " list but NOT both.\n" +\ gp.sprint_var(invalid_values) +\ gp.sprint_var(valid_values) return error_message show_blanks = 1 if len_valid_values > 0: # Processing the valid_values list. if var_value in valid_values: return success_message if var_name == "": var_name = gp.get_arg_name(0, 1, stack_frame_ix) error_message += "The following variable has an invalid" +\ " value:\n" +\ gp.sprint_varx(var_name, var_value, show_blanks) +\ "\nIt must be one of the following values:\n" +\ gp.sprint_varx("valid_values", valid_values, show_blanks) return error_message if len_invalid_values == 0: # Assign default value. invalid_values = [""] # Assertion: We have an invalid_values list. Processing it now. if var_value not in invalid_values: return success_message if var_name == "": var_name = gp.get_arg_name(0, 1, stack_frame_ix) error_message += "The following variable has an invalid value:\n" +\ gp.sprint_varx(var_name, var_value, show_blanks) +\ "\nIt must NOT be one of the following values:\n" +\ gp.sprint_varx("invalid_values", invalid_values, show_blanks) return error_message def valid_value(var_value, invalid_values=[], valid_values=[], var_name=""): r""" Return True if var_value is a valid value. Otherwise, return False and print an error message to stderr. Description of arguments: (See description of arguments for svalid_value (above)). """ error_message = svalid_value(var_value, invalid_values, valid_values, var_name) if not error_message == "": gp.print_error_report(error_message) return False return True def svalid_integer(var_value, var_name=""): r""" Return an empty string if var_value is a valid integer. Otherwise, return an error string. Description of arguments: var_value The value being validated. var_name The name of the variable whose value is passed in var_value. This parameter is normally unnecessary as this function can figure out the var_name. This is provided for Robot callers. In this scenario, we are unable to get the variable name ourselves. """ success_message = "" error_message = "" try: if type(int(str(var_value), 0)) is int: return success_message except ValueError: pass # If we get to this point, the validation has failed. if var_name is "": stack_index = 3 var_name = gp.get_arg_name(0, 1, stack_index) show_blanks = 1 error_message += "Invalid integer value:\n" +\ gp.sprint_varx(var_name, var_value, show_blanks) return error_message def valid_integer(var_value, var_name=""): r""" Return True if var_value is a valid integer. Otherwise, return False and print an error message to stderr. Description of arguments: (See description of arguments for svalid_value (above)). """ error_message = svalid_integer(var_value, var_name) if not error_message == "": gp.print_error_report(error_message) return False return True def svalid_dir_path(var_value, var_name=""): r""" Return an empty string if var_value is a valid directory path. Otherwise, return an error string. Description of arguments: var_value The value being validated. var_name The name of the variable whose value is passed in var_value. This parameter is normally unnecessary as this function can figure out the var_name. This is provided for Robot callers. In this scenario, we are unable to get the variable name ourselves. """ error_message = "" if not os.path.isdir(str(var_value)): if var_name is "": stack_index = 3 var_name = gp.get_arg_name(0, 1, stack_index) error_message += "The following directory does not exist:\n" +\ gp.sprint_varx(var_name, var_value) return error_message def valid_dir_path(var_value, var_name=""): r""" Return True if var_value is a valid integer. Otherwise, return False and print an error message to stderr. Description of arguments: (See description of arguments for svalid_value (above)). """ error_message = svalid_dir_path(var_value, var_name) if not error_message == "": gp.print_error_report(error_message) return False return True def svalid_file_path(var_value, var_name=""): r""" Return an empty string if var_value is a valid file path. Otherwise, return an error string. Description of arguments: var_value The value being validated. var_name The name of the variable whose value is passed in var_value. This parameter is normally unnecessary as this function can figure out the var_name. This is provided for Robot callers. In this scenario, we are unable to get the variable name ourselves. """ error_message = "" if not os.path.isfile(str(var_value)): if var_name is "": stack_index = 3 var_name = gp.get_arg_name(0, 1, stack_index) error_message += "Invalid file (does not exist):\n" +\ gp.sprint_varx(var_name, var_value) return error_message def valid_file_path(var_value, var_name=""): r""" Return True if var_value is a valid integer. Otherwise, return False and print an error message to stderr. Description of arguments: (See description of arguments for svalid_value (above)). """ error_message = svalid_file_path(var_value, var_name) if not error_message == "": gp.print_error_report(error_message) return False return True