force_metaconfig_on_freeze in option (not in config)
This commit is contained in:
parent
b5497ab517
commit
9812975aa7
2 changed files with 62 additions and 7 deletions
|
@ -14,6 +14,7 @@ def teardown_function(function):
|
||||||
assert list_sessions() == [], 'session list is not empty when leaving "{}"'.format(function.__name__)
|
assert list_sessions() == [], 'session list is not empty when leaving "{}"'.format(function.__name__)
|
||||||
|
|
||||||
|
|
||||||
|
owners.addowner('config')
|
||||||
owners.addowner('meta1')
|
owners.addowner('meta1')
|
||||||
owners.addowner('meta2')
|
owners.addowner('meta2')
|
||||||
|
|
||||||
|
@ -975,10 +976,49 @@ def test_meta_properties_meta_set_value():
|
||||||
|
|
||||||
|
|
||||||
def test_metaconfig_force_metaconfig_on_freeze():
|
def test_metaconfig_force_metaconfig_on_freeze():
|
||||||
|
dummy1 = StrOption('dummy1', 'doc dummy', default='default', properties=('force_metaconfig_on_freeze',))
|
||||||
|
group = OptionDescription('group', '', [dummy1])
|
||||||
|
config = Config(group, session_id='config')
|
||||||
|
config.owner.set(owners.config)
|
||||||
|
meta1 = MetaConfig([config], session_id='meta1')
|
||||||
|
meta1.owner.set(owners.meta1)
|
||||||
|
meta2 = MetaConfig([meta1], session_id='meta2')
|
||||||
|
meta2.owner.set(owners.meta2)
|
||||||
|
config.property.read_write()
|
||||||
|
|
||||||
|
config.option('dummy1').property.add('frozen')
|
||||||
|
#
|
||||||
|
assert config.option('dummy1').value.get() == 'default'
|
||||||
|
assert config.option('dummy1').owner.get() == 'default'
|
||||||
|
#
|
||||||
|
meta2.option('dummy1').value.set('meta2')
|
||||||
|
#
|
||||||
|
assert config.option('dummy1').value.get() == 'meta2'
|
||||||
|
assert config.option('dummy1').owner.get() == 'meta2'
|
||||||
|
#
|
||||||
|
config.option('dummy1').property.pop('frozen')
|
||||||
|
config.option('dummy1').value.set('config')
|
||||||
|
config.option('dummy1').property.add('frozen')
|
||||||
|
#
|
||||||
|
assert config.option('dummy1').value.get() == 'meta2'
|
||||||
|
assert config.option('dummy1').owner.get() == 'meta2'
|
||||||
|
#
|
||||||
|
meta1.option('dummy1').value.set('meta1')
|
||||||
|
#
|
||||||
|
assert config.option('dummy1').value.get() == 'meta1'
|
||||||
|
assert config.option('dummy1').owner.get() == 'meta1'
|
||||||
|
#
|
||||||
|
config.option('dummy1').property.pop('frozen')
|
||||||
|
assert config.option('dummy1').value.get() == 'config'
|
||||||
|
assert config.option('dummy1').owner.get() == 'config'
|
||||||
|
|
||||||
|
|
||||||
|
def test_metaconfig_force_metaconfig_on_freeze_option():
|
||||||
dummy1 = StrOption('dummy1', 'doc dummy', default='default')
|
dummy1 = StrOption('dummy1', 'doc dummy', default='default')
|
||||||
dummy2 = StrOption('dummy2', 'doc dummy', default='default', properties=('force_default_on_freeze',))
|
dummy2 = StrOption('dummy2', 'doc dummy', default='default', properties=('force_default_on_freeze',))
|
||||||
group = OptionDescription('group', '', [dummy1, dummy2])
|
group = OptionDescription('group', '', [dummy1, dummy2])
|
||||||
config = Config(group)
|
config = Config(group, session_id='config')
|
||||||
|
config.owner.set(owners.config)
|
||||||
meta1 = MetaConfig([config], session_id='meta1')
|
meta1 = MetaConfig([config], session_id='meta1')
|
||||||
meta1.owner.set(owners.meta1)
|
meta1.owner.set(owners.meta1)
|
||||||
meta2 = MetaConfig([meta1], session_id='meta2')
|
meta2 = MetaConfig([meta1], session_id='meta2')
|
||||||
|
@ -1033,3 +1073,7 @@ def test_metaconfig_force_metaconfig_on_freeze():
|
||||||
meta1.option('dummy1').property.pop('force_metaconfig_on_freeze')
|
meta1.option('dummy1').property.pop('force_metaconfig_on_freeze')
|
||||||
assert config.option('dummy1').value.get() == 'meta1'
|
assert config.option('dummy1').value.get() == 'meta1'
|
||||||
assert config.option('dummy1').owner.get() == 'meta1'
|
assert config.option('dummy1').owner.get() == 'meta1'
|
||||||
|
#
|
||||||
|
config.option('dummy1').property.pop('frozen')
|
||||||
|
assert config.option('dummy1').value.get() == 'config'
|
||||||
|
assert config.option('dummy1').owner.get() == 'config'
|
||||||
|
|
|
@ -93,6 +93,20 @@ class Values(object):
|
||||||
# and return it
|
# and return it
|
||||||
return value
|
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,
|
def getvalue(self,
|
||||||
option_bag):
|
option_bag):
|
||||||
"""actually retrieves the value
|
"""actually retrieves the value
|
||||||
|
@ -116,10 +130,7 @@ class Values(object):
|
||||||
with_value=True)
|
with_value=True)
|
||||||
if owner != owners.default and \
|
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_default_on_freeze' in option_bag.properties) and \
|
||||||
not ('frozen' in option_bag.properties and 'force_metaconfig_on_freeze' in option_bag.properties):
|
not ('frozen' in option_bag.properties and self.force_to_metaconfig(option_bag)):
|
||||||
# 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
|
|
||||||
return value
|
return value
|
||||||
return self.getdefaultvalue(option_bag)
|
return self.getdefaultvalue(option_bag)
|
||||||
|
|
||||||
|
@ -333,7 +344,7 @@ class Values(object):
|
||||||
# hasn't force_metaconfig_on_freeze properties
|
# hasn't force_metaconfig_on_freeze properties
|
||||||
ori_properties = doption_bag.properties
|
ori_properties = doption_bag.properties
|
||||||
del 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'}
|
doption_bag.properties = ori_properties - {'force_metaconfig_on_freeze'}
|
||||||
else:
|
else:
|
||||||
doption_bag.properties = ori_properties
|
doption_bag.properties = ori_properties
|
||||||
|
@ -390,7 +401,7 @@ class Values(object):
|
||||||
owners.default,
|
owners.default,
|
||||||
index=option_bag.index)
|
index=option_bag.index)
|
||||||
if validate_meta is not False and (owner is owners.default or \
|
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)
|
moption_bag = self._get_meta(option_bag)
|
||||||
if moption_bag:
|
if moption_bag:
|
||||||
owner = moption_bag.config_bag.context.cfgimpl_get_values().getowner(moption_bag,
|
owner = moption_bag.config_bag.context.cfgimpl_get_values().getowner(moption_bag,
|
||||||
|
|
Loading…
Reference in a new issue