[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