xref: /OK3568_Linux_fs/yocto/poky/meta/lib/oe/data.py (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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