blob: 37121cfad2b7138e9c6000c98efba5c360023ed5 [file] [log] [blame]
Brad Bishopc342db32019-05-15 21:57:59 -04001#
Patrick Williams92b42cb2022-09-03 06:53:57 -05002# Copyright OpenEmbedded Contributors
3#
Brad Bishopc342db32019-05-15 21:57:59 -04004# SPDX-License-Identifier: GPL-2.0-only
5#
6
Brad Bishop6e60e8b2018-02-01 10:27:11 -05007import json
Patrick Williamsc124f4f2015-09-15 14:41:29 -05008import oe.maketype
9
10def typed_value(key, d):
11 """Construct a value for the specified metadata variable, using its flags
12 to determine the type and parameters for construction."""
Brad Bishop6e60e8b2018-02-01 10:27:11 -050013 var_type = d.getVarFlag(key, 'type')
Patrick Williamsc124f4f2015-09-15 14:41:29 -050014 flags = d.getVarFlags(key)
15 if flags is not None:
16 flags = dict((flag, d.expand(value))
Patrick Williamsc0f7c042017-02-23 20:41:17 -060017 for flag, value in list(flags.items()))
Patrick Williamsc124f4f2015-09-15 14:41:29 -050018 else:
19 flags = {}
20
21 try:
Brad Bishop6e60e8b2018-02-01 10:27:11 -050022 return oe.maketype.create(d.getVar(key) or '', var_type, **flags)
Patrick Williamsc0f7c042017-02-23 20:41:17 -060023 except (TypeError, ValueError) as exc:
Patrick Williamsc124f4f2015-09-15 14:41:29 -050024 bb.msg.fatal("Data", "%s: %s" % (key, str(exc)))
Brad Bishop6e60e8b2018-02-01 10:27:11 -050025
26def export2json(d, json_file, expand=True, searchString="",replaceString=""):
27 data2export = {}
28 keys2export = []
29
30 for key in d.keys():
31 if key.startswith("_"):
32 continue
33 elif key.startswith("BB"):
34 continue
35 elif key.startswith("B_pn"):
36 continue
37 elif key.startswith("do_"):
38 continue
39 elif d.getVarFlag(key, "func"):
40 continue
41
42 keys2export.append(key)
43
44 for key in keys2export:
45 try:
46 data2export[key] = d.getVar(key, expand).replace(searchString,replaceString)
47 except bb.data_smart.ExpansionError:
48 data2export[key] = ''
49 except AttributeError:
50 pass
51
52 with open(json_file, "w") as f:
53 json.dump(data2export, f, skipkeys=True, indent=4, sort_keys=True)