diff options
author | Steven Knight <knight@baldmt.com> | 2004-11-23 18:03:51 (GMT) |
---|---|---|
committer | Steven Knight <knight@baldmt.com> | 2004-11-23 18:03:51 (GMT) |
commit | aecc084531f05e110277d52d560b3e3c17fbf09a (patch) | |
tree | 63602bf0f3d05e3db2f3fb295f530302d6463b46 /src | |
parent | 9ee53a60a770d6f5a33624405d35ad4063378367 (diff) | |
download | SCons-aecc084531f05e110277d52d560b3e3c17fbf09a.zip SCons-aecc084531f05e110277d52d560b3e3c17fbf09a.tar.gz SCons-aecc084531f05e110277d52d560b3e3c17fbf09a.tar.bz2 |
Add the ability to map keywords to ListOption (like we already do with EnumOption).
Diffstat (limited to 'src')
-rw-r--r-- | src/CHANGES.txt | 3 | ||||
-rw-r--r-- | src/engine/SCons/Options/ListOption.py | 12 | ||||
-rw-r--r-- | src/engine/SCons/Options/ListOptionTests.py | 10 |
3 files changed, 17 insertions, 8 deletions
diff --git a/src/CHANGES.txt b/src/CHANGES.txt index 62d691a..48483d1 100644 --- a/src/CHANGES.txt +++ b/src/CHANGES.txt @@ -139,6 +139,9 @@ RELEASE 0.97 - XXX $SHF90COMSTR, $SHF95COMSTR, $SHFORTRANCOMSTR, $SHLINKCOMSTR and $YACCCOMSTR. + - Add an optional "map" keyword argument to ListOption() that takes a + dictionary to map user-specified values to legal values from the list + (like EnumOption() already doee). From Wayne Lee: diff --git a/src/engine/SCons/Options/ListOption.py b/src/engine/SCons/Options/ListOption.py index 903d52b..d14b22a 100644 --- a/src/engine/SCons/Options/ListOption.py +++ b/src/engine/SCons/Options/ListOption.py @@ -89,7 +89,7 @@ class _ListOption(UserList.UserList): def __repr__(self): return self.__str__() -def _converter(val, allowedElems): +def _converter(val, allowedElems, mapdict): """ """ if val == 'none': @@ -98,10 +98,8 @@ def _converter(val, allowedElems): val = allowedElems else: val = filter(None, string.split(val, ',')) - notAllowed = [] - for v in val: - if not v in allowedElems: - notAllowed.append(v) + val = map(lambda v, m=mapdict: m.get(v, v), val) + notAllowed = filter(lambda v, aE=allowedElems: not v in aE, val) if notAllowed: raise ValueError("Invalid value(s) for option: %s" % string.join(notAllowed, ',')) @@ -115,7 +113,7 @@ def _converter(val, allowedElems): ## return 1 -def ListOption(key, help, default, names): +def ListOption(key, help, default, names, map={}): """ The input parameters describe a 'package list' option, thus they are returned with the correct converter and validater appended. The @@ -132,4 +130,4 @@ def ListOption(key, help, default, names): '\n ') return (key, help, default, None, #_validator, - lambda val, elems=names: _converter(val, elems)) + lambda val, elems=names, m=map: _converter(val, elems, m)) diff --git a/src/engine/SCons/Options/ListOptionTests.py b/src/engine/SCons/Options/ListOptionTests.py index ec604f8..a892e18 100644 --- a/src/engine/SCons/Options/ListOptionTests.py +++ b/src/engine/SCons/Options/ListOptionTests.py @@ -56,7 +56,8 @@ class ListOptionTestCase(unittest.TestCase): """Test the ListOption converter""" opts = SCons.Options.Options() opts.Add(SCons.Options.ListOption('test', 'test option help', 'all', - ['one', 'two', 'three'])) + ['one', 'two', 'three'], + {'ONE':'one', 'TWO':'two'})) o = opts.options[0] @@ -68,9 +69,13 @@ class ListOptionTestCase(unittest.TestCase): x = o.converter('one') assert str(x) == 'one', x + x = o.converter('ONE') + assert str(x) == 'one', x x = o.converter('two') assert str(x) == 'two', x + x = o.converter('TWO') + assert str(x) == 'two', x x = o.converter('three') assert str(x) == 'three', x @@ -96,6 +101,9 @@ class ListOptionTestCase(unittest.TestCase): x = o.converter('three,two,one') assert str(x) == 'all', x + x = o.converter('three,ONE,TWO') + assert str(x) == 'all', x + caught = None try: x = o.converter('no_match') |