[pypy-svn] r33374 - in pypy/branch/even-more-config3/pypy/config: . test

cfbolz at codespeak.net cfbolz at codespeak.net
Tue Oct 17 15:48:57 CEST 2006


Author: cfbolz
Date: Tue Oct 17 15:48:56 2006
New Revision: 33374

Modified:
   pypy/branch/even-more-config3/pypy/config/config.py
   pypy/branch/even-more-config3/pypy/config/test/test_config.py
Log:
(pedronis, cfbolz): refactor setoption to always take a 'who' argument. The
change owner of a required option is now the same as the owner of the original
change.


Modified: pypy/branch/even-more-config3/pypy/config/config.py
==============================================================================
--- pypy/branch/even-more-config3/pypy/config/config.py	(original)
+++ pypy/branch/even-more-config3/pypy/config/config.py	Tue Oct 17 15:48:56 2006
@@ -29,8 +29,7 @@
     def override(self, overrides):
         for name, value in overrides.iteritems():
             homeconfig, name = self._cfgimpl_get_home_by_path(name)
-            setattr(homeconfig, name, value)
-            homeconfig._cfgimpl_value_owners[name] = 'default'
+            homeconfig.setoption(name, value, 'default')
 
     def __setattr__(self, name, value):
         if self._cfgimpl_frozen and getattr(self, name) != value:
@@ -55,12 +54,9 @@
         if oldvalue != value and oldowner != "default":
             raise ValueError('can not override value %s for option %s' %
                                 (value, name))
-        child.setoption(self, value)
+        child.setoption(self, value, who)
         self._cfgimpl_value_owners[name] = who
 
-    def require(self, name, value):
-        self.setoption(name, value, "required")
-
     def set(self, **kwargs):
         all_paths = [p.split(".") for p in self.getpaths()]
         for key, value in kwargs.iteritems():
@@ -164,7 +160,7 @@
     def getdefault(self):
         return self.default
 
-    def setoption(self, config, value):
+    def setoption(self, config, value, who):
         name = self._name
         if not self.validate(value):
             raise ValueError('invalid value %s for option %s' % (value, name))
@@ -186,13 +182,13 @@
             requires = {}
         self._requires = requires
 
-    def setoption(self, config, value):
+    def setoption(self, config, value, who):
         name = self._name
         for path, reqvalue in self._requires.get(value, []):
             toplevel = config._cfgimpl_get_toplevel()
             homeconfig, name = toplevel._cfgimpl_get_home_by_path(path)
-            homeconfig.require(name, reqvalue)
-        super(ChoiceOption, self).setoption(config, value)
+            homeconfig.setoption(name, reqvalue, who)
+        super(ChoiceOption, self).setoption(config, value, who)
 
     def validate(self, value):
         return value is None or value in self.values
@@ -268,9 +264,9 @@
             return False
         return True
 
-    def setoption(self, config, value):
+    def setoption(self, config, value, who):
         try:
-            super(IntOption, self).setoption(config, int(value))
+            super(IntOption, self).setoption(config, int(value), who)
         except TypeError, e:
             raise ValueError(*e.args)
 
@@ -293,9 +289,9 @@
             return False
         return True
 
-    def setoption(self, config, value):
+    def setoption(self, config, value, who):
         try:
-            super(FloatOption, self).setoption(config, float(value))
+            super(FloatOption, self).setoption(config, float(value), who)
         except TypeError, e:
             raise ValueError(*e.args)
 
@@ -318,9 +314,9 @@
             return False
         return True
 
-    def setoption(self, config, value):
+    def setoption(self, config, value, who):
         try:
-            super(StrOption, self).setoption(config, str(value))
+            super(StrOption, self).setoption(config, str(value), who)
         except TypeError, e:
             raise ValueError(*e.args)
 

Modified: pypy/branch/even-more-config3/pypy/config/test/test_config.py
==============================================================================
--- pypy/branch/even-more-config3/pypy/config/test/test_config.py	(original)
+++ pypy/branch/even-more-config3/pypy/config/test/test_config.py	Tue Oct 17 15:48:56 2006
@@ -309,6 +309,20 @@
     assert not config.b2
     print config._cfgimpl_value_owners
 
+def test_overrides_require_as_default():
+    descr = OptionDescription("test", "", [
+        ChoiceOption("backend", "", ['c', 'cli'], 'c',
+                     requires={'c': [('type_system', 'll')],
+                               'cli': [('type_system', 'oo')]}),
+        ChoiceOption("type_system", "", ['ll', 'oo'], 'll')
+        ])
+    config = Config(descr, backend='c')
+    config.set(backend=None, type_system=None)
+    config = Config(descr, backend='c')
+    config.set(backend='cli')
+    assert config.backend == 'cli'
+    assert config.type_system == 'oo'
+    
 def test_str():
     descr = make_description()
     c = Config(descr)



More information about the Pypy-commit mailing list