find in group or meta should return GroupConfig (and not KerneleGroupConfig) and remote 'first' attributs

This commit is contained in:
Emmanuel Garette 2018-10-07 16:29:56 +02:00
parent 5b5f06a612
commit e4362e9b09
3 changed files with 52 additions and 47 deletions

View file

@ -248,26 +248,26 @@ def test_meta_meta_set():
assert meta.config('meta.conf1').option('od1.i1').value.get() == meta.config('meta.conf2').option('od1.i1').value.get() == 7 assert meta.config('meta.conf1').option('od1.i1').value.get() == meta.config('meta.conf2').option('od1.i1').value.get() == 7
# #
dconfigs = [] dconfigs = []
for conf in meta.config.find('i1', value=7, first=True).config.list(): for conf in meta.config.find('i1', value=7).config.list():
dconfigs.append(conf._config_bag.context) dconfigs.append(conf._config_bag.context)
assert [conf1, conf2] == dconfigs assert [conf1, conf2] == dconfigs
meta.config('meta.conf1').option('od1.i1').value.set(8) meta.config('meta.conf1').option('od1.i1').value.set(8)
# #
dconfigs = [] dconfigs = []
for conf in meta.config.find('i1', first=True).config.list(): for conf in meta.config.find('i1').config.list():
dconfigs.append(conf._config_bag.context) dconfigs.append(conf._config_bag.context)
assert [conf1, conf2] == dconfigs assert [conf1, conf2] == dconfigs
assert conf2 == list(meta.config.find('i1', value=7, first=True).config.list())[0]._config_bag.context assert conf2 == list(meta.config.find('i1', value=7).config.list())[0]._config_bag.context
assert conf1 == list(meta.config.find('i1', value=8, first=True).config.list())[0]._config_bag.context assert conf1 == list(meta.config.find('i1', value=8).config.list())[0]._config_bag.context
# #
dconfigs = [] dconfigs = []
for conf in meta.config.find('i5', value=2, first=True).config.list(): for conf in meta.config.find('i5', value=2).config.list():
dconfigs.append(conf._config_bag.context) dconfigs.append(conf._config_bag.context)
assert [conf1, conf2] == dconfigs assert [conf1, conf2] == dconfigs
# #
raises(AttributeError, "meta.config.find('i1', value=10, first=True)") raises(AttributeError, "meta.config.find('i1', value=10)")
raises(AttributeError, "meta.config.find('not', value=10, first=True)") raises(AttributeError, "meta.config.find('not', value=10)")
raises(AttributeError, "meta.config.find('i6', first=True)") raises(AttributeError, "meta.config.find('i6')")
raises(ValueError, "meta.value.set('od1.i6', 7, only_config=True, force_default=True)") raises(ValueError, "meta.value.set('od1.i6', 7, only_config=True, force_default=True)")
raises(ValueError, "meta.value.set('od1.i6', 7, only_config=True, force_default_if_same=True)") raises(ValueError, "meta.value.set('od1.i6', 7, only_config=True, force_default_if_same=True)")
raises(ValueError, "meta.value.set('od1.i6', 7, only_config=True, force_dont_change_value=True)") raises(ValueError, "meta.value.set('od1.i6', 7, only_config=True, force_dont_change_value=True)")
@ -303,9 +303,17 @@ def test_group_find_firsts():
conf1 = Config(od2, session_id='conf1') conf1 = Config(od2, session_id='conf1')
conf2 = Config(od2, session_id='conf2') conf2 = Config(od2, session_id='conf2')
grp = GroupConfig([conf1, conf2]) grp = GroupConfig([conf1, conf2])
itr = grp.config.find('i1', first=True).config.list() itr = grp.config.find('i1').config.list()
conf1._config_bag.context == next(itr)._config_bag.context conf1._config_bag.context == next(itr)._config_bag.context
conf2._config_bag.context == next(itr)._config_bag.context conf2._config_bag.context == next(itr)._config_bag.context
try:
next(itr)
except StopIteration:
pass
except:
raise Exception('no')
else:
raise Exception('no')
def test_group_group(): def test_group_group():
@ -352,19 +360,19 @@ def test_meta_master_slaves():
conf2 = Config(od, session_id='conf2') conf2 = Config(od, session_id='conf2')
meta = MetaConfig([conf1, conf2]) meta = MetaConfig([conf1, conf2])
meta.property.read_only() meta.property.read_only()
itr = meta.config.find('ip_admin_eth0', first=True).config.list() itr = meta.config.find('ip_admin_eth0').config.list()
assert conf1._config_bag.context == next(itr)._config_bag.context assert conf1._config_bag.context == next(itr)._config_bag.context
assert conf2._config_bag.context == next(itr)._config_bag.context assert conf2._config_bag.context == next(itr)._config_bag.context
itr = meta.config.find('netmask_admin_eth0', first=True).config.list() itr = meta.config.find('netmask_admin_eth0').config.list()
assert conf1._config_bag.context == next(itr)._config_bag.context assert conf1._config_bag.context == next(itr)._config_bag.context
assert conf2._config_bag.context == next(itr)._config_bag.context assert conf2._config_bag.context == next(itr)._config_bag.context
meta.property.read_write() meta.property.read_write()
raises(AttributeError, "meta.config.find('netmask_admin_eth0', first=True)") raises(AttributeError, "meta.config.find('netmask_admin_eth0')")
itr = meta.unrestraint.config.find('netmask_admin_eth0', first=True).config.list() itr = meta.unrestraint.config.find('netmask_admin_eth0').config.list()
assert conf1._config_bag.context == next(itr)._config_bag.context assert conf1._config_bag.context == next(itr)._config_bag.context
assert conf2._config_bag.context == next(itr)._config_bag.context assert conf2._config_bag.context == next(itr)._config_bag.context
meta.property.read_only() meta.property.read_only()
itr = meta.config.find('netmask_admin_eth0', first=True).config.list() itr = meta.config.find('netmask_admin_eth0').config.list()
assert conf1._config_bag.context == next(itr)._config_bag.context assert conf1._config_bag.context == next(itr)._config_bag.context
assert conf2._config_bag.context == next(itr)._config_bag.context assert conf2._config_bag.context == next(itr)._config_bag.context

View file

@ -1086,10 +1086,10 @@ class _TiramisuContextConfig(TiramisuContext, _TiramisuContextConfigReset):
storage=None, storage=None,
metaconfig_prefix=None): metaconfig_prefix=None):
return Config(self._config_bag.context.duplicate(session_id, return Config(self._config_bag.context.duplicate(session_id,
persistent=persistent, persistent=persistent,
storage=storage, storage=storage,
metaconfig_prefix=metaconfig_prefix, metaconfig_prefix=metaconfig_prefix,
deep=True)) deep=True))
def metaconfig(self): def metaconfig(self):
return Config(self._config_bag.context.cfgimpl_get_meta()) return Config(self._config_bag.context.cfgimpl_get_meta())
@ -1108,15 +1108,11 @@ class _TiramisuContextGroupConfig(TiramisuContext):
def find(self, def find(self,
name: str, name: str,
value=undefined, value=undefined):
first: bool=False): """Find an or a list of config with finding option"""
"""Find an or a list of options""" return GroupConfig(self._config_bag.context.find_group(byname=name,
if first: byvalue=value,
return Config(self._config_bag.context.find_firsts(byname=name, config_bag=self._config_bag))
byvalue=value,
config_bag=self._config_bag))
else:
raise APIError('not implemented yet')
def __call__(self, def __call__(self,
path: Optional[str]): path: Optional[str]):
@ -1258,7 +1254,10 @@ class GroupConfig(TiramisuAPI):
session_id: Union[str, None]=None) -> None: session_id: Union[str, None]=None) -> None:
_children = [] _children = []
for child in children: for child in children:
_children.append(child._config_bag.context) if isinstance(child, TiramisuAPI):
_children.append(child._config_bag.context)
else:
_children.append(child)
config = KernelGroupConfig(_children, config = KernelGroupConfig(_children,
session_id=session_id) session_id=session_id)

View file

@ -871,14 +871,14 @@ class KernelGroupConfig(_CommonConfig):
return ret return ret
def find_firsts(self, def find_group(self,
config_bag, config_bag,
byname=None, byname=None,
bypath=undefined, bypath=undefined,
byoption=undefined, byoption=undefined,
byvalue=undefined, byvalue=undefined,
raise_if_not_found=True, raise_if_not_found=True,
_sub=False): _sub=False):
"""Find first not in current KernelGroupConfig, but in each children """Find first not in current KernelGroupConfig, but in each children
""" """
#if KernelMetaConfig, all children have same OptionDescription in context #if KernelMetaConfig, all children have same OptionDescription in context
@ -898,13 +898,13 @@ class KernelGroupConfig(_CommonConfig):
ret = [] ret = []
for child in self._impl_children: for child in self._impl_children:
if isinstance(child, KernelGroupConfig): if isinstance(child, KernelGroupConfig):
ret.extend(child.find_firsts(byname=byname, ret.extend(child.find_group(byname=byname,
bypath=bypath, bypath=bypath,
byoption=byoption, byoption=byoption,
byvalue=byvalue, byvalue=byvalue,
config_bag=config_bag, config_bag=config_bag,
raise_if_not_found=False, raise_if_not_found=False,
_sub=True)) _sub=True))
else: else:
try: try:
cconfig_bag = config_bag.copy() cconfig_bag = config_bag.copy()
@ -919,12 +919,10 @@ class KernelGroupConfig(_CommonConfig):
ret.append(child) ret.append(child)
except StopIteration: except StopIteration:
pass pass
if _sub: if not _sub:
return ret
else:
self._find_return_results(ret != [], self._find_return_results(ret != [],
raise_if_not_found) raise_if_not_found)
return KernelGroupConfig(ret) return ret
def impl_getname(self): def impl_getname(self):
return self._impl_name return self._impl_name