1
0
mirror of https://git.yoctoproject.org/poky synced 2026-06-01 00:59:48 +00:00

bitbake: data_smart: check for python builtins directly for context lookup

This avoids the need to hardcode a list of python builtins. This also slightly changes behavior, in a case like `${@eval("3")}`, this will ensure we always call the builtin, even if the metadata has an 'eval' variable defined.

(Bitbake rev: 9976ae50677b333d646ca0fd395468bd2301d03f)

Signed-off-by: Christopher Larson <kergoth@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Christopher Larson
2022-03-17 15:29:11 -07:00
committed by Richard Purdie
parent a9d2012f50
commit 8b74f2ca55
+8 -4
View File
@@ -16,7 +16,10 @@ BitBake build tools.
# #
# Based on functions from the base bb module, Copyright 2003 Holger Schurig # Based on functions from the base bb module, Copyright 2003 Holger Schurig
import copy, re, sys, traceback import builtins
import copy
import re
import sys
from collections.abc import MutableMapping from collections.abc import MutableMapping
import logging import logging
import hashlib import hashlib
@@ -150,17 +153,18 @@ class VariableParse:
value = utils.better_eval(codeobj, DataContext(self.d), {'d' : self.d}) value = utils.better_eval(codeobj, DataContext(self.d), {'d' : self.d})
return str(value) return str(value)
class DataContext(dict): class DataContext(dict):
excluded = set([i for i in dir(builtins) if not i.startswith('_')] + ['bb', 'os', 'oe'])
def __init__(self, metadata, **kwargs): def __init__(self, metadata, **kwargs):
self.metadata = metadata self.metadata = metadata
dict.__init__(self, **kwargs) dict.__init__(self, **kwargs)
self['d'] = metadata self['d'] = metadata
def __missing__(self, key): def __missing__(self, key):
# Skip commonly accessed invalid variables if key in self.excluded:
if key in ['bb', 'oe', 'int', 'bool', 'time', 'str', 'os']:
raise KeyError(key) raise KeyError(key)
value = self.metadata.getVar(key) value = self.metadata.getVar(key)
if value is None or self.metadata.getVarFlag(key, 'func', False): if value is None or self.metadata.getVarFlag(key, 'func', False):
raise KeyError(key) raise KeyError(key)