can access to extra variables

This commit is contained in:
2019-12-22 15:35:50 +01:00
parent 3eb208b2c1
commit 509bf21d08
7 changed files with 138 additions and 7 deletions

View File

@ -241,6 +241,19 @@ class CreoleLeader:
self.slave[name] = values
class CreoleExtra:
def __init__(self,
suboption: Dict) -> None:
self.suboption = suboption
def __getattr__(self,
key: str) -> Any:
return self.suboption[key]
def __repr__(self):
return self.suboption.__str__()
class CreoleTemplateEngine:
"""Engine to process Creole cheetah template
"""
@ -261,10 +274,21 @@ class CreoleTemplateEngine:
eos[func] = getattr(eosfunc, func)
self.eosfunc = eos
self.creole_variables_dict = {}
self.load_eole_variables(self.config, self.config.option('creole'))
for option in self.config.option.list(type='all'):
namespace = option.option.name()
if namespace == 'containers':
continue
elif namespace == 'creole':
self.load_eole_variables_creole(self.config,
option)
else:
self.load_eole_variables(self.config,
namespace,
option)
def load_eole_variables(self, config, optiondescription):
# remplacement des variables EOLE
def load_eole_variables_creole(self,
config,
optiondescription):
for option in optiondescription.list('all'):
if option.option.isoptiondescription():
if option.option.isleadership():
@ -277,10 +301,34 @@ class CreoleTemplateEngine:
suboption.option.name(),
suboption.option.path())
else:
self.load_eole_variables(config, option)
self.load_eole_variables_creole(config,
option)
else:
self.creole_variables_dict[option.option.name()] = option.value.get()
def load_eole_variables(self,
config,
namespace,
optiondescription):
families = {}
for family in optiondescription.list('all'):
variables = {}
for variable in family.list('all'):
if variable.option.isoptiondescription() and variable.option.isleadership():
for idx, suboption in enumerate(variable.list('all')):
if idx == 0:
leader = CreoleLeader(suboption.value.get())
leader_name = suboption.value.name()
else:
leader.add_slave(config,
suboption.option.name(),
suboption.option.path())
variables[leader_name] = leader
else:
variables[variable.option.name()] = variable.value.get()
families[family.option.name()] = CreoleExtra(variables)
self.creole_variables_dict[namespace] = CreoleExtra(families)
def patch_template(self,
filename: str):
"""Apply patch to a template