1*4882a593Smuzhiyun# 2*4882a593Smuzhiyun# SPDX-License-Identifier: GPL-2.0-only 3*4882a593Smuzhiyun# 4*4882a593Smuzhiyun 5*4882a593Smuzhiyunimport json 6*4882a593Smuzhiyunimport oe.maketype 7*4882a593Smuzhiyun 8*4882a593Smuzhiyundef typed_value(key, d): 9*4882a593Smuzhiyun """Construct a value for the specified metadata variable, using its flags 10*4882a593Smuzhiyun to determine the type and parameters for construction.""" 11*4882a593Smuzhiyun var_type = d.getVarFlag(key, 'type') 12*4882a593Smuzhiyun flags = d.getVarFlags(key) 13*4882a593Smuzhiyun if flags is not None: 14*4882a593Smuzhiyun flags = dict((flag, d.expand(value)) 15*4882a593Smuzhiyun for flag, value in list(flags.items())) 16*4882a593Smuzhiyun else: 17*4882a593Smuzhiyun flags = {} 18*4882a593Smuzhiyun 19*4882a593Smuzhiyun try: 20*4882a593Smuzhiyun return oe.maketype.create(d.getVar(key) or '', var_type, **flags) 21*4882a593Smuzhiyun except (TypeError, ValueError) as exc: 22*4882a593Smuzhiyun bb.msg.fatal("Data", "%s: %s" % (key, str(exc))) 23*4882a593Smuzhiyun 24*4882a593Smuzhiyundef export2json(d, json_file, expand=True, searchString="",replaceString=""): 25*4882a593Smuzhiyun data2export = {} 26*4882a593Smuzhiyun keys2export = [] 27*4882a593Smuzhiyun 28*4882a593Smuzhiyun for key in d.keys(): 29*4882a593Smuzhiyun if key.startswith("_"): 30*4882a593Smuzhiyun continue 31*4882a593Smuzhiyun elif key.startswith("BB"): 32*4882a593Smuzhiyun continue 33*4882a593Smuzhiyun elif key.startswith("B_pn"): 34*4882a593Smuzhiyun continue 35*4882a593Smuzhiyun elif key.startswith("do_"): 36*4882a593Smuzhiyun continue 37*4882a593Smuzhiyun elif d.getVarFlag(key, "func"): 38*4882a593Smuzhiyun continue 39*4882a593Smuzhiyun 40*4882a593Smuzhiyun keys2export.append(key) 41*4882a593Smuzhiyun 42*4882a593Smuzhiyun for key in keys2export: 43*4882a593Smuzhiyun try: 44*4882a593Smuzhiyun data2export[key] = d.getVar(key, expand).replace(searchString,replaceString) 45*4882a593Smuzhiyun except bb.data_smart.ExpansionError: 46*4882a593Smuzhiyun data2export[key] = '' 47*4882a593Smuzhiyun except AttributeError: 48*4882a593Smuzhiyun pass 49*4882a593Smuzhiyun 50*4882a593Smuzhiyun with open(json_file, "w") as f: 51*4882a593Smuzhiyun json.dump(data2export, f, skipkeys=True, indent=4, sort_keys=True) 52