[pypy-svn] r33154 - in pypy/branch/even-more-config2/pypy/config: . test
cfbolz at codespeak.net
cfbolz at codespeak.net
Wed Oct 11 13:51:27 CEST 2006
Author: cfbolz
Date: Wed Oct 11 13:51:27 2006
New Revision: 33154
Modified:
pypy/branch/even-more-config2/pypy/config/config.py
pypy/branch/even-more-config2/pypy/config/test/test_config.py
Log:
add a StrOption
Modified: pypy/branch/even-more-config2/pypy/config/config.py
==============================================================================
--- pypy/branch/even-more-config2/pypy/config/config.py (original)
+++ pypy/branch/even-more-config2/pypy/config/config.py Wed Oct 11 13:51:27 2006
@@ -284,6 +284,31 @@
action='callback', type='float',
callback=_callback, *argnames)
+class StrOption(Option):
+ def __init__(self, name, doc, default='', cmdline=DEFAULT_OPTION_NAME):
+ super(StrOption, self).__init__(name, doc, cmdline)
+ self.default = default
+
+ def validate(self, value):
+ try:
+ str(value)
+ except TypeError:
+ return False
+ return True
+
+ def setoption(self, config, value):
+ try:
+ super(StrOption, self).setoption(config, str(value))
+ except TypeError, e:
+ raise ValueError(*e.args)
+
+ def add_optparse_option(self, argnames, parser, config):
+ def _callback(option, opt_str, value, parser, *args, **kwargs):
+ config.setoption(self._name, value, who='cmdline')
+ option = parser.add_option(help=self.doc,
+ action='callback', type='str',
+ callback=_callback, *argnames)
+
class OptionDescription(object):
def __init__(self, name, doc, children, cmdline=DEFAULT_OPTION_NAME):
self._name = name
Modified: pypy/branch/even-more-config2/pypy/config/test/test_config.py
==============================================================================
--- pypy/branch/even-more-config2/pypy/config/test/test_config.py (original)
+++ pypy/branch/even-more-config2/pypy/config/test/test_config.py Wed Oct 11 13:51:27 2006
@@ -9,6 +9,7 @@
booloption = BoolOption('bool', 'Test boolean option')
intoption = IntOption('int', 'Test int option')
floatoption = FloatOption('float', 'Test float option', default=2.3)
+ stroption = StrOption('str', 'Test string option', default="abc")
wantref_option = BoolOption('wantref', 'Test requires', default=False,
requires=[('gc.name', 'ref')])
@@ -18,7 +19,7 @@
gcgroup = OptionDescription('gc', '', [gcoption, gcdummy, floatoption])
descr = OptionDescription('pypy', '', [gcgroup, booloption, objspaceoption,
- wantref_option,
+ wantref_option, stroption,
wantframework_option,
intoption])
return descr
@@ -44,6 +45,10 @@
assert not config.wantref
+ assert config.str == "abc"
+ config.str = "def"
+ assert config.str == "def"
+
py.test.raises(ValueError, 'config.objspace = "foo"')
py.test.raises(ValueError, 'config.gc.name = "foo"')
py.test.raises(AttributeError, 'config.gc.foo = "bar"')
@@ -201,11 +206,12 @@
config = Config(descr)
assert config.getpaths() == ['gc.name', 'gc.dummy', 'gc.float', 'bool',
- 'objspace', 'wantref', 'wantframework', 'int']
+ 'objspace', 'wantref', 'str', 'wantframework',
+ 'int']
assert config.gc.getpaths() == ['name', 'dummy', 'float']
assert config.getpaths(include_groups=True) == [
'gc', 'gc.name', 'gc.dummy', 'gc.float',
- 'bool', 'objspace', 'wantref', 'wantframework', 'int']
+ 'bool', 'objspace', 'wantref', 'str', 'wantframework', 'int']
def test_none():
dummy1 = BoolOption('dummy1', 'doc dummy', default=False, cmdline=None)
More information about the Pypy-commit
mailing list