todict works with Metaconfig
This commit is contained in:
parent
1691e38db5
commit
113b7a3410
3 changed files with 51 additions and 46 deletions
|
@ -1,6 +1,6 @@
|
|||
# from json import dumps, loads
|
||||
try:
|
||||
from tiramisu_json_api import Config
|
||||
from tiramisu_api import Config
|
||||
class TestConfig(Config):
|
||||
def __init__(self,
|
||||
config):
|
||||
|
|
|
@ -8,6 +8,7 @@ from tiramisu import IntOption, StrOption, NetworkOption, NetmaskOption, BoolOpt
|
|||
Params, ParamOption, ParamValue
|
||||
from tiramisu.error import ConfigError, ConflictError, PropertiesOptionError, LeadershipError, APIError
|
||||
from tiramisu.storage import list_sessions
|
||||
from .config import config_type, get_config
|
||||
|
||||
|
||||
def teardown_function(function):
|
||||
|
@ -76,8 +77,6 @@ def test_path():
|
|||
assert meta.config('conf2').config.path() == 'meta.conf2'
|
||||
|
||||
|
||||
#FIXME ne pas mettre 2 meta dans une config
|
||||
#FIXME ne pas mettre 2 OD differents dans un meta
|
||||
def test_none():
|
||||
meta = make_metaconfig()
|
||||
assert meta.option('od1.i3').value.get() is meta.config('conf1').option('od1.i3').value.get() is meta.config('conf2').option('od1.i3').value.get() is None
|
||||
|
@ -112,10 +111,13 @@ def test_none():
|
|||
assert meta.config(None).config.name() == meta.config.name()
|
||||
|
||||
|
||||
def test_reset():
|
||||
def test_metaconfig_reset(config_type):
|
||||
meta = make_metaconfig()
|
||||
assert meta.option('od1.i2').value.get() == 1
|
||||
meta.option('od1.i2').value.set(2)
|
||||
meta_api = get_config(meta, config_type)
|
||||
assert meta_api.option('od1.i2').value.get() == 1
|
||||
meta_api.option('od1.i2').value.set(2)
|
||||
if config_type == 'tiramisu-api':
|
||||
meta_api.send()
|
||||
meta.config('conf1').option('od1.i2').value.set(3)
|
||||
assert meta.option('od1.i2').value.get() == 2
|
||||
assert meta.config('conf1').option('od1.i2').value.get() == 3
|
||||
|
|
|
@ -712,9 +712,29 @@ class _TiramisuOption(CommonTiramisu):
|
|||
self._option_bag,
|
||||
config)
|
||||
raise APIError(_('please specify a valid sub function ({})').format(subfunc)) # pragma: no cover
|
||||
#__________________________________________________________________________________________________
|
||||
#
|
||||
|
||||
|
||||
class _TiramisuOptionDescription(_TiramisuOption):
|
||||
class TiramisuConfig(TiramisuHelp):
|
||||
def __init__(self,
|
||||
config_bag: Optional[ConfigBag]) -> None:
|
||||
self._config_bag = config_bag
|
||||
|
||||
def _return_config(self,
|
||||
config):
|
||||
if isinstance(config, KernelConfig):
|
||||
return Config(config)
|
||||
if isinstance(config, KernelMetaConfig):
|
||||
return MetaConfig(config)
|
||||
if isinstance(config, KernelMixConfig):
|
||||
return MixConfig([], config)
|
||||
if isinstance(config, KernelGroupConfig):
|
||||
return GroupConfig(config)
|
||||
raise Exception(_('unknown config type {}').format(type(config)))
|
||||
|
||||
|
||||
class _TiramisuOptionDescription(_TiramisuOption, TiramisuConfig):
|
||||
def find(self,
|
||||
name: str,
|
||||
value=undefined,
|
||||
|
@ -811,7 +831,7 @@ class _TiramisuOptionDescription(_TiramisuOption):
|
|||
clearable: str="all",
|
||||
remotable: str="minimum"):
|
||||
root = self._get_option().impl_getpath()
|
||||
self._tiramisu_dict = TiramisuDict(Config(self._config_bag.context),
|
||||
self._tiramisu_dict = TiramisuDict(self._return_config(self._config_bag.context),
|
||||
root=root,
|
||||
clearable=clearable,
|
||||
remotable=remotable)
|
||||
|
@ -863,29 +883,9 @@ class TiramisuOption(CommonTiramisuOption):
|
|||
config_bag=config_bag)
|
||||
|
||||
|
||||
#__________________________________________________________________________________________________
|
||||
#
|
||||
|
||||
|
||||
class TiramisuContext(TiramisuHelp):
|
||||
def __init__(self,
|
||||
config_bag: Optional[ConfigBag]) -> None:
|
||||
self._config_bag = config_bag
|
||||
|
||||
def _return_config(self,
|
||||
config):
|
||||
if isinstance(config, KernelConfig):
|
||||
return Config(config)
|
||||
if isinstance(config, KernelMetaConfig):
|
||||
return MetaConfig(config)
|
||||
if isinstance(config, KernelMixConfig):
|
||||
return MixConfig([], config)
|
||||
if isinstance(config, KernelGroupConfig):
|
||||
return GroupConfig(config)
|
||||
raise Exception(_('unknown config type {}').format(type(config)))
|
||||
|
||||
|
||||
class TiramisuContextInformation(TiramisuContext):
|
||||
class TiramisuContextInformation(TiramisuConfig):
|
||||
"""Manage config informations"""
|
||||
def get(self, name, default=undefined):
|
||||
"""Get an information"""
|
||||
|
@ -904,7 +904,7 @@ class TiramisuContextInformation(TiramisuContext):
|
|||
return self._config_bag.context.impl_list_information()
|
||||
|
||||
|
||||
class TiramisuContextValue(TiramisuContext):
|
||||
class TiramisuContextValue(TiramisuConfig):
|
||||
"""Manage config value"""
|
||||
def mandatory(self):
|
||||
"""Return path of options with mandatory property without any value"""
|
||||
|
@ -988,7 +988,7 @@ class TiramisuContextValue(TiramisuContext):
|
|||
True)
|
||||
|
||||
|
||||
class TiramisuContextOwner(TiramisuContext):
|
||||
class TiramisuContextOwner(TiramisuConfig):
|
||||
"""Global owner"""
|
||||
|
||||
def get(self):
|
||||
|
@ -1005,7 +1005,7 @@ class TiramisuContextOwner(TiramisuContext):
|
|||
self._config_bag.context.cfgimpl_get_values().set_context_owner(obj_owner)
|
||||
|
||||
|
||||
class TiramisuContextProperty(TiramisuContext):
|
||||
class TiramisuContextProperty(TiramisuConfig):
|
||||
"""Manage config properties"""
|
||||
|
||||
def read_only(self):
|
||||
|
@ -1136,7 +1136,7 @@ class TiramisuContextProperty(TiramisuContext):
|
|||
raise ValueError(_('unknown type {}').format(type))
|
||||
|
||||
|
||||
class TiramisuContextPermissive(TiramisuContext):
|
||||
class TiramisuContextPermissive(TiramisuConfig):
|
||||
"""Manage config permissives"""
|
||||
|
||||
def get(self):
|
||||
|
@ -1180,7 +1180,7 @@ class TiramisuContextPermissive(TiramisuContext):
|
|||
self.set(frozenset(props))
|
||||
|
||||
|
||||
class TiramisuContextOption(TiramisuContext):
|
||||
class TiramisuContextOption(TiramisuConfig):
|
||||
def __init__(self,
|
||||
*args,
|
||||
**kwargs) -> None:
|
||||
|
@ -1286,7 +1286,7 @@ class TiramisuContextOption(TiramisuContext):
|
|||
def _load_dict(self,
|
||||
clearable="all",
|
||||
remotable="minimum"):
|
||||
self._tiramisu_dict = TiramisuDict(Config(self._config_bag.context),
|
||||
self._tiramisu_dict = TiramisuDict(self._return_config(self._config_bag.context),
|
||||
root=None,
|
||||
clearable=clearable,
|
||||
remotable=remotable)
|
||||
|
@ -1330,7 +1330,7 @@ class _TiramisuContextConfigReset():
|
|||
self._config_bag.context.cfgimpl_reset_cache(None, None)
|
||||
|
||||
|
||||
class _TiramisuContextConfig(TiramisuContext, _TiramisuContextConfigReset):
|
||||
class _TiramisuContextConfig(TiramisuConfig, _TiramisuContextConfigReset):
|
||||
"""Actions to Config"""
|
||||
def name(self):
|
||||
return self._config_bag.context.impl_getname()
|
||||
|
@ -1361,7 +1361,7 @@ class _TiramisuContextConfig(TiramisuContext, _TiramisuContextConfigReset):
|
|||
return self._config_bag.context.cfgimpl_get_config_path()
|
||||
|
||||
|
||||
class _TiramisuContextGroupConfig(TiramisuContext):
|
||||
class _TiramisuContextGroupConfig(TiramisuConfig):
|
||||
"""Actions to GroupConfig"""
|
||||
def name(self):
|
||||
"""Get config name"""
|
||||
|
@ -1421,9 +1421,12 @@ class _TiramisuContextGroupConfig(TiramisuContext):
|
|||
class _TiramisuContextMixConfig(_TiramisuContextGroupConfig, _TiramisuContextConfigReset):
|
||||
"""Actions to MixConfig"""
|
||||
def pop(self,
|
||||
session_id):
|
||||
session_id=None,
|
||||
config=None):
|
||||
"""Remove config from MetaConfig"""
|
||||
return self._return_config(self._config_bag.context.pop_config(session_id=session_id))
|
||||
if __debug__ and None not in [session_id, config]:
|
||||
raise APIError(_('cannot set session_id and config together'))
|
||||
return self._return_config(self._config_bag.context.pop_config(session_id=session_id, config=config))
|
||||
|
||||
def add(self,
|
||||
config):
|
||||
|
@ -1444,7 +1447,8 @@ class _TiramisuContextMetaConfig(_TiramisuContextMixConfig):
|
|||
return self._return_config(new_config)
|
||||
|
||||
|
||||
class TiramisuContextCache(TiramisuContext):
|
||||
|
||||
class TiramisuContextCache(TiramisuConfig):
|
||||
def reset(self):
|
||||
self._config_bag.context.cfgimpl_reset_cache(None, None)
|
||||
|
||||
|
@ -1521,7 +1525,6 @@ class TiramisuDispatcherOption(TiramisuDispatcher, TiramisuContextOption):
|
|||
self._config_bag)
|
||||
|
||||
|
||||
#__________________________________________________________________________________________________
|
||||
class Config(TiramisuAPI):
|
||||
"""Root config object that enables us to handle the configuration options"""
|
||||
def __init__(self,
|
||||
|
|
Loading…
Reference in a new issue