[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