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:
committed by
Richard Purdie
parent
a9d2012f50
commit
8b74f2ca55
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user