add meta in option_bag
This commit is contained in:
@ -157,11 +157,10 @@ class Values(object):
|
||||
# calculated value is a new value, so reset cache
|
||||
context.cfgimpl_reset_cache(option_bag)
|
||||
|
||||
if self._is_meta(option_bag):
|
||||
option_bag.properties = frozenset()
|
||||
meta = context.cfgimpl_get_meta()
|
||||
moption_bag = self._get_meta(option_bag)
|
||||
if moption_bag:
|
||||
# retrieved value from meta config
|
||||
return meta.cfgimpl_get_values().get_cached_value(option_bag)
|
||||
return moption_bag.config_bag.context.cfgimpl_get_values().get_cached_value(moption_bag)
|
||||
|
||||
if opt.impl_has_callback():
|
||||
# if value has callback, calculate value
|
||||
@ -310,24 +309,27 @@ class Values(object):
|
||||
option_bag.index,
|
||||
commit)
|
||||
|
||||
def _is_meta(self,
|
||||
option_bag):
|
||||
def _get_meta(self,
|
||||
option_bag):
|
||||
context = option_bag.config_bag.context
|
||||
meta = context.cfgimpl_get_meta()
|
||||
if meta is None:
|
||||
return False
|
||||
return None
|
||||
if option_bag.option.impl_is_master_slaves('slave'):
|
||||
master = option_bag.option.impl_get_master_slaves().getmaster()
|
||||
masterp = master.impl_getpath()
|
||||
# slave could be a "meta" only if master hasn't value
|
||||
if self._p_.hasvalue(masterp,
|
||||
index=None):
|
||||
return False
|
||||
return None
|
||||
doption_bag = option_bag.copy()
|
||||
config_bag = option_bag.config_bag.copy()
|
||||
config_bag.context = meta
|
||||
doption_bag.config_bag = config_bag
|
||||
return not meta.cfgimpl_get_values().is_default_owner(doption_bag)
|
||||
doption_bag.properties = frozenset()
|
||||
if meta.cfgimpl_get_values().is_default_owner(doption_bag):
|
||||
return None
|
||||
return doption_bag
|
||||
|
||||
|
||||
#______________________________________________________________________
|
||||
@ -374,15 +376,11 @@ class Values(object):
|
||||
owner = self._p_.getowner(option_bag.path,
|
||||
owners.default,
|
||||
index=option_bag.index)
|
||||
if owner is owners.default and validate_meta is not False and self._is_meta(option_bag):
|
||||
option_bag = option_bag.copy()
|
||||
option_bag.properties = frozenset()
|
||||
config_bag = option_bag.config_bag.copy()
|
||||
meta = context.cfgimpl_get_meta()
|
||||
config_bag.context = meta
|
||||
option_bag.config_bag = config_bag
|
||||
owner = meta.cfgimpl_get_values().getowner(option_bag,
|
||||
only_default=only_default)
|
||||
if owner is owners.default and validate_meta is not False:
|
||||
moption_bag = self._get_meta(option_bag)
|
||||
if moption_bag:
|
||||
owner = moption_bag.config_bag.context.cfgimpl_get_values().getowner(moption_bag,
|
||||
only_default=only_default)
|
||||
return owner
|
||||
|
||||
def setowner(self,
|
||||
|
Reference in New Issue
Block a user