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