xref: /OK3568_Linux_fs/yocto/poky/meta/lib/oe/data.py (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1#
2# SPDX-License-Identifier: GPL-2.0-only
3#
4
5import json
6import 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."""
11    var_type = d.getVarFlag(key, 'type')
12    flags = d.getVarFlags(key)
13    if flags is not None:
14        flags = dict((flag, d.expand(value))
15                     for flag, value in list(flags.items()))
16    else:
17        flags = {}
18
19    try:
20        return oe.maketype.create(d.getVar(key) or '', var_type, **flags)
21    except (TypeError, ValueError) as exc:
22        bb.msg.fatal("Data", "%s: %s" % (key, str(exc)))
23
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)
52