blob: 7dd138433948dfe337a148454cdc96fb2678773d [file] [log] [blame]
#!/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)