[pypy-svn] r33123 - in pypy/branch/even-more-config2/pypy/config: . test

cfbolz at codespeak.net cfbolz at codespeak.net
Tue Oct 10 18:15:31 CEST 2006


Author: cfbolz
Date: Tue Oct 10 18:15:30 2006
New Revision: 33123

Modified:
   pypy/branch/even-more-config2/pypy/config/config.py
   pypy/branch/even-more-config2/pypy/config/test/test_config.py
Log:
make negation a bit nicer: use --without... when the option is --with...


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	Tue Oct 10 18:15:30 2006
@@ -181,9 +181,17 @@
                 config.setoption(self._name, value.strip(), who='cmdline')
             except ValueError, e:
                 raise optparse.OptionValueError(e.args[0])
-        parser.add_option(help=self.doc,
-                            action='callback', type='string',
-                            callback=_callback, *argnames)
+        option = parser.add_option(help=self.doc,
+                                   action='callback', type='string',
+                                   callback=_callback, *argnames)
+
+
+def _getnegation(optname):
+    if optname.startswith("without"):
+        return "with" + optname[len("without"):]
+    if optname.startswith("with"):
+        return "without" + optname[len("with"):]
+    return "no" + optname
 
 class BoolOption(ChoiceOption):
     def __init__(self, name, doc, default=True, requires=None,
@@ -203,22 +211,24 @@
                 config.setoption(self._name, True, who='cmdline')
             except ValueError, e:
                 raise optparse.OptionValueError(e.args[0])
-        parser.add_option(help=self.doc,
-                            action='callback',
-                            callback=_callback, *argnames)
-        no_argnames = ["--no-" + argname.lstrip("-") for argname in argnames
-                           if argname.startswith("--")]
+        option = parser.add_option(help=self.doc,
+                                   action='callback',
+                                   callback=_callback, *argnames)
+        no_argnames = ["--" + _getnegation(argname.lstrip("-"))
+                           for argname in argnames
+                               if argname.startswith("--")]
         if len(no_argnames) == 0:
-            no_argnames = ["--no-" + argname.lstrip("-")
+            no_argnames = ["--" + _getnegation(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)
+        option = parser.add_option(help="unset option set by %s" % (argname, ),
+                                   action='callback',
+                                   callback=_callback, *no_argnames)
+
         
 
 class IntOption(Option):
@@ -242,9 +252,9 @@
     def add_optparse_option(self, argnames, parser, config):
         def _callback(option, opt_str, value, parser, *args, **kwargs):
             config.setoption(self._name, value, who='cmdline')
-        parser.add_option(help=self.doc,
-                            action='callback', type='int',
-                            callback=_callback, *argnames)
+        option = parser.add_option(help=self.doc,
+                                   action='callback', type='int',
+                                   callback=_callback, *argnames)
 
 class FloatOption(Option):
     def __init__(self, name, doc, default=0.0, cmdline=DEFAULT_OPTION_NAME):
@@ -267,9 +277,9 @@
     def add_optparse_option(self, argnames, parser, config):
         def _callback(option, opt_str, value, parser, *args, **kwargs):
             config.setoption(self._name, value, who='cmdline')
-        parser.add_option(help=self.doc,
-                          action='callback', type='float',
-                          callback=_callback, *argnames)
+        option = parser.add_option(help=self.doc,
+                                   action='callback', type='float',
+                                   callback=_callback, *argnames)
 
 class OptionDescription(object):
     def __init__(self, name, doc, children, cmdline=DEFAULT_OPTION_NAME):
@@ -289,7 +299,8 @@
 
     def add_optparse_option(self, argnames, parser, config):
         for child in self._children:
-            if not isinstance(child, BoolOption):
+            if (not isinstance(child, BoolOption) or
+                child.cmdline is not DEFAULT_OPTION_NAME):
                 raise ValueError(
                     "cannot make OptionDescription %s a cmdline option" % (
                         self._name, ))
@@ -310,8 +321,9 @@
                         value, set_to, who='cmdline')
             except ValueError, e:
                 raise optparse.OptionValueError(e.args[0])
-        parser.add_option(help=self._name, action='callback', type='string',
-                          callback=_callback, *argnames)
+        option = parser.add_option(help=self.doc, action='callback',
+                                   type='string', callback=_callback,
+                                   *argnames)
 
 
 def to_optparse(config, useoptions=None, parser=None):

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	Tue Oct 10 18:15:30 2006
@@ -147,7 +147,7 @@
     booloption1 = BoolOption('bool1', 'Boolean option test', default=False,
                              cmdline='--bool1 -b')
     booloption2 = BoolOption('bool2', 'Boolean option test', default=True,
-                             cmdline='--bool2 -c')
+                             cmdline='--with-bool2 -c')
     descr = OptionDescription('test', '', [booloption1, booloption2])
     config = Config(descr)
 
@@ -159,7 +159,7 @@
 
     config = Config(descr)
     parser = to_optparse(config, ['bool1', 'bool2'])
-    (options, args) = parser.parse_args(args=['--no-bool2'])
+    (options, args) = parser.parse_args(args=['--without-bool2'])
     assert not config.bool1
     assert not config.bool2
 



More information about the Pypy-commit mailing list