Option.force_default() -> opt value returns the default value

This commit is contained in:
gwen
2012-08-13 16:06:02 +02:00
parent 7006091c9c
commit 11b2edd07d
8 changed files with 123 additions and 86 deletions

View File

@ -245,8 +245,8 @@ class Config(object):
else:
_result = result
return _result
# mandatory options
if not isinstance(opt_or_descr, OptionDescription):
# mandatory options
homeconfig = self._cfgimpl_get_toplevel()
mandatory = homeconfig._cfgimpl_mandatory
if opt_or_descr.is_mandatory() and mandatory:
@ -254,6 +254,10 @@ class Config(object):
and opt_or_descr.getdefault() == None:
raise MandatoryError("option: {0} is mandatory "
"and shall have a value".format(name))
# frozen and force default
if opt_or_descr.is_forced_on_freeze():
return opt_or_descr.getdefault()
return self._cfgimpl_values[name]
def __dir__(self):

View File

@ -83,6 +83,7 @@ class Multi(list):
class Option(HiddenBaseType, DisabledBaseType):
#reminder: an Option object is **not** a container for the value
_frozen = False
_force_default_on_freeze = False
def __init__(self, name, doc, default=None, default_multi=None,
requires=None, mandatory=False, multi=False, callback=None,
callback_params=None):
@ -141,6 +142,15 @@ class Option(HiddenBaseType, DisabledBaseType):
def getdefault(self):
return self.default
def force_default(self):
self._force_default_on_freeze = True
def is_forced_on_freeze(self):
if self._frozen and self._force_default_on_freeze:
return True
else:
return False
def getdoc(self):
return self.doc
@ -372,7 +382,8 @@ class ArbitraryOption(Option):
return self.default
class OptionDescription(HiddenBaseType, DisabledBaseType):
group_type = 'default'
def __init__(self, name, doc, children, requires=None):
self._name = name
self.doc = doc
@ -380,8 +391,7 @@ class OptionDescription(HiddenBaseType, DisabledBaseType):
self._requires = requires
self._build()
self.properties = [] # 'hidden', 'disabled'...
self.group_type = 'default'
def getdoc(self):
return self.doc