1e7e9171eSGeorge Keishing#!/usr/bin/env python3 2bdb3965aSMichael Walsh 3bdb3965aSMichael Walshr""" 4bdb3965aSMichael WalshThis module contains utility and wrapper functions useful to robot python 5bdb3965aSMichael Walshprograms. 6bdb3965aSMichael Walsh""" 7bdb3965aSMichael Walsh 8bdb3965aSMichael Walshimport re 9*20f38712SPatrick Williams 10bdb3965aSMichael Walshfrom robot.libraries.BuiltIn import BuiltIn 11bdb3965aSMichael Walsh 12bdb3965aSMichael Walsh 13bdb3965aSMichael Walshdef my_import_resource(path): 14bdb3965aSMichael Walsh r""" 15bdb3965aSMichael Walsh Import the resource file specified in path. 16bdb3965aSMichael Walsh 17bdb3965aSMichael Walsh Description of arguments: 18bdb3965aSMichael Walsh path The path to your resource file. 19bdb3965aSMichael Walsh 20bdb3965aSMichael Walsh This function is a wrapper for BuiltIn().import_resource() and provides 21bdb3965aSMichael Walsh the following benefits: 22bdb3965aSMichael Walsh - When you invoke a robot program from a command line, you may specify 23bdb3965aSMichael Walsh program parameters as follows: 24bdb3965aSMichael Walsh 25bdb3965aSMichael Walsh -v --variable name:values 26bdb3965aSMichael Walsh 27bdb3965aSMichael Walsh For example: 28bdb3965aSMichael Walsh 29bdb3965aSMichael Walsh robot -v parm_x:1 file_x.robot 30bdb3965aSMichael Walsh 31bdb3965aSMichael Walsh When you do "Resource utils_x.robot" in a .robot program, it processes 32bdb3965aSMichael Walsh "utils_x.robot" BEFORE your command line parms are processed, as one 33bdb3965aSMichael Walsh might expect. On the other hand, if one of your python library files 34bdb3965aSMichael Walsh were to run BuiltIn().import_resource("utils_x.robot"), it will process 35bdb3965aSMichael Walsh "utils_x.robot" AFTER your program parms are processed. Let's suppose 36bdb3965aSMichael Walsh that utils_x.robot contains the following: 37bdb3965aSMichael Walsh 38bdb3965aSMichael Walsh *** Variables *** 39bdb3965aSMichael Walsh ${parm_x} ${0} 40bdb3965aSMichael Walsh 41bdb3965aSMichael Walsh If your program is invoked like this: 42bdb3965aSMichael Walsh 43bdb3965aSMichael Walsh robot -v parm_x:3 file_x.robot 44bdb3965aSMichael Walsh 45bdb3965aSMichael Walsh And if your program has a python library file that invokes 46bdb3965aSMichael Walsh BuiltIn().import_resource("utils_x.robot"), then parm_x will get set to 47bdb3965aSMichael Walsh ${0}. In other words, instead of utils_x.robot serving to set a default 48bdb3965aSMichael Walsh value for parm_x, it actually causes the user's specification of 49bdb3965aSMichael Walsh "-v parm_x:3" to be overwritten. 50bdb3965aSMichael Walsh 51bdb3965aSMichael Walsh This function will remedy that problem by keeping your -v parms intact. 52bdb3965aSMichael Walsh 53bdb3965aSMichael Walsh - The problems with -v parms mentioned above are also found with variables 54bdb3965aSMichael Walsh from your file_x.robot "** Variables **" section. Namely, they may get 55bdb3965aSMichael Walsh overwritten when import_resource() is used. This function will likewise 56bdb3965aSMichael Walsh remedy that problem. 57bdb3965aSMichael Walsh 58bdb3965aSMichael Walsh """ 59bdb3965aSMichael Walsh 60bdb3965aSMichael Walsh # Retrieve the values of all current variables into a dictionary. 61bdb3965aSMichael Walsh pre_var_dict = BuiltIn().get_variables() 62bdb3965aSMichael Walsh # Do the import. 63bdb3965aSMichael Walsh BuiltIn().import_resource(path) 64bdb3965aSMichael Walsh # Once again, retrieve the values of all current variables into a 65bdb3965aSMichael Walsh # dictionary. 66bdb3965aSMichael Walsh post_var_dict = BuiltIn().get_variables() 67bdb3965aSMichael Walsh 68bdb3965aSMichael Walsh # If any variable values were changed due to the prior import, set them 69bdb3965aSMichael Walsh # back to their original values. 7036efbc04SGeorge Keishing for key, value in post_var_dict.items(): 71bdb3965aSMichael Walsh if key in pre_var_dict: 72bdb3965aSMichael Walsh if value != pre_var_dict[key]: 73bdb3965aSMichael Walsh global_var_name = re.sub("[@&]", "$", key) 74*20f38712SPatrick Williams BuiltIn().set_global_variable( 75*20f38712SPatrick Williams global_var_name, pre_var_dict[key] 76*20f38712SPatrick Williams ) 77