[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