diff options
| author | Chris Larson <chris_larson@mentor.com> | 2010-10-05 19:35:23 -0700 |
|---|---|---|
| committer | Richard Purdie <rpurdie@linux.intel.com> | 2011-01-04 14:46:38 +0000 |
| commit | 283b0a20c2a9bfa27966e10f40669cbe904b7080 (patch) | |
| tree | bf0946ca363c9f9a9d5b7217df0782e904b37c90 /bitbake/lib/bb/data_smart.py | |
| parent | f3406dd28846f4782bec36cb0bd1f834e068147b (diff) | |
| download | poky-283b0a20c2a9bfa27966e10f40669cbe904b7080.tar.gz | |
Access metadata vars as locals in python snippets
Example:
FOO = "bar"
BAR = "${@FOO + '/baz'}"
${BAR} == "bar/baz"
(Bitbake rev: 606fa1fd97cbd47a6a7ebdc7a2e6aa93a8f65cf5)
Signed-off-by: Chris Larson <chris_larson@mentor.com>
Signed-off-by: Richard Purdie <rpurdie@linux.intel.com>
Diffstat (limited to 'bitbake/lib/bb/data_smart.py')
| -rw-r--r-- | bitbake/lib/bb/data_smart.py | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/bitbake/lib/bb/data_smart.py b/bitbake/lib/bb/data_smart.py index 17a642ee2d..3f2d42c1bb 100644 --- a/bitbake/lib/bb/data_smart.py +++ b/bitbake/lib/bb/data_smart.py | |||
| @@ -72,10 +72,23 @@ class VariableParse: | |||
| 72 | self.references |= parser.references | 72 | self.references |= parser.references |
| 73 | self.execs |= parser.execs | 73 | self.execs |= parser.execs |
| 74 | 74 | ||
| 75 | value = utils.better_eval(codeobj, {"d": self.d}) | 75 | value = utils.better_eval(codeobj, DataDict(self.d)) |
| 76 | return str(value) | 76 | return str(value) |
| 77 | 77 | ||
| 78 | 78 | ||
| 79 | class DataDict(dict): | ||
| 80 | def __init__(self, metadata, **kwargs): | ||
| 81 | self.metadata = metadata | ||
| 82 | dict.__init__(self, **kwargs) | ||
| 83 | self['d'] = metadata | ||
| 84 | |||
| 85 | def __missing__(self, key): | ||
| 86 | value = self.metadata.getVar(key, True) | ||
| 87 | if value is None or self.metadata.getVarFlag(key, 'func'): | ||
| 88 | raise KeyError(key) | ||
| 89 | else: | ||
| 90 | return value | ||
| 91 | |||
| 79 | class DataSmart(MutableMapping): | 92 | class DataSmart(MutableMapping): |
| 80 | def __init__(self, special = COWDictBase.copy(), seen = COWDictBase.copy() ): | 93 | def __init__(self, special = COWDictBase.copy(), seen = COWDictBase.copy() ): |
| 81 | self.dict = {} | 94 | self.dict = {} |
