1#!/usr/bin/env python 2 3r""" 4Define variable manipulation functions. 5""" 6 7import os 8 9try: 10 from robot.utils import DotDict 11except ImportError: 12 pass 13 14import collections 15 16import gen_print as gp 17import gen_misc as gm 18 19 20def create_var_dict(*args): 21 22 r""" 23 Create a dictionary whose keys/values are the arg names/arg values passed 24 to it and return it to the caller. 25 26 Note: The resulting dictionary will be ordered. 27 28 Description of argument(s): 29 *args An unlimited number of arguments to be processed. 30 31 Example use: 32 33 first_name = 'Steve' 34 last_name = 'Smith' 35 var_dict = create_var_dict(first_name, last_name) 36 37 gp.print_var(var_dict) 38 39 The print-out of the resulting var dictionary is: 40 var_dict: 41 var_dict[first_name]: Steve 42 var_dict[last_name]: Smith 43 """ 44 45 try: 46 result_dict = collections.OrderedDict() 47 except AttributeError: 48 result_dict = DotDict() 49 50 arg_num = 1 51 for arg in args: 52 arg_name = gp.get_arg_name(None, arg_num, stack_frame_ix=2) 53 result_dict[arg_name] = arg 54 arg_num += 1 55 56 return result_dict 57 58 59default_record_delim = ':' 60default_key_val_delim = '.' 61 62 63def join_dict(dict, 64 record_delim=default_record_delim, 65 key_val_delim=default_key_val_delim): 66 67 r""" 68 Join a dictionary's keys and values into a string and return the string. 69 70 Description of argument(s): 71 dict The dictionary whose keys and values are 72 to be joined. 73 record_delim The delimiter to be used to separate 74 dictionary pairs in the resulting string. 75 key_val_delim The delimiter to be used to separate keys 76 from values in the resulting string. 77 78 Example use: 79 80 gp.print_var(var_dict) 81 str1 = join_dict(var_dict) 82 gp.pvar(str1) 83 84 Program output. 85 var_dict: 86 var_dict[first_name]: Steve 87 var_dict[last_name]: Smith 88 str1: 89 first_name.Steve:last_name.Smith 90 """ 91 92 format_str = '%s' + key_val_delim + '%s' 93 return record_delim.join([format_str % (key, value) for (key, value) in 94 dict.items()]) 95 96 97def split_to_dict(string, 98 record_delim=default_record_delim, 99 key_val_delim=default_key_val_delim): 100 101 r""" 102 Split a string into a dictionary and return it. 103 104 This function is the complement to join_dict. 105 106 Description of argument(s): 107 string The string to be split into a dictionary. 108 The string must have the proper delimiters 109 in it. A string created by join_dict 110 would qualify. 111 record_delim The delimiter to be used to separate 112 dictionary pairs in the input string. 113 key_val_delim The delimiter to be used to separate 114 keys/values in the input string. 115 116 Example use: 117 118 gp.print_var(str1) 119 new_dict = split_to_dict(str1) 120 gp.print_var(new_dict) 121 122 123 Program output. 124 str1: 125 first_name.Steve:last_name.Smith 126 new_dict: 127 new_dict[first_name]: Steve 128 new_dict[last_name]: Smith 129 """ 130 131 try: 132 result_dict = collections.OrderedDict() 133 except AttributeError: 134 result_dict = DotDict() 135 136 raw_keys_values = string.split(record_delim) 137 for key_value in raw_keys_values: 138 key_value_list = key_value.split(key_val_delim) 139 try: 140 result_dict[key_value_list[0]] = key_value_list[1] 141 except IndexError: 142 result_dict[key_value_list[0]] = "" 143 144 return result_dict 145 146 147def create_file_path(file_name_dict, 148 dir_path="/tmp/", 149 file_suffix=""): 150 151 r""" 152 Create a file path using the given parameters and return it. 153 154 Description of argument(s): 155 file_name_dict A dictionary with keys/values which are to 156 appear as part of the file name. 157 dir_path The dir_path that is to appear as part of 158 the file name. 159 file_suffix A suffix to be included as part of the 160 file name. 161 """ 162 163 dir_path = gm.add_trailing_slash(dir_path) 164 return dir_path + join_dict(file_name_dict) + file_suffix 165 166 167def parse_file_path(file_path): 168 169 r""" 170 Parse a file path created by create_file_path and return the result as a 171 dictionary. 172 173 This function is the complement to create_file_path. 174 175 Description of argument(s): 176 file_path The file_path. 177 178 Example use: 179 gp.pvar(boot_results_file_path) 180 file_path_data = parse_file_path(boot_results_file_path) 181 gp.pvar(file_path_data) 182 183 Program output. 184 185 boot_results_file_path: 186 /tmp/pgm_name.obmc_boot_test:openbmc_nickname.beye6:master_pid.2039:boot_re 187 sults 188 file_path_data: 189 file_path_data[dir_path]: /tmp/ 190 file_path_data[pgm_name]: obmc_boot_test 191 file_path_data[openbmc_nickname]: beye6 192 file_path_data[master_pid]: 2039 193 file_path_data[boot_results]: 194 """ 195 196 try: 197 result_dict = collections.OrderedDict() 198 except AttributeError: 199 result_dict = DotDict() 200 201 dir_path = os.path.dirname(file_path) + os.sep 202 file_path = os.path.basename(file_path) 203 204 result_dict['dir_path'] = dir_path 205 206 result_dict.update(split_to_dict(file_path)) 207 208 return result_dict 209