force_metaconfig_on_freeze in option (not in config)
This commit is contained in:
@ -93,6 +93,20 @@ class Values(object):
|
||||
# and return it
|
||||
return value
|
||||
|
||||
def force_to_metaconfig(self, option_bag):
|
||||
# force_metaconfig_on_freeze in config => to metaconfig
|
||||
# force_metaconfig_on_freeze in option + config is kernelconfig => to metaconfig
|
||||
settings = option_bag.config_bag.context.cfgimpl_get_settings()
|
||||
if 'force_metaconfig_on_freeze' in option_bag.properties:
|
||||
settings = option_bag.config_bag.context.cfgimpl_get_settings()
|
||||
if 'force_metaconfig_on_freeze' in option_bag.option.impl_getproperties() and \
|
||||
not settings._p_.getproperties(option_bag.path, frozenset()):
|
||||
# if force_metaconfig_on_freeze is only in option (not in config)
|
||||
return option_bag.config_bag.context.impl_type == 'config'
|
||||
else:
|
||||
return True
|
||||
return False
|
||||
|
||||
def getvalue(self,
|
||||
option_bag):
|
||||
"""actually retrieves the value
|
||||
@ -116,10 +130,7 @@ class Values(object):
|
||||
with_value=True)
|
||||
if owner != owners.default and \
|
||||
not ('frozen' in option_bag.properties and 'force_default_on_freeze' in option_bag.properties) and \
|
||||
not ('frozen' in option_bag.properties and 'force_metaconfig_on_freeze' in option_bag.properties):
|
||||
# if a value is store in storage, check if not frozen + force_default_on_freeze
|
||||
# if frozen + force_default_on_freeze => force default value
|
||||
# if frozen + force_metaconfig_on_freeze => force value of metaconfig
|
||||
not ('frozen' in option_bag.properties and self.force_to_metaconfig(option_bag)):
|
||||
return value
|
||||
return self.getdefaultvalue(option_bag)
|
||||
|
||||
@ -333,7 +344,7 @@ class Values(object):
|
||||
# hasn't force_metaconfig_on_freeze properties
|
||||
ori_properties = doption_bag.properties
|
||||
del doption_bag.properties
|
||||
if 'force_metaconfig_on_freeze' not in doption_bag.properties:
|
||||
if not self.force_to_metaconfig(doption_bag):
|
||||
doption_bag.properties = ori_properties - {'force_metaconfig_on_freeze'}
|
||||
else:
|
||||
doption_bag.properties = ori_properties
|
||||
@ -390,7 +401,7 @@ class Values(object):
|
||||
owners.default,
|
||||
index=option_bag.index)
|
||||
if validate_meta is not False and (owner is owners.default or \
|
||||
'force_metaconfig_on_freeze' in option_bag.properties):
|
||||
'frozen' in option_bag.properties and 'force_metaconfig_on_freeze' in option_bag.properties):
|
||||
moption_bag = self._get_meta(option_bag)
|
||||
if moption_bag:
|
||||
owner = moption_bag.config_bag.context.cfgimpl_get_values().getowner(moption_bag,
|
||||
|
Reference in New Issue
Block a user