ConfigBag optimisation
This commit is contained in:
@ -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(),
|
||||
|
Reference in New Issue
Block a user