[pypy-svn] r29859 - in pypy/branch/objspace-config-cleanup/pypy/config: . test

guido at codespeak.net guido at codespeak.net
Sat Jul 8 18:47:49 CEST 2006


Author: guido
Date: Sat Jul  8 18:47:47 2006
New Revision: 29859

Modified:
   pypy/branch/objspace-config-cleanup/pypy/config/config.py
   pypy/branch/objspace-config-cleanup/pypy/config/pypyoption.py
   pypy/branch/objspace-config-cleanup/pypy/config/test/test_config.py
Log:
(cfbolz, guido) added optparse support on IntOption and FloatOption


Modified: pypy/branch/objspace-config-cleanup/pypy/config/config.py
==============================================================================
--- pypy/branch/objspace-config-cleanup/pypy/config/config.py	(original)
+++ pypy/branch/objspace-config-cleanup/pypy/config/config.py	Sat Jul  8 18:47:47 2006
@@ -1,4 +1,6 @@
 
+import optparse
+
 class Config(object):
     """main config
 
@@ -100,6 +102,16 @@
     def getkey(self, value):
         return value
 
+    def add_optparse_option(self, argnames, parser, config):
+        def _callback(option, opt_str, value, parser, *args, **kwargs):
+            try:
+                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)
+
 class ChoiceOption(Option):
     def __init__(self, name, doc, values, default, cmdline=None):
         super(ChoiceOption, self).__init__(name, doc, cmdline)
@@ -139,6 +151,13 @@
         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')
+        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=None):
         super(FloatOption, self).__init__(name, doc, cmdline)
@@ -157,6 +176,13 @@
         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')
+        parser.add_option(help=self.doc,
+                            action='callback', type='float', 
+                            callback=_callback, *argnames)
+
 class OptionDescription(object):
     def __init__(self, name, children):
         self._name = name
@@ -170,3 +196,16 @@
     def getkey(self, config):
         return tuple([child.getkey(getattr(config, child._name))
                       for child in self._children])
+
+def to_optparse(config, useoptions, parser=None):
+    if parser is None:
+        parser = optparse.OptionParser()
+    for path in useoptions:
+        subconf, name = config._get_by_path(path)
+        option = getattr(subconf._descr, name)
+        if option.cmdline is None:
+            chunks = ('--%s' % (path.replace('.', '-'),),)
+        else:
+            chunks = option.cmdline.split(' ')
+        option.add_optparse_option(chunks, parser, subconf)
+    return parser

Modified: pypy/branch/objspace-config-cleanup/pypy/config/pypyoption.py
==============================================================================
--- pypy/branch/objspace-config-cleanup/pypy/config/pypyoption.py	(original)
+++ pypy/branch/objspace-config-cleanup/pypy/config/pypyoption.py	Sat Jul  8 18:47:47 2006
@@ -13,7 +13,8 @@
 pypy_optiondescription = OptionDescription("pypy", [
     OptionDescription("objspace", [
         ChoiceOption("name", "Object Space name",
-                     ["std", "flow", "logic", "thunk", "cpy"], "std"),
+                     ["std", "flow", "logic", "thunk", "cpy"], "std",
+                     cmdline='--objspace -o'),
 
         ChoiceOption("parser", "parser",
                      ["pypy", "cpython"], "pypy"),

Modified: pypy/branch/objspace-config-cleanup/pypy/config/test/test_config.py
==============================================================================
--- pypy/branch/objspace-config-cleanup/pypy/config/test/test_config.py	(original)
+++ pypy/branch/objspace-config-cleanup/pypy/config/test/test_config.py	Sat Jul  8 18:47:47 2006
@@ -17,7 +17,6 @@
     descr = OptionDescription('pypy', [gcgroup, booloption, objspaceoption,
                                        wantref_option, intoption])
     return descr
-    
 
 def test_base_config():
     descr = make_description()
@@ -100,3 +99,35 @@
         assert name == gname
         assert value == gvalue
         
+def test_to_optparse():
+    gcoption = ChoiceOption('name', 'GC name', ['ref', 'framework'], 'ref',
+                                cmdline='--gc -g')
+    gcgroup = OptionDescription('gc', [gcoption])
+    descr = OptionDescription('pypy', [gcgroup])
+    config = Config(descr)
+    
+    parser = to_optparse(config, ['gc.name'])
+    (options, args) = parser.parse_args(args=['--gc=framework'])
+    
+    assert config.gc.name == 'framework'
+    
+    (options, args) = parser.parse_args(args=['-g ref'])
+    assert config.gc.name == 'ref'
+
+    # XXX strange exception
+    py.test.raises(SystemExit, 
+                    "(options, args) = parser.parse_args(args=['-g foobar'])")
+
+def test_to_optparse_number():
+    intoption = IntOption('int', 'Int option test', cmdline='--int -i')
+    floatoption = FloatOption('float', 'Float option test', 
+                                cmdline='--float -f')
+    descr = OptionDescription('test', [intoption, floatoption])
+    config = Config(descr)
+
+    parser = to_optparse(config, ['int', 'float'])
+    (options, args) = parser.parse_args(args=['-i 2', '--float=0.1'])
+
+    assert config.int == 2
+    assert config.float == 0.1
+    



More information about the Pypy-commit mailing list