|  | #!/usr/bin/env python | 
|  |  | 
|  | r""" | 
|  | This file contains functions useful for printing to stdout from robot programs. | 
|  | """ | 
|  |  | 
|  | import re | 
|  | import os | 
|  |  | 
|  | import gen_print as gp | 
|  | import func_args as fa | 
|  |  | 
|  | from robot.libraries.BuiltIn import BuiltIn | 
|  |  | 
|  | gen_robot_print_debug = int(os.environ.get('GEN_ROBOT_PRINT_DEBUG', '0')) | 
|  |  | 
|  |  | 
|  | def sprint_vars(*args, **kwargs): | 
|  | r""" | 
|  | Sprint the values of one or more variables to the console. | 
|  |  | 
|  | This is a robot re-definition of the sprint_vars function in gen_print.py. | 
|  | Given a list of variable names, this keyword will string print each | 
|  | variable name and value such that each value lines up in the same column | 
|  | as messages printed with sprint_time(). | 
|  |  | 
|  | Description of argument(s): | 
|  | args                            The names of the variables to be printed | 
|  | (e.g. var1 rather than ${var1}). | 
|  | kwargs                          See sprint_varx in gen_print.py for | 
|  | descriptions of all other arguments. | 
|  | """ | 
|  |  | 
|  | if 'fmt' in kwargs: | 
|  | # Find format option names in kwargs['fmt'] and wrap them with "gp." | 
|  | # and "()" to make them into function calls.  For example, verbose | 
|  | # would be converted to "gp.verbose()".  This allows the user to | 
|  | # simply specify "fmt=verbose" (vs. fmt=gp.verbose()). | 
|  | # Note "terse" has been explicitly added for backward compatibility. | 
|  | # Once the repo has been purged of its use, this code can return to | 
|  | # its original form. | 
|  | regex = "(" + "|".join(gp.valid_fmts()) + "|terse)" | 
|  | kwargs['fmt'] = \ | 
|  | re.sub(regex, "gp.\\1()", kwargs['fmt']) | 
|  | kwargs = fa.args_to_objects(kwargs) | 
|  | buffer = "" | 
|  | for var_name in args: | 
|  | var_value = BuiltIn().get_variable_value("${" + str(var_name) + "}") | 
|  | buffer += gp.sprint_varx(var_name, var_value, **kwargs) | 
|  |  | 
|  | return buffer | 
|  |  | 
|  |  | 
|  | def sprint_auto_vars(headers=0): | 
|  | r""" | 
|  | String print all of the Automatic Variables described in the Robot User's | 
|  | Guide using sprint_vars. | 
|  |  | 
|  | NOTE: Not all automatic variables are guaranteed to exist. | 
|  |  | 
|  | Description of argument(s): | 
|  | headers                         This indicates that a header and footer | 
|  | should be printed. | 
|  | """ | 
|  |  | 
|  | buffer = "" | 
|  | if int(headers) == 1: | 
|  | buffer += gp.sprint_dashes() | 
|  | buffer += "Automatic Variables:" | 
|  |  | 
|  | buffer += \ | 
|  | sprint_vars( | 
|  | "TEST_NAME", "TEST_TAGS", "TEST_DOCUMENTATION", "TEST_STATUS", | 
|  | "TEST_DOCUMENTATION", "TEST_STATUS", "TEST_MESSAGE", | 
|  | "PREV_TEST_NAME", "PREV_TEST_STATUS", "PREV_TEST_MESSAGE", | 
|  | "SUITE_NAME", "SUITE_SOURCE", "SUITE_DOCUMENTATION", | 
|  | "SUITE_METADATA", "SUITE_STATUS", "SUITE_MESSAGE", | 
|  | "KEYWORD_STATUS", "KEYWORD_MESSAGE", "LOG_LEVEL", "OUTPUT_FILE", | 
|  | "LOG_FILE", "REPORT_FILE", "DEBUG_FILE", "OUTPUT_DIR") | 
|  |  | 
|  | if int(headers) == 1: | 
|  | buffer += gp.sprint_dashes() | 
|  |  | 
|  | return buffer | 
|  |  | 
|  |  | 
|  | def gp_debug_print(buffer): | 
|  | r""" | 
|  | Print the buffer value only if gen_robot_print_debug is set. | 
|  |  | 
|  | This function is intended for use only by other functions in this module. | 
|  |  | 
|  | Description of argument(s): | 
|  | buffer                          The string to be printed. | 
|  | """ | 
|  |  | 
|  | if not gen_robot_print_debug: | 
|  | return | 
|  | gp.gp_print(buffer) | 
|  |  | 
|  |  | 
|  | # In the following section of code, we will dynamically create print versions | 
|  | # for several of the sprint functions defined above.  For example, where we | 
|  | # have an sprint_vars() function defined above that returns formatted variable | 
|  | # print outs in a string, we will create a corresponding rprint_vars() | 
|  | # function that will print that string directly to stdout. | 
|  |  | 
|  | # It can be complicated to follow what's being created below.  Here is an | 
|  | # example of the rprint_vars() function that will be created: | 
|  |  | 
|  | # def rprint_vars(*args, **kwargs): | 
|  | # gp.gp_print(gp.replace_passwords(sprint_vars(*args, **kwargs)), | 
|  | # stream='stdout') | 
|  |  | 
|  | # For sprint_vars (defined above), the following functions will be created: | 
|  |  | 
|  | # rprint_vars                       Robot Print Vars | 
|  | # rqprint_vars                      Robot Print Vars if ${quiet} is set to | 
|  | #                                   ${0}. | 
|  | # rdprint_vars                      Robot Print Vars if ${debug} is set to | 
|  | #                                   ${1}. | 
|  | # rlprint_vars                      Robot Print Vars to the log instead of to | 
|  | #                                   the console. | 
|  |  | 
|  | # Abbreviated names are created for all of the preceding function names: | 
|  | # rpvars | 
|  | # rqpvars | 
|  | # rdpvars | 
|  | # rlpvars | 
|  |  | 
|  | # Users are encouraged to only use the abbreviated forms for development but | 
|  | # to then ultimately switch to full names. | 
|  | # Rprint Vars (instead of Rpvars) | 
|  |  | 
|  | replace_dict = {'output_stream': 'stdout', 'mod_qualifier': 'gp.'} | 
|  |  | 
|  | gp_debug_print("gp.robot_env: " + str(gp.robot_env) + "\n") | 
|  |  | 
|  | # func_names contains a list of all rprint functions which should be created | 
|  | # from their sprint counterparts. | 
|  | func_names = [ | 
|  | 'print_vars', 'print_auto_vars' | 
|  | ] | 
|  |  | 
|  | # stderr_func_names is a list of functions whose output should go to stderr | 
|  | # rather than stdout. | 
|  | stderr_func_names = [] | 
|  |  | 
|  | func_defs = gp.create_print_wrapper_funcs(func_names, stderr_func_names, | 
|  | replace_dict, "r") | 
|  | gp_debug_print(func_defs) | 
|  | exec(func_defs) | 
|  |  | 
|  | # Define an alias.  rpvar is just a special case of rpvars where the args | 
|  | # list contains only one element. | 
|  | cmd_buf = "rpvar = rpvars" | 
|  | gp_debug_print("\n" + cmd_buf + "\n") | 
|  | exec(cmd_buf) |