From 963e93295ae197ea785d75101937c20120c2e6e5 Mon Sep 17 00:00:00 2001 From: Emmanuel Garette Date: Mon, 13 Jan 2020 19:44:24 +0100 Subject: [PATCH] tiramisu is now async --- src/rougail/template.py | 110 +++++++++++++++++++--------------------- 1 file changed, 53 insertions(+), 57 deletions(-) diff --git a/src/rougail/template.py b/src/rougail/template.py index e72fae2f..ae0f6c0a 100644 --- a/src/rougail/template.py +++ b/src/rougail/template.py @@ -114,8 +114,6 @@ class CheetahTemplate(ChtTemplate): filename: str, context, eosfunc: Dict, - config: Config, - current_container: str, destfilename, variable): """Initialize Creole CheetahTemplate @@ -228,12 +226,12 @@ class CreoleLeader: def __contains__(self, item): return item in self._value - def add_slave(self, config, name, path): + async def add_slave(self, config, name, path): if isinstance(self._value, list): values = [] for idx in range(len(self._value)): try: - values.append(config.option(path, idx).value.get()) + values.append(await config.option(path, idx).value.get()) except PropertiesOptionError as err: values.append(err) else: @@ -274,59 +272,48 @@ class CreoleTemplateEngine: eos[func] = getattr(eosfunc, func) self.eosfunc = eos self.creole_variables_dict = {} - for option in self.config.option.list(type='all'): - namespace = option.option.name() - if namespace in ['containers', 'actions']: - 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_creole(self, - config, - optiondescription): - for option in optiondescription.list('all'): - if option.option.isoptiondescription(): - if option.option.isleadership(): - for idx, suboption in enumerate(option.list('all')): + async def load_eole_variables_creole(self, + config, + optiondescription): + for option in await optiondescription.list('all'): + if await option.option.isoptiondescription(): + if await option.option.isleadership(): + for idx, suboption in enumerate(await option.list('all')): if idx == 0: - leader = CreoleLeader(suboption.value.get()) - self.creole_variables_dict[suboption.option.name()] = leader + leader = CreoleLeader(await suboption.value.get()) + self.creole_variables_dict[await suboption.option.name()] = leader else: - leader.add_slave(config, - suboption.option.name(), - suboption.option.path()) + await leader.add_slave(config, + await suboption.option.name(), + await suboption.option.path()) else: - self.load_eole_variables_creole(config, - option) + await self.load_eole_variables_creole(config, + option) else: - self.creole_variables_dict[option.option.name()] = option.value.get() + self.creole_variables_dict[await option.option.name()] = await option.value.get() - def load_eole_variables(self, - config, - namespace, - optiondescription): + async def load_eole_variables(self, + config, + namespace, + optiondescription): families = {} - for family in optiondescription.list('all'): + for family in await 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')): + for variable in await family.list('all'): + if await variable.option.isoptiondescription() and await variable.option.isleadership(): + for idx, suboption in enumerate(await variable.list('all')): if idx == 0: - leader = CreoleLeader(suboption.value.get()) - leader_name = suboption.option.name() + leader = CreoleLeader(await suboption.value.get()) + leader_name = await suboption.option.name() else: - leader.add_slave(config, - suboption.option.name(), - suboption.option.path()) + await leader.add_slave(config, + await suboption.option.name(), + await suboption.option.path()) variables[leader_name] = leader else: - variables[variable.option.name()] = variable.value.get() - families[family.option.name()] = CreoleExtra(variables) + variables[await variable.option.name()] = await variable.value.get() + families[await family.option.name()] = CreoleExtra(variables) self.creole_variables_dict[namespace] = CreoleExtra(families) def patch_template(self, @@ -388,8 +375,6 @@ class CreoleTemplateEngine: filevar['source']), self.creole_variables_dict, self.eosfunc, - self.config.config.copy(), - container, destfilename, variable) data = str(cheetah_template) @@ -471,23 +456,34 @@ class CreoleTemplateEngine: self.change_properties(destfilename, filevar) - def instance_files(self, - container=None): + async def instance_files(self, + container=None): """Run templatisation on all files of all containers @param container: name of a container @type container: C{str} """ + for option in await self.config.option.list(type='all'): + namespace = await option.option.name() + if namespace in ['containers', 'actions']: + continue + elif namespace == 'creole': + await self.load_eole_variables_creole(self.config, + option) + else: + await self.load_eole_variables(self.config, + namespace, + option) for template in listdir(self.distrib_dir): self.prepare_template(join(self.distrib_dir, template)) - for container_obj in self.config.option('containers').list('all'): - current_container = container_obj.option.doc() + for container_obj in await self.config.option('containers').list('all'): + current_container = await container_obj.option.doc() if container is not None and container != current_container: continue - for fills in container_obj.list('all'): - if fills.option.name() == 'files': - for fill_obj in fills.list('all'): - fill = fill_obj.value.dict() + for fills in await container_obj.list('all'): + if await fills.option.name() == 'files': + for fill_obj in await fills.list('all'): + fill = await fill_obj.value.dict() filename = fill['source'] distib_file = join(self.distrib_dir, filename) if not isfile(distib_file): @@ -499,7 +495,7 @@ class CreoleTemplateEngine: log.debug(_("Instantiation of file '{filename}' disabled")) -def generate(config: Config, +async def generate(config: Config, eosfunc_file: str, distrib_dir: str, tmp_dir: str, @@ -510,4 +506,4 @@ def generate(config: Config, distrib_dir, tmp_dir, dest_dir) - engine.instance_files(container=container) + await engine.instance_files(container=container)