ConfigBag optimisation

This commit is contained in:
2018-08-01 08:37:58 +02:00
parent acdddcfe9c
commit 41c17004d2
19 changed files with 1163 additions and 1160 deletions

View File

@ -22,7 +22,7 @@ from copy import copy
from ..i18n import _
from ..setting import ConfigBag, groups, undefined, owners
from ..setting import ConfigBag, OptionBag, groups, undefined, owners
from .baseoption import BaseOption, OnlyOption
from .option import ALLOWED_CONST_LIST, DynSymLinkOption
from .syndynoptiondescription import SynDynOptionDescription
@ -173,11 +173,14 @@ class CacheOptionDescription(BaseOption):
'"force_store_value" property').format(
option.impl_get_display_name()))
if not values._p_.hasvalue(subpath):
config_bag = ConfigBag(config=context, option=option)
config_bag.properties = frozenset()
value = values.getvalue(subpath,
None,
config_bag)
config_bag = ConfigBag(config=context)
option_bag = OptionBag()
option_bag.set_option(option,
subpath,
None,
config_bag)
option_bag.properties = frozenset()
value = values.getvalue(option_bag)
value_setted = True
values._p_.setvalue(subpath,
value,
@ -224,13 +227,14 @@ class OptionDescriptionWalk(CacheOptionDescription):
__slots__ = ('_children',)
def build_dynoptions(self,
option,
config_bag):
option_bag):
option = option_bag.option
dynopt = option.getsubdyn()
rootpath = self.impl_get_path_by_opt(dynopt)
ori_index = len(rootpath) + 1
subpaths = [rootpath] + option.impl_getpath(config_bag.config)[ori_index:].split('.')[:-1]
for suffix in dynopt._impl_get_suffixes(config_bag):
subpaths = [rootpath] + option.impl_getpath(
option_bag.config_bag.config)[ori_index:].split('.')[:-1]
for suffix in dynopt._impl_get_suffixes(option_bag):
subpath = '.'.join([subp + suffix for subp in subpaths])
if isinstance(option, OnlyOption):
yield DynSymLinkOption(option,
@ -257,7 +261,12 @@ class OptionDescriptionWalk(CacheOptionDescription):
name = option.impl_getname()
if option.issubdyn():
if byname.startswith(name):
for doption in self.build_dynoptions(option, config_bag):
option_bag = OptionBag()
option_bag.set_option(option,
path,
None,
config_bag)
for doption in self.build_dynoptions(option_bag):
if byname == doption.impl_getname():
dpath = doption.impl_getpath(config_bag.config)
return (dpath, doption)
@ -319,9 +328,12 @@ class OptionDescriptionWalk(CacheOptionDescription):
subpath = ''
else:
subpath = self.impl_getpath(config_bag.config)
sconfig_bag = config_bag.copy('nooption')
sconfig_bag.option = child
for suffix in child._impl_get_suffixes(sconfig_bag):
option_bag = OptionBag()
option_bag.set_option(child,
subpath,
None,
config_bag)
for suffix in child._impl_get_suffixes(option_bag):
yield SynDynOptionDescription(child,
subpath,
suffix)
@ -339,11 +351,16 @@ class OptionDescriptionWalk(CacheOptionDescription):
subconfig,
config_bag):
for child in self._impl_st_getchildren(only_dyn=True):
sconfig_bag = config_bag.copy('nooption')
sconfig_bag.option = child
#sconfig_bag = config_bag.copy('nooption')
#sconfig_bag.option = child
cname = child.impl_getname()
if name.startswith(cname):
for value in child._impl_get_suffixes(sconfig_bag):
option_bag = OptionBag()
option_bag.set_option(child,
subconfig.cfgimpl_get_path(),
None,
config_bag)
for value in child._impl_get_suffixes(option_bag):
if name == cname + value:
return SynDynOptionDescription(child,
subconfig.cfgimpl_get_path(),