diff --git a/src/rougail/template.py b/src/rougail/template.py index de2eb916..975b8093 100644 --- a/src/rougail/template.py +++ b/src/rougail/template.py @@ -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 diff --git a/tests/templates/60extra/00-base.xml b/tests/templates/60extra/00-base.xml new file mode 100644 index 00000000..3e6524aa --- /dev/null +++ b/tests/templates/60extra/00-base.xml @@ -0,0 +1,84 @@ + + + + + + + + False + + + /etc/mailname + + + False + + + mailname + + + True + + + + basic + + + + + normal + + oui + non + force_default_on_freeze + frozen + hidden + mandatory + normal + non + + + oui + non + force_default_on_freeze + frozen + hidden + mandatory + normal + non + + + + + + + normal + + mandatory + normal + Exportation de la base de ejabberd + + + none + daily + weekly + monthly + mandatory + normal + + non + creole.general.activer_ejabberd + none + daily + + + + pre + post + mandatory + normal + pre + + + + diff --git a/tests/templates/60extra/result/test/etc/mailname b/tests/templates/60extra/result/test/etc/mailname new file mode 100644 index 00000000..174cc656 --- /dev/null +++ b/tests/templates/60extra/result/test/etc/mailname @@ -0,0 +1 @@ +Exportation de la base de ejabberd diff --git a/tests/templates/60extra/tmpl/mailname b/tests/templates/60extra/tmpl/mailname new file mode 100644 index 00000000..cd745cac --- /dev/null +++ b/tests/templates/60extra/tmpl/mailname @@ -0,0 +1 @@ +%%extra.ejabberd.description diff --git a/tests/templates/70container_files_symlink_multi_variable/dest/test/etc/mailname b/tests/templates/70container_files_symlink_multi_variable/dest/test/etc/mailname deleted file mode 100644 index 0288f489..00000000 --- a/tests/templates/70container_files_symlink_multi_variable/dest/test/etc/mailname +++ /dev/null @@ -1 +0,0 @@ -mailname diff --git a/tests/templates/70container_files_symlink_multi_variable/dest/test/etc/mailname2 b/tests/templates/70container_files_symlink_multi_variable/dest/test/etc/mailname2 deleted file mode 100644 index 80d43ca5..00000000 --- a/tests/templates/70container_files_symlink_multi_variable/dest/test/etc/mailname2 +++ /dev/null @@ -1 +0,0 @@ -mailname2 diff --git a/tests/templates/70container_files_symlink_multi_variable/tmp/mailname b/tests/templates/70container_files_symlink_multi_variable/tmp/mailname deleted file mode 100644 index 5ecb01bb..00000000 --- a/tests/templates/70container_files_symlink_multi_variable/tmp/mailname +++ /dev/null @@ -1 +0,0 @@ -%%rougail_variable