summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bitbake/lib/bb/filter.py7
-rw-r--r--bitbake/lib/bb/tests/filter.py8
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})