diff options
-rw-r--r-- | bitbake/lib/bb/filter.py | 7 | ||||
-rw-r--r-- | bitbake/lib/bb/tests/filter.py | 8 |
2 files changed, 15 insertions, 0 deletions
diff --git a/bitbake/lib/bb/filter.py b/bitbake/lib/bb/filter.py index a33c4d44986..6b98225ab12 100644 --- a/bitbake/lib/bb/filter.py +++ b/bitbake/lib/bb/filter.py @@ -4,6 +4,7 @@ # SPDX-License-Identifier: GPL-2.0-only # +import json import builtins # A select initial set of builtins that are supported in filter expressions @@ -14,6 +15,7 @@ ALLOWED_BUILTINS = ( "bool", "chr", "enumerate", + "eval", "float", "format", "hex", @@ -107,3 +109,8 @@ def remove(val, remove, sep=None): if not sep: return " ".join(new) return sep.join(new) + + +@filter_proc() +def from_json(val): + return json.loads(val) diff --git a/bitbake/lib/bb/tests/filter.py b/bitbake/lib/bb/tests/filter.py index 62470e4f188..7b81f177121 100644 --- a/bitbake/lib/bb/tests/filter.py +++ b/bitbake/lib/bb/tests/filter.py @@ -109,3 +109,11 @@ class BuiltinFilterTest(unittest.TestCase): "remove(v, ['2'], '\\n') \n remove(v, ['1'], '\\n')", ) self.assertEqual(val, "3\n") + + def test_eval(self): + val = bb.filter.apply_filters("{'a': 123}", ["eval(v)"]) + self.assertEqual(val, {"a": 123}) + + def test_from_json(self): + val = bb.filter.apply_filters('{"a": 123}', ["from_json(v)"]) + self.assertEqual(val, {"a": 123}) |