corrections in dict and todict
This commit is contained in:
@ -214,7 +214,8 @@ class _TiramisuOptionOptionDescription(CommonTiramisuOption):
|
||||
apply_requires=False)
|
||||
# do not check cache properties/permissives which are not save (unrestraint, ...)
|
||||
return await settings.calc_raises_properties(self._option_bag,
|
||||
apply_requires=False)
|
||||
apply_requires=False,
|
||||
uncalculated=uncalculated)
|
||||
|
||||
def __call__(self,
|
||||
name: str,
|
||||
@ -347,13 +348,15 @@ class TiramisuOptionProperty(CommonTiramisuOption):
|
||||
self._settings = option_bag.config_bag.context.cfgimpl_get_settings()
|
||||
|
||||
async def get(self,
|
||||
only_raises=False):
|
||||
only_raises=False,
|
||||
uncalculated=False):
|
||||
"""Get properties for an option"""
|
||||
await self._get_option()
|
||||
if not only_raises:
|
||||
return self._option_bag.properties
|
||||
# do not check cache properties/permissives which are not save (unrestraint, ...)
|
||||
return await self._settings.calc_raises_properties(self._option_bag)
|
||||
return await self._settings.calc_raises_properties(self._option_bag,
|
||||
uncalculated=uncalculated)
|
||||
|
||||
async def add(self, prop):
|
||||
"""Add new property for an option"""
|
||||
@ -510,8 +513,6 @@ class TiramisuOptionValue(CommonTiramisuOption):
|
||||
@option_type('optiondescription')
|
||||
async def dict(self,
|
||||
flatten=False,
|
||||
withvalue=undefined,
|
||||
withoption=None,
|
||||
withwarning: bool=False,
|
||||
fullpath=False):
|
||||
"""Dict with path as key and value"""
|
||||
@ -523,9 +524,7 @@ class TiramisuOptionValue(CommonTiramisuOption):
|
||||
config_bag.remove_warnings()
|
||||
return await subconfig.make_dict(config_bag=config_bag,
|
||||
flatten=flatten,
|
||||
fullpath=fullpath,
|
||||
withoption=withoption,
|
||||
withvalue=withvalue)
|
||||
fullpath=fullpath)
|
||||
|
||||
@option_type('option')
|
||||
async def get(self):
|
||||
@ -576,7 +575,6 @@ class TiramisuOptionValue(CommonTiramisuOption):
|
||||
for idx in range(length):
|
||||
soption_bag = OptionBag()
|
||||
soption_bag.set_option(option,
|
||||
self._option_bag.path,
|
||||
idx,
|
||||
self._option_bag.config_bag)
|
||||
soption_bag.properties = await settings.getproperties(soption_bag)
|
||||
@ -706,7 +704,6 @@ class TiramisuOption(CommonTiramisu, TiramisuConfig):
|
||||
path = self._subconfig._get_subpath(oname)
|
||||
option_bag = OptionBag()
|
||||
option_bag.set_option(option,
|
||||
path,
|
||||
None,
|
||||
config_bag)
|
||||
subconfig = await self._subconfig.get_subconfig(option_bag)
|
||||
@ -736,7 +733,6 @@ class TiramisuOption(CommonTiramisu, TiramisuConfig):
|
||||
settings = config_bag.context.cfgimpl_get_settings()
|
||||
option_bag = OptionBag()
|
||||
option_bag.set_option(opt,
|
||||
opt.impl_getpath(),
|
||||
None,
|
||||
config_bag)
|
||||
option_bag.properties = await settings.getproperties(option_bag)
|
||||
@ -761,7 +757,6 @@ class TiramisuOption(CommonTiramisu, TiramisuConfig):
|
||||
option = await self._get_option()
|
||||
option_bag = OptionBag()
|
||||
option_bag.set_option(option,
|
||||
option.impl_getpath(),
|
||||
None,
|
||||
config_bag)
|
||||
subconfig = await self._subconfig.get_subconfig(option_bag)
|
||||
@ -877,11 +872,10 @@ class TiramisuContextValue(TiramisuConfig):
|
||||
self._config_bag)
|
||||
|
||||
async def dict(self,
|
||||
flatten=False,
|
||||
withvalue=undefined,
|
||||
withoption=None,
|
||||
withwarning: bool=False,
|
||||
fullpath=False):
|
||||
flatten=False,
|
||||
withwarning: bool=False,
|
||||
fullpath=False,
|
||||
leader_to_list=False):
|
||||
"""Dict with path as key and value"""
|
||||
config_bag = self._config_bag
|
||||
if not withwarning and 'warnings' in config_bag.properties:
|
||||
@ -890,8 +884,7 @@ class TiramisuContextValue(TiramisuConfig):
|
||||
return await config_bag.context.make_dict(config_bag,
|
||||
flatten=flatten,
|
||||
fullpath=fullpath,
|
||||
withoption=withoption,
|
||||
withvalue=withvalue)
|
||||
leader_to_list=leader_to_list)
|
||||
|
||||
async def exportation(self,
|
||||
with_default_owner: bool=False):
|
||||
@ -1146,7 +1139,6 @@ class TiramisuContextOption(TiramisuConfig):
|
||||
config_bag):
|
||||
option_bag = OptionBag()
|
||||
option_bag.set_option(opt,
|
||||
opt.impl_getpath(),
|
||||
None,
|
||||
config_bag)
|
||||
settings = config_bag.context.cfgimpl_get_settings()
|
||||
|
@ -202,7 +202,9 @@ async def manager_callback(callbk: Union[ParamOption, ParamValue],
|
||||
if config_bag is undefined:
|
||||
return undefined
|
||||
path = option.impl_getpath()
|
||||
option_bag = await get_option_bag(config_bag, option, path, apply_index)
|
||||
option_bag = await get_option_bag(config_bag,
|
||||
option,
|
||||
apply_index)
|
||||
option_bag.config_bag.unrestraint()
|
||||
option_bag.config_bag.remove_validation()
|
||||
# if we are in properties calculation, cannot calculated properties
|
||||
@ -233,7 +235,6 @@ async def manager_callback(callbk: Union[ParamOption, ParamValue],
|
||||
|
||||
async def get_option_bag(config_bag,
|
||||
opt,
|
||||
path,
|
||||
index_):
|
||||
# don't validate if option is option that we tried to validate
|
||||
config_bag = config_bag.copy()
|
||||
@ -242,7 +243,6 @@ async def manager_callback(callbk: Union[ParamOption, ParamValue],
|
||||
#config_bag.properties -= {'warnings'}
|
||||
option_bag = OptionBag()
|
||||
option_bag.set_option(opt,
|
||||
path,
|
||||
index_,
|
||||
config_bag)
|
||||
option_bag.properties = await config_bag.context.cfgimpl_get_settings().getproperties(option_bag)
|
||||
@ -292,7 +292,9 @@ async def manager_callback(callbk: Union[ParamOption, ParamValue],
|
||||
index_ = None
|
||||
with_index = False
|
||||
path = callbk_option.impl_getpath()
|
||||
option_bag = await get_option_bag(config_bag, callbk_option, path, index_)
|
||||
option_bag = await get_option_bag(config_bag,
|
||||
callbk_option,
|
||||
index_)
|
||||
value = await get_value(callbk, option_bag, path)
|
||||
if with_index:
|
||||
value = value[index]
|
||||
|
@ -75,12 +75,10 @@ class SubConfig:
|
||||
if descr is not None and descr.impl_is_leadership():
|
||||
leader = descr.get_leader()
|
||||
leaderpath = leader.impl_getname()
|
||||
full_leaderpath = self._get_subpath(leaderpath)
|
||||
cconfig_bag = config_bag.copy()
|
||||
cconfig_bag.remove_validation()
|
||||
moption_bag = OptionBag()
|
||||
moption_bag.set_option(leader,
|
||||
full_leaderpath,
|
||||
None,
|
||||
cconfig_bag)
|
||||
moption_bag.properties = await self.cfgimpl_get_settings().getproperties(moption_bag)
|
||||
@ -118,10 +116,8 @@ class SubConfig:
|
||||
doption = option.to_dynoption(subpath,
|
||||
suffix,
|
||||
option)
|
||||
doption_path = doption.impl_getpath()
|
||||
doption_bag = OptionBag()
|
||||
doption_bag.set_option(doption,
|
||||
doption_path,
|
||||
option_bag.index,
|
||||
option_bag.config_bag)
|
||||
doption_bag.properties = await self.cfgimpl_get_settings().getproperties(doption_bag)
|
||||
@ -139,10 +135,8 @@ class SubConfig:
|
||||
doption = option.to_dynoption(subpath,
|
||||
suffix,
|
||||
dynopt)
|
||||
doption_path = doption.impl_getpath()
|
||||
doption_bag = OptionBag()
|
||||
doption_bag.set_option(doption,
|
||||
doption_path,
|
||||
option_bag.index,
|
||||
option_bag.config_bag)
|
||||
doption_bag.properties = await self.cfgimpl_get_settings().getproperties(doption_bag)
|
||||
@ -150,10 +144,8 @@ class SubConfig:
|
||||
resetted_opts,
|
||||
doption_bag)
|
||||
else:
|
||||
option_path = option.impl_getpath()
|
||||
doption_bag = OptionBag()
|
||||
doption_bag.set_option(option,
|
||||
option_path,
|
||||
option_bag.index,
|
||||
option_bag.config_bag)
|
||||
doption_bag.properties = await self.cfgimpl_get_settings().getproperties(doption_bag)
|
||||
@ -194,9 +186,7 @@ class SubConfig:
|
||||
option = await self.cfgimpl_get_description().get_child(step,
|
||||
config_bag,
|
||||
self.cfgimpl_get_path())
|
||||
subpath = self._get_subpath(step)
|
||||
option_bag.set_option(option,
|
||||
subpath,
|
||||
None,
|
||||
config_bag)
|
||||
option_bag.properties = await self.cfgimpl_get_settings().getproperties(option_bag)
|
||||
@ -285,7 +275,6 @@ class SubConfig:
|
||||
if option.impl_is_symlinkoption():
|
||||
soption_bag = OptionBag()
|
||||
soption_bag.set_option(option.impl_getopt(),
|
||||
None,
|
||||
option_bag.index,
|
||||
config_bag)
|
||||
soption_bag.properties = await self.cfgimpl_get_settings().getproperties(soption_bag)
|
||||
@ -316,7 +305,6 @@ class SubConfig:
|
||||
for idx in range(length):
|
||||
soption_bag = OptionBag()
|
||||
soption_bag.set_option(option,
|
||||
option_bag.path,
|
||||
idx,
|
||||
config_bag)
|
||||
soption_bag.properties = await self.cfgimpl_get_settings().getproperties(soption_bag)
|
||||
@ -374,7 +362,6 @@ class SubConfig:
|
||||
option_bag = OptionBag()
|
||||
path = option.impl_getpath()
|
||||
option_bag.set_option(option,
|
||||
path,
|
||||
None,
|
||||
config_bag)
|
||||
option_bag.properties = await self.cfgimpl_get_settings().getproperties(option_bag)
|
||||
@ -413,116 +400,90 @@ class SubConfig:
|
||||
async def make_dict(self,
|
||||
config_bag,
|
||||
flatten=False,
|
||||
_currpath=None,
|
||||
withoption=None,
|
||||
withvalue=undefined,
|
||||
fullpath=False):
|
||||
fullpath=False,
|
||||
leader_to_list=False):
|
||||
"""exports the whole config into a `dict`
|
||||
:returns: dict of Option's name (or path) and values
|
||||
"""
|
||||
pathsvalues = {}
|
||||
if _currpath is None:
|
||||
_currpath = []
|
||||
if withoption is None and withvalue is not undefined:
|
||||
raise ValueError(_("make_dict can't filtering with value without "
|
||||
"option"))
|
||||
context = self.cfgimpl_get_context()
|
||||
await self._make_dict(context,
|
||||
config_bag,
|
||||
await self._make_dict(config_bag,
|
||||
[],
|
||||
flatten,
|
||||
_currpath,
|
||||
withoption,
|
||||
withvalue,
|
||||
fullpath,
|
||||
pathsvalues)
|
||||
pathsvalues,
|
||||
leader_to_list)
|
||||
return pathsvalues
|
||||
|
||||
async def _make_dict(self,
|
||||
context,
|
||||
config_bag,
|
||||
flatten,
|
||||
_currpath,
|
||||
withoption,
|
||||
withvalue,
|
||||
flatten,
|
||||
fullpath,
|
||||
pathsvalues):
|
||||
if withoption is not None:
|
||||
# Find all option with criteria
|
||||
# retrieve OptionDescription and make_dict on it
|
||||
mypath = self.cfgimpl_get_path()
|
||||
async for path in context.find(bytype=None,
|
||||
byname=withoption,
|
||||
byvalue=withvalue,
|
||||
_subpath=self.cfgimpl_get_path(False),
|
||||
config_bag=config_bag):
|
||||
path = '.'.join(path.split('.')[:-1])
|
||||
if '.' in path:
|
||||
subconfig, subpath = await context.cfgimpl_get_home_by_path(path,
|
||||
config_bag)
|
||||
else:
|
||||
subconfig = context
|
||||
subpath = path
|
||||
opt = await subconfig.cfgimpl_get_description().get_child(subpath,
|
||||
config_bag,
|
||||
subconfig.cfgimpl_get_path())
|
||||
pathsvalues,
|
||||
leader_to_list):
|
||||
for opt in await self.cfgimpl_get_description().get_children(config_bag):
|
||||
if opt.impl_is_optiondescription() and leader_to_list and opt.impl_is_leadership():
|
||||
children = await opt.get_children(config_bag)
|
||||
leader = children[0]
|
||||
loption_bag = OptionBag()
|
||||
loption_bag.set_option(leader,
|
||||
None,
|
||||
config_bag)
|
||||
loption_bag.properties = await self.cfgimpl_get_settings().getproperties(loption_bag)
|
||||
leader_pathsvalues = {}
|
||||
leader_currpath = _currpath + [leader.impl_getname()]
|
||||
await self._make_sub_dict(leader_pathsvalues,
|
||||
leader_currpath,
|
||||
loption_bag,
|
||||
flatten,
|
||||
fullpath,
|
||||
leader_to_list)
|
||||
if not leader_pathsvalues:
|
||||
continue
|
||||
leader_name = list(leader_pathsvalues.keys())[0]
|
||||
pathsvalues[leader_name] = []
|
||||
subconfig = await SubConfig(opt,
|
||||
self._impl_context,
|
||||
config_bag,
|
||||
opt.impl_getpath())
|
||||
for idx, value in enumerate(leader_pathsvalues[leader_name]):
|
||||
leadership_pathsvalues = {leader_name: value}
|
||||
for follower_opt in children[1:]:
|
||||
foption_bag = OptionBag()
|
||||
foption_bag.set_option(follower_opt,
|
||||
idx,
|
||||
config_bag)
|
||||
foption_bag.properties = await self.cfgimpl_get_settings().getproperties(foption_bag)
|
||||
await subconfig._make_sub_dict(leadership_pathsvalues,
|
||||
leader_currpath,
|
||||
foption_bag,
|
||||
flatten,
|
||||
fullpath,
|
||||
leader_to_list)
|
||||
pathsvalues[leader_name].append(leadership_pathsvalues)
|
||||
else:
|
||||
soption_bag = OptionBag()
|
||||
soption_bag.set_option(opt,
|
||||
path,
|
||||
None,
|
||||
config_bag)
|
||||
soption_bag.properties = await self.cfgimpl_get_settings().getproperties(soption_bag)
|
||||
if mypath is not None:
|
||||
if mypath == path:
|
||||
withoption = None
|
||||
withvalue = undefined
|
||||
break
|
||||
else:
|
||||
tmypath = mypath + '.'
|
||||
assert path.startswith(tmypath), _('unexpected path "{0}", '
|
||||
'should start with "{1}"'
|
||||
'').format(path, mypath)
|
||||
path = path[len(tmypath):]
|
||||
await self._make_sub_dict(path,
|
||||
pathsvalues,
|
||||
await self._make_sub_dict(pathsvalues,
|
||||
_currpath,
|
||||
flatten,
|
||||
soption_bag,
|
||||
fullpath,
|
||||
context,
|
||||
withvalue)
|
||||
|
||||
#withoption can be set to None below !
|
||||
if withoption is None:
|
||||
children = await self.cfgimpl_get_description().get_children(config_bag)
|
||||
for opt in children:
|
||||
name = opt.impl_getname()
|
||||
path = self._get_subpath(name)
|
||||
soption_bag = OptionBag()
|
||||
soption_bag.set_option(opt,
|
||||
path,
|
||||
None,
|
||||
config_bag)
|
||||
soption_bag.properties = await self.cfgimpl_get_settings().getproperties(soption_bag)
|
||||
await self._make_sub_dict(name,
|
||||
pathsvalues,
|
||||
_currpath,
|
||||
flatten,
|
||||
soption_bag,
|
||||
fullpath,
|
||||
context,
|
||||
withvalue)
|
||||
leader_to_list)
|
||||
return pathsvalues
|
||||
|
||||
async def _make_sub_dict(self,
|
||||
name,
|
||||
pathsvalues,
|
||||
_currpath,
|
||||
flatten,
|
||||
option_bag,
|
||||
flatten,
|
||||
fullpath,
|
||||
context,
|
||||
withvalue):
|
||||
leader_to_list):
|
||||
option = option_bag.option
|
||||
name = option.impl_getname()
|
||||
if option.impl_is_optiondescription():
|
||||
try:
|
||||
await self.cfgimpl_get_settings().validate_properties(option_bag)
|
||||
@ -530,14 +491,12 @@ class SubConfig:
|
||||
self._impl_context,
|
||||
option_bag.config_bag,
|
||||
option_bag.path)
|
||||
await subconfig._make_dict(context,
|
||||
option_bag.config_bag,
|
||||
flatten,
|
||||
await subconfig._make_dict(option_bag.config_bag,
|
||||
_currpath + [name],
|
||||
None,
|
||||
withvalue,
|
||||
flatten,
|
||||
fullpath,
|
||||
pathsvalues)
|
||||
pathsvalues,
|
||||
leader_to_list)
|
||||
except PropertiesOptionError as err:
|
||||
if err.proptype in (['mandatory'], ['empty']):
|
||||
raise err
|
||||
@ -554,7 +513,7 @@ class SubConfig:
|
||||
if flatten:
|
||||
name_ = option.impl_getname()
|
||||
elif fullpath:
|
||||
name_ = self._get_subpath(name)
|
||||
name_ = option.impl_getpath()
|
||||
else:
|
||||
name_ = '.'.join(_currpath + [name])
|
||||
pathsvalues[name_] = ret
|
||||
@ -879,7 +838,6 @@ class KernelGroupConfig(_CommonConfig):
|
||||
child.cfgimpl_get_path())
|
||||
option_bag = OptionBag()
|
||||
option_bag.set_option(option,
|
||||
path,
|
||||
index,
|
||||
cconfig_bag)
|
||||
option_bag.properties = await settings.getproperties(option_bag)
|
||||
@ -977,7 +935,6 @@ class KernelGroupConfig(_CommonConfig):
|
||||
subconfig.cfgimpl_get_path())
|
||||
option_bag = OptionBag()
|
||||
option_bag.set_option(option,
|
||||
path,
|
||||
None,
|
||||
config_bag)
|
||||
option_bag.properties = await child.cfgimpl_get_settings().getproperties(option_bag)
|
||||
@ -1061,7 +1018,6 @@ class KernelMixConfig(KernelGroupConfig):
|
||||
self.cfgimpl_get_path())
|
||||
option_bag = OptionBag()
|
||||
option_bag.set_option(option,
|
||||
path,
|
||||
index,
|
||||
config_bag)
|
||||
option_bag.properties = await self.cfgimpl_get_settings().getproperties(option_bag)
|
||||
@ -1093,7 +1049,6 @@ class KernelMixConfig(KernelGroupConfig):
|
||||
child.cfgimpl_get_path())
|
||||
moption_bag = OptionBag()
|
||||
moption_bag.set_option(option,
|
||||
path,
|
||||
index,
|
||||
cconfig_bag)
|
||||
moption_bag.properties = await settings.getproperties(moption_bag)
|
||||
@ -1155,7 +1110,6 @@ class KernelMixConfig(KernelGroupConfig):
|
||||
subconfig.cfgimpl_get_path())
|
||||
option_bag = OptionBag()
|
||||
option_bag.set_option(option,
|
||||
path,
|
||||
None,
|
||||
rconfig_bag)
|
||||
option_bag.properties = await self.cfgimpl_get_settings().getproperties(option_bag)
|
||||
@ -1168,7 +1122,6 @@ class KernelMixConfig(KernelGroupConfig):
|
||||
subconfig.cfgimpl_get_path())
|
||||
option_bag = OptionBag()
|
||||
option_bag.set_option(option,
|
||||
path,
|
||||
None,
|
||||
rconfig_bag)
|
||||
option_bag.properties = await self.cfgimpl_get_settings().getproperties(option_bag)
|
||||
@ -1188,7 +1141,6 @@ class KernelMixConfig(KernelGroupConfig):
|
||||
child.cfgimpl_get_path())
|
||||
moption_bag = OptionBag()
|
||||
moption_bag.set_option(option,
|
||||
path,
|
||||
None,
|
||||
rconfig_bag)
|
||||
moption_bag.properties = await self.cfgimpl_get_settings().getproperties(moption_bag)
|
||||
|
@ -71,7 +71,6 @@ class DynOptionDescription(OptionDescription):
|
||||
config_bag: ConfigBag) -> List[str]:
|
||||
option_bag = OptionBag()
|
||||
option_bag.set_option(self,
|
||||
self.impl_getpath(),
|
||||
None,
|
||||
config_bag)
|
||||
values = await self._suffixes.execute(option_bag)
|
||||
|
@ -118,10 +118,8 @@ class Leadership(OptionDescription):
|
||||
config_bag = option_bag.config_bag.copy()
|
||||
config_bag.remove_validation()
|
||||
for follower in self.get_followers():
|
||||
follower_path = follower.impl_getpath()
|
||||
soption_bag = OptionBag()
|
||||
soption_bag.set_option(follower,
|
||||
follower_path,
|
||||
None,
|
||||
config_bag)
|
||||
soption_bag.properties = await config_bag.context.cfgimpl_get_settings().getproperties(soption_bag)
|
||||
@ -133,21 +131,22 @@ class Leadership(OptionDescription):
|
||||
value,
|
||||
option_bag,
|
||||
owner,
|
||||
_commit) -> None:
|
||||
_commit,
|
||||
dyn=None) -> None:
|
||||
settings = option_bag.config_bag.context.cfgimpl_get_settings()
|
||||
if value:
|
||||
rgevalue = range(len(value))
|
||||
for follower in await self.get_children(option_bag.config_bag):
|
||||
if dyn is None:
|
||||
dyn = self
|
||||
for follower in await dyn.get_children(option_bag.config_bag):
|
||||
foption_bag = OptionBag()
|
||||
foption_bag.set_option(follower,
|
||||
follower.impl_getpath(),
|
||||
None,
|
||||
option_bag.config_bag)
|
||||
if 'force_store_value' in await settings.getproperties(foption_bag):
|
||||
for index in rgevalue:
|
||||
foption_bag = OptionBag()
|
||||
foption_bag.set_option(follower,
|
||||
follower.impl_getpath(),
|
||||
index,
|
||||
option_bag.config_bag)
|
||||
foption_bag.properties = await settings.getproperties(foption_bag)
|
||||
@ -171,7 +170,6 @@ class Leadership(OptionDescription):
|
||||
followerlen = await values._p_.get_max_length(follower_path)
|
||||
soption_bag = OptionBag()
|
||||
soption_bag.set_option(follower,
|
||||
follower_path,
|
||||
index,
|
||||
config_bag)
|
||||
# do not check force_default_on_freeze or force_metaconfig_on_freeze
|
||||
|
@ -116,7 +116,6 @@ class Option(BaseOption):
|
||||
return
|
||||
option_bag = OptionBag()
|
||||
option_bag.set_option(self,
|
||||
undefined,
|
||||
None,
|
||||
undefined)
|
||||
try:
|
||||
@ -148,7 +147,6 @@ class Option(BaseOption):
|
||||
_setattr(self, '_default_multi', default_multi)
|
||||
option_bag = OptionBag()
|
||||
option_bag.set_option(self,
|
||||
undefined,
|
||||
None,
|
||||
undefined)
|
||||
self.sync_impl_validate(default,
|
||||
|
@ -117,7 +117,6 @@ class CacheOptionDescription(BaseOption):
|
||||
option_bag = OptionBag()
|
||||
leader = option.impl_get_leadership().get_leader()
|
||||
option_bag.set_option(leader,
|
||||
leader.impl_getpath(),
|
||||
None,
|
||||
config_bag)
|
||||
option_bag.properties = frozenset()
|
||||
@ -125,7 +124,6 @@ class CacheOptionDescription(BaseOption):
|
||||
for index in range(follower_len):
|
||||
option_bag = OptionBag()
|
||||
option_bag.set_option(option,
|
||||
subpath,
|
||||
index,
|
||||
config_bag)
|
||||
option_bag.properties = frozenset()
|
||||
@ -137,7 +135,6 @@ class CacheOptionDescription(BaseOption):
|
||||
else:
|
||||
option_bag = OptionBag()
|
||||
option_bag.set_option(option,
|
||||
subpath,
|
||||
None,
|
||||
config_bag)
|
||||
option_bag.properties = frozenset()
|
||||
@ -183,7 +180,7 @@ class OptionDescriptionWalk(CacheOptionDescription):
|
||||
|
||||
async def get_children(self,
|
||||
config_bag: Union[ConfigBag, Undefined],
|
||||
dyn: bool=True) -> Iterator[Union[BaseOption, SynDynOptionDescription]]:
|
||||
dyn: bool=True) -> Union[BaseOption, SynDynOptionDescription]:
|
||||
if not dyn or config_bag is undefined or \
|
||||
config_bag.context.cfgimpl_get_description() == self:
|
||||
subpath = ''
|
||||
|
@ -145,3 +145,16 @@ class SynDynLeadership(SynDynOptionDescription):
|
||||
await self._opt.pop(*args,
|
||||
followers=self.get_followers(),
|
||||
**kwargs)
|
||||
|
||||
async def follower_force_store_value(self,
|
||||
values,
|
||||
value,
|
||||
option_bag,
|
||||
owner,
|
||||
_commit) -> None:
|
||||
await self._opt.follower_force_store_value(values,
|
||||
value,
|
||||
option_bag,
|
||||
owner,
|
||||
_commit,
|
||||
dyn=self)
|
||||
|
@ -143,12 +143,12 @@ class OptionBag:
|
||||
|
||||
def set_option(self,
|
||||
option,
|
||||
path,
|
||||
index,
|
||||
config_bag):
|
||||
if path is None:
|
||||
path = option.impl_getpath()
|
||||
self.path = path
|
||||
if config_bag is undefined:
|
||||
self.path = None
|
||||
else:
|
||||
self.path = option.impl_getpath()
|
||||
self.index = index
|
||||
self.option = option
|
||||
self.config_bag = config_bag
|
||||
@ -646,12 +646,14 @@ class Settings(object):
|
||||
# validate properties
|
||||
async def calc_raises_properties(self,
|
||||
option_bag,
|
||||
apply_requires=True):
|
||||
if apply_requires and option_bag.properties_setted:
|
||||
apply_requires=True,
|
||||
uncalculated=False):
|
||||
if not uncalculated and apply_requires and option_bag.properties_setted:
|
||||
option_properties = option_bag.properties
|
||||
else:
|
||||
option_properties = await self.getproperties(option_bag,
|
||||
apply_requires=apply_requires)
|
||||
apply_requires=apply_requires,
|
||||
uncalculated=uncalculated)
|
||||
return self._calc_raises_properties(option_bag.config_bag.properties,
|
||||
option_bag.config_bag.permissives,
|
||||
option_properties)
|
||||
|
@ -206,7 +206,7 @@ class Requires(object):
|
||||
else:
|
||||
act = 'hide'
|
||||
inv_act = 'show'
|
||||
if isinstance(option, ChoiceOption):
|
||||
if option.get_type() == 'choice':
|
||||
require_option = self.tiramisu_web.config.unrestraint.option(option_path)
|
||||
values = await self.tiramisu_web.get_enum(require_option,
|
||||
await require_option.option.ismulti(),
|
||||
@ -239,7 +239,7 @@ class Requires(object):
|
||||
#collect id of all options
|
||||
child = await childapi.option.get()
|
||||
if isinstance(child, SynDynOption):
|
||||
child = child._impl_getopt()
|
||||
child = child.opt
|
||||
self.options[child] = path
|
||||
current_action = None
|
||||
|
||||
@ -439,7 +439,7 @@ class TiramisuDict:
|
||||
child = await childapi_option.get()
|
||||
childtype = child.__class__.__name__
|
||||
if childtype == 'SynDynOption':
|
||||
childtype = child._impl_getopt().__class__.__name__
|
||||
childtype = child.opt.__class__.__name__
|
||||
if await childapi_option.issymlinkoption():
|
||||
web_type = 'symlink'
|
||||
value = None
|
||||
@ -608,7 +608,8 @@ class TiramisuDict:
|
||||
settings = config.cfgimpl_get_settings()
|
||||
childapi._option_bag.config_bag.properties = await settings.get_context_properties(config._impl_properties_cache)
|
||||
childapi._option_bag.config_bag.properties -= {'permissive'}
|
||||
properties = await childapi.property.get(only_raises=True)
|
||||
properties = await childapi.property.get(only_raises=True,
|
||||
uncalculated=True)
|
||||
properties -= await childapi.permissive.get()
|
||||
# 'hidden=True' means cannot access with or without permissive option
|
||||
# 'display=False' means cannot access only without permissive option
|
||||
|
@ -616,13 +616,10 @@ class Values:
|
||||
settings = context.cfgimpl_get_settings()
|
||||
for option in await description.get_children(config_bag):
|
||||
name = option.impl_getname()
|
||||
path = '.'.join(currpath + [name])
|
||||
|
||||
if option.impl_is_optiondescription():
|
||||
try:
|
||||
option_bag = OptionBag()
|
||||
option_bag.set_option(option,
|
||||
path,
|
||||
None,
|
||||
od_config_bag)
|
||||
option_bag.properties = await settings.getproperties(option_bag)
|
||||
@ -644,7 +641,6 @@ class Values:
|
||||
if not option.impl_is_follower():
|
||||
option_bag = OptionBag()
|
||||
option_bag.set_option(option,
|
||||
path,
|
||||
None,
|
||||
config_bag)
|
||||
option_bag.properties = await settings.getproperties(option_bag)
|
||||
@ -655,7 +651,6 @@ class Values:
|
||||
for index in range(subconfig.cfgimpl_get_length()):
|
||||
option_bag = OptionBag()
|
||||
option_bag.set_option(option,
|
||||
path,
|
||||
index,
|
||||
config_bag)
|
||||
option_bag.properties = await settings.getproperties(option_bag)
|
||||
@ -664,7 +659,7 @@ class Values:
|
||||
option_bag)
|
||||
except PropertiesOptionError as err:
|
||||
if err.proptype in (['mandatory'], ['empty']):
|
||||
yield path
|
||||
yield option.impl_getpath()
|
||||
except ConfigError:
|
||||
pass
|
||||
|
||||
|
Reference in New Issue
Block a user