tiramisu/config.py can specify return type for find ('option', 'value', 'path') and remove get
user need replace config.get(value) by config.find(byname="value", type_='value')
This commit is contained in:
parent
c918191d21
commit
d100d66548
3 changed files with 17 additions and 38 deletions
|
@ -380,10 +380,10 @@ def test_allow_multiple_changes_from_config():
|
||||||
def test_access_by_get():
|
def test_access_by_get():
|
||||||
descr = make_description()
|
descr = make_description()
|
||||||
cfg = Config(descr)
|
cfg = Config(descr)
|
||||||
raises(NotFoundError, "cfg.get('idontexist')" )
|
raises(NotFoundError, "cfg.find(byname='idontexist')" )
|
||||||
assert cfg.get('wantref') == False
|
assert cfg.find_first(byname='wantref', type_='value') == False
|
||||||
assert cfg.gc.dummy == False
|
assert cfg.gc.dummy == False
|
||||||
assert cfg.get('dummy') == False
|
assert cfg.find_first(byname='dummy', type_='value') == False
|
||||||
|
|
||||||
def test_access_by_get_whith_hide():
|
def test_access_by_get_whith_hide():
|
||||||
b1 = BoolOption("b1", "", properties=(('hidden'),))
|
b1 = BoolOption("b1", "", properties=(('hidden'),))
|
||||||
|
@ -399,4 +399,4 @@ def test_access_by_get_whith_hide():
|
||||||
c = Config(descr)
|
c = Config(descr)
|
||||||
setting = c.cfgimpl_get_settings()
|
setting = c.cfgimpl_get_settings()
|
||||||
setting.read_write()
|
setting.read_write()
|
||||||
raises(NotFoundError, "c.get('b1')")
|
raises(NotFoundError, "c.find(byname='b1')")
|
||||||
|
|
|
@ -40,7 +40,7 @@ def test_base_config():
|
||||||
config = Config(descr)
|
config = Config(descr)
|
||||||
assert config.creole.general.activer_proxy_client == False
|
assert config.creole.general.activer_proxy_client == False
|
||||||
assert config.creole.general.nom_machine == "eoleng"
|
assert config.creole.general.nom_machine == "eoleng"
|
||||||
assert config.get('nom_machine') == "eoleng"
|
assert config.find_first(byname='nom_machine', type_='value') == "eoleng"
|
||||||
result = {'general.numero_etab': None, 'general.nombre_interfaces': 1,
|
result = {'general.numero_etab': None, 'general.nombre_interfaces': 1,
|
||||||
'general.serveur_ntp': [], 'interface1.ip_admin_eth0.ip_admin_eth0': None,
|
'general.serveur_ntp': [], 'interface1.ip_admin_eth0.ip_admin_eth0': None,
|
||||||
'general.mode_conteneur_actif': False, 'general.time_zone': 'Paris',
|
'general.mode_conteneur_actif': False, 'general.time_zone': 'Paris',
|
||||||
|
|
|
@ -280,23 +280,8 @@ class SubConfig(object):
|
||||||
context_descr = self.cfgimpl_get_context().cfgimpl_get_description()
|
context_descr = self.cfgimpl_get_context().cfgimpl_get_description()
|
||||||
return context_descr.get_path_by_opt(descr)
|
return context_descr.get_path_by_opt(descr)
|
||||||
|
|
||||||
def get(self, name):
|
def find(self, bytype=None, byname=None, byvalue=None, byattrs=None,
|
||||||
"""
|
type_='option'):
|
||||||
same as a `find_first()` method in a config that has identical names:
|
|
||||||
it returns the first item of an option named `name`
|
|
||||||
|
|
||||||
much like the attribute access way, except that
|
|
||||||
the search for the option is performed recursively in the whole
|
|
||||||
configuration tree.
|
|
||||||
|
|
||||||
:returns: option value.
|
|
||||||
"""
|
|
||||||
return self.cfgimpl_get_context()._find(byname=name, bytype=None,
|
|
||||||
byvalue=None, byattrs=None,
|
|
||||||
first=True, ret='value',
|
|
||||||
_subpath=self.getpath())
|
|
||||||
|
|
||||||
def find(self, bytype=None, byname=None, byvalue=None, byattrs=None):
|
|
||||||
"""
|
"""
|
||||||
finds a list of options recursively in the config
|
finds a list of options recursively in the config
|
||||||
|
|
||||||
|
@ -308,9 +293,11 @@ class SubConfig(object):
|
||||||
"""
|
"""
|
||||||
return self.cfgimpl_get_context()._find(bytype, byname, byvalue,
|
return self.cfgimpl_get_context()._find(bytype, byname, byvalue,
|
||||||
byattrs, first=False,
|
byattrs, first=False,
|
||||||
|
type_=type_,
|
||||||
_subpath=self.getpath())
|
_subpath=self.getpath())
|
||||||
|
|
||||||
def find_first(self, bytype=None, byname=None, byvalue=None, byattrs=None):
|
def find_first(self, bytype=None, byname=None, byvalue=None, byattrs=None,
|
||||||
|
type_='option'):
|
||||||
"""
|
"""
|
||||||
finds an option recursively in the config
|
finds an option recursively in the config
|
||||||
|
|
||||||
|
@ -322,6 +309,7 @@ class SubConfig(object):
|
||||||
"""
|
"""
|
||||||
return self.cfgimpl_get_context()._find(bytype, byname, byvalue,
|
return self.cfgimpl_get_context()._find(bytype, byname, byvalue,
|
||||||
byattrs, first=True,
|
byattrs, first=True,
|
||||||
|
type_=type_,
|
||||||
_subpath=self.getpath())
|
_subpath=self.getpath())
|
||||||
|
|
||||||
def make_dict(self, flatten=False, _currpath=None, withoption=None, withvalue=None):
|
def make_dict(self, flatten=False, _currpath=None, withoption=None, withvalue=None):
|
||||||
|
@ -382,7 +370,7 @@ class Config(SubConfig):
|
||||||
"main configuration management entry"
|
"main configuration management entry"
|
||||||
__slots__ = ('_cfgimpl_settings', '_cfgimpl_values')
|
__slots__ = ('_cfgimpl_settings', '_cfgimpl_values')
|
||||||
|
|
||||||
def __init__(self, descr, valid_opt_names=True):
|
def __init__(self, descr):
|
||||||
""" Configuration option management master class
|
""" Configuration option management master class
|
||||||
|
|
||||||
:param descr: describes the configuration schema
|
:param descr: describes the configuration schema
|
||||||
|
@ -394,15 +382,6 @@ class Config(SubConfig):
|
||||||
"""
|
"""
|
||||||
self._cfgimpl_settings = Setting()
|
self._cfgimpl_settings = Setting()
|
||||||
self._cfgimpl_values = Values(self)
|
self._cfgimpl_values = Values(self)
|
||||||
#if valid_opt_names:
|
|
||||||
# # some api members shall not be used as option's names !
|
|
||||||
# #FIXME fait une boucle infini ...
|
|
||||||
# #methods = getmembers(self, ismethod)
|
|
||||||
# #slots = tuple([key for key, value in methods
|
|
||||||
# # if not key.startswith("_")])
|
|
||||||
# slots = []
|
|
||||||
#else:
|
|
||||||
# slots = []
|
|
||||||
super(Config, self).__init__(descr, None, self) # , slots)
|
super(Config, self).__init__(descr, None, self) # , slots)
|
||||||
self._cfgimpl_build_all_paths()
|
self._cfgimpl_build_all_paths()
|
||||||
|
|
||||||
|
@ -454,7 +433,7 @@ class Config(SubConfig):
|
||||||
def getpath(self):
|
def getpath(self):
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def _find(self, bytype, byname, byvalue, byattrs, first, ret='option',
|
def _find(self, bytype, byname, byvalue, byattrs, first, type_='option',
|
||||||
_subpath=None):
|
_subpath=None):
|
||||||
"""
|
"""
|
||||||
convenience method for finding an option that lives only in the subtree
|
convenience method for finding an option that lives only in the subtree
|
||||||
|
@ -500,8 +479,8 @@ class Config(SubConfig):
|
||||||
else:
|
else:
|
||||||
continue
|
continue
|
||||||
return True
|
return True
|
||||||
if ret not in ('option', 'path', 'value'):
|
if type_ not in ('option', 'path', 'value'):
|
||||||
raise ValueError('unknown ret type {} for _find'.format(ret))
|
raise ValueError('unknown type_ type {} for _find'.format(type_))
|
||||||
find_results = []
|
find_results = []
|
||||||
opts, paths = self.cfgimpl_get_description()._cache_paths
|
opts, paths = self.cfgimpl_get_description()._cache_paths
|
||||||
for index in range(0, len(paths)):
|
for index in range(0, len(paths)):
|
||||||
|
@ -524,9 +503,9 @@ class Config(SubConfig):
|
||||||
value = getattr(self, path)
|
value = getattr(self, path)
|
||||||
except: # a property restricts the access of the value
|
except: # a property restricts the access of the value
|
||||||
continue
|
continue
|
||||||
if ret == 'value':
|
if type_ == 'value':
|
||||||
retval = value
|
retval = value
|
||||||
elif ret == 'path':
|
elif type_ == 'path':
|
||||||
retval = path
|
retval = path
|
||||||
else:
|
else:
|
||||||
retval = option
|
retval = option
|
||||||
|
|
Loading…
Reference in a new issue