]> code.ossystems Code Review - openembedded-core.git/commitdiff
Access metadata vars as locals in python snippets
authorChris Larson <chris_larson@mentor.com>
Wed, 6 Oct 2010 02:35:23 +0000 (19:35 -0700)
committerRichard Purdie <rpurdie@linux.intel.com>
Tue, 4 Jan 2011 14:46:38 +0000 (14:46 +0000)
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>
bitbake/lib/bb/data_smart.py

index 17a642ee2d2fa9506ee3857a09b361cac470380a..3f2d42c1bb3644ba0a14e988959096dcc6805a95 100644 (file)
@@ -72,10 +72,23 @@ class VariableParse:
             self.references |= parser.references
             self.execs |= parser.execs
 
-            value = utils.better_eval(codeobj, {"d": self.d})
+            value = utils.better_eval(codeobj, DataDict(self.d))
             return str(value)
 
 
+class DataDict(dict):
+    def __init__(self, metadata, **kwargs):
+        self.metadata = metadata
+        dict.__init__(self, **kwargs)
+        self['d'] = metadata
+
+    def __missing__(self, key):
+        value = self.metadata.getVar(key, True)
+        if value is None or self.metadata.getVarFlag(key, 'func'):
+            raise KeyError(key)
+        else:
+            return value
+
 class DataSmart(MutableMapping):
     def __init__(self, special = COWDictBase.copy(), seen = COWDictBase.copy() ):
         self.dict = {}