blob: b8901e63f526bc51f7a03611295319321c7b4c11 [file] [log] [blame]
Brad Bishop6e60e8b2018-02-01 10:27:11 -05001import json
Patrick Williamsc124f4f2015-09-15 14:41:29 -05002import oe.maketype
3
4def typed_value(key, d):
5 """Construct a value for the specified metadata variable, using its flags
6 to determine the type and parameters for construction."""
Brad Bishop6e60e8b2018-02-01 10:27:11 -05007 var_type = d.getVarFlag(key, 'type')
Patrick Williamsc124f4f2015-09-15 14:41:29 -05008 flags = d.getVarFlags(key)
9 if flags is not None:
10 flags = dict((flag, d.expand(value))
Patrick Williamsc0f7c042017-02-23 20:41:17 -060011 for flag, value in list(flags.items()))
Patrick Williamsc124f4f2015-09-15 14:41:29 -050012 else:
13 flags = {}
14
15 try:
Brad Bishop6e60e8b2018-02-01 10:27:11 -050016 return oe.maketype.create(d.getVar(key) or '', var_type, **flags)
Patrick Williamsc0f7c042017-02-23 20:41:17 -060017 except (TypeError, ValueError) as exc:
Patrick Williamsc124f4f2015-09-15 14:41:29 -050018 bb.msg.fatal("Data", "%s: %s" % (key, str(exc)))
Brad Bishop6e60e8b2018-02-01 10:27:11 -050019
20def export2json(d, json_file, expand=True, searchString="",replaceString=""):
21 data2export = {}
22 keys2export = []
23
24 for key in d.keys():
25 if key.startswith("_"):
26 continue
27 elif key.startswith("BB"):
28 continue
29 elif key.startswith("B_pn"):
30 continue
31 elif key.startswith("do_"):
32 continue
33 elif d.getVarFlag(key, "func"):
34 continue
35
36 keys2export.append(key)
37
38 for key in keys2export:
39 try:
40 data2export[key] = d.getVar(key, expand).replace(searchString,replaceString)
41 except bb.data_smart.ExpansionError:
42 data2export[key] = ''
43 except AttributeError:
44 pass
45
46 with open(json_file, "w") as f:
47 json.dump(data2export, f, skipkeys=True, indent=4, sort_keys=True)