blob: 602130a9046b3c8f28b8f0b3bfe9af855eb01c15 [file] [log] [blame]
Brad Bishopc342db32019-05-15 21:57:59 -04001#
2# SPDX-License-Identifier: GPL-2.0-only
3#
4
Brad Bishop6e60e8b2018-02-01 10:27:11 -05005import json
Patrick Williamsc124f4f2015-09-15 14:41:29 -05006import oe.maketype
7
8def typed_value(key, d):
9 """Construct a value for the specified metadata variable, using its flags
10 to determine the type and parameters for construction."""
Brad Bishop6e60e8b2018-02-01 10:27:11 -050011 var_type = d.getVarFlag(key, 'type')
Patrick Williamsc124f4f2015-09-15 14:41:29 -050012 flags = d.getVarFlags(key)
13 if flags is not None:
14 flags = dict((flag, d.expand(value))
Patrick Williamsc0f7c042017-02-23 20:41:17 -060015 for flag, value in list(flags.items()))
Patrick Williamsc124f4f2015-09-15 14:41:29 -050016 else:
17 flags = {}
18
19 try:
Brad Bishop6e60e8b2018-02-01 10:27:11 -050020 return oe.maketype.create(d.getVar(key) or '', var_type, **flags)
Patrick Williamsc0f7c042017-02-23 20:41:17 -060021 except (TypeError, ValueError) as exc:
Patrick Williamsc124f4f2015-09-15 14:41:29 -050022 bb.msg.fatal("Data", "%s: %s" % (key, str(exc)))
Brad Bishop6e60e8b2018-02-01 10:27:11 -050023
24def export2json(d, json_file, expand=True, searchString="",replaceString=""):
25 data2export = {}
26 keys2export = []
27
28 for key in d.keys():
29 if key.startswith("_"):
30 continue
31 elif key.startswith("BB"):
32 continue
33 elif key.startswith("B_pn"):
34 continue
35 elif key.startswith("do_"):
36 continue
37 elif d.getVarFlag(key, "func"):
38 continue
39
40 keys2export.append(key)
41
42 for key in keys2export:
43 try:
44 data2export[key] = d.getVar(key, expand).replace(searchString,replaceString)
45 except bb.data_smart.ExpansionError:
46 data2export[key] = ''
47 except AttributeError:
48 pass
49
50 with open(json_file, "w") as f:
51 json.dump(data2export, f, skipkeys=True, indent=4, sort_keys=True)