[pypy-svn] r32826 - in pypy/dist/pypy/config: . test

cfbolz at codespeak.net cfbolz at codespeak.net
Mon Oct 2 17:17:35 CEST 2006


Author: cfbolz
Date: Mon Oct  2 17:17:34 2006
New Revision: 32826

Modified:
   pypy/dist/pypy/config/config.py
   pypy/dist/pypy/config/test/test_config.py
Log:
for every boolean option add an equivalent --no-... option. The help for it is
a bit strange still.


Modified: pypy/dist/pypy/config/config.py
==============================================================================
--- pypy/dist/pypy/config/config.py	(original)
+++ pypy/dist/pypy/config/config.py	Mon Oct  2 17:17:34 2006
@@ -193,7 +193,20 @@
         parser.add_option(help=self.doc,
                             action='callback',
                             callback=_callback, *argnames)
-
+        no_argnames = ["--no-" + argname.lstrip("-") for argname in argnames
+                           if argname.startswith("--")]
+        if len(no_argnames) == 0:
+            no_argnames = ["--no-" + argname.lstrip("-")
+                               for argname in argnames]
+        def _callback(option, opt_str, value, parser, *args, **kwargs):
+            try:
+                config.setoption(self._name, False, who='cmdline')
+            except ValueError, e:
+                raise optparse.OptionValueError(e.args[0])
+        parser.add_option(help="unset option set by %s" % (argnames[0], ),
+                            action='callback',
+                            callback=_callback, *no_argnames)
+        
 class IntOption(Option):
     def __init__(self, name, doc, default=0, cmdline=DEFAULT_OPTION_NAME):
         super(IntOption, self).__init__(name, doc, cmdline)

Modified: pypy/dist/pypy/config/test/test_config.py
==============================================================================
--- pypy/dist/pypy/config/test/test_config.py	(original)
+++ pypy/dist/pypy/config/test/test_config.py	Mon Oct  2 17:17:34 2006
@@ -131,24 +131,28 @@
     assert config.int == 2
     assert config.float == 0.1
     
-    py.test.raises(SystemExit, 
+    py.test.raises(SystemExit,
         "(options, args) = parser.parse_args(args=['--int=foo', '-f bar'])")
     
 def test_to_optparse_bool():
-    booloption = BoolOption('bool', 'Boolean option test', default=False,
-                            cmdline='--bool -b')
-    descr = OptionDescription('test', '', [booloption])
+    booloption1 = BoolOption('bool1', 'Boolean option test', default=False,
+                             cmdline='--bool1 -b')
+    booloption2 = BoolOption('bool2', 'Boolean option test', default=True,
+                             cmdline='--bool2 -c')
+    descr = OptionDescription('test', '', [booloption1, booloption2])
     config = Config(descr)
 
-    parser = to_optparse(config, ['bool'])
+    parser = to_optparse(config, ['bool1', 'bool2'])
     (options, args) = parser.parse_args(args=['-b'])
 
-    assert config.bool
+    assert config.bool1
+    assert config.bool2
 
     config = Config(descr)
-    parser = to_optparse(config, ['bool'])
-    (options, args) = parser.parse_args(args=[])
-    assert not config.bool
+    parser = to_optparse(config, ['bool1', 'bool2'])
+    (options, args) = parser.parse_args(args=['--no-bool2'])
+    assert not config.bool1
+    assert not config.bool2
 
     py.test.raises(SystemExit,
             "(options, args) = parser.parse_args(args=['-bfoo'])")


More information about the pypy-svn mailing list