From 1ce16ad05d718ec87381f25f10346440c0162495 Mon Sep 17 00:00:00 2001 From: Emmanuel Garette Date: Sun, 22 Dec 2019 11:04:39 +0100 Subject: [PATCH] support of variables's file_name --- src/rougail/template.py | 37 +++++++++++-------- .../extra_dirs/extra/00-base.xml | 2 +- .../00-base.xml | 2 +- .../70container_fstabsymlink/00-base.xml | 2 +- .../70container_pathaccess/00-base.xml | 2 +- .../00-base.xml | 2 +- .../00-base.xml | 2 +- tests/templates/00base/result/mailname | 1 - .../11disabled_if_in_filelist/result/file | 1 - tests/test_template.py | 20 ++++++++-- 10 files changed, 44 insertions(+), 27 deletions(-) delete mode 100644 tests/templates/00base/result/mailname delete mode 100644 tests/templates/11disabled_if_in_filelist/result/file diff --git a/src/rougail/template.py b/src/rougail/template.py index 0fcf0f95..68044f01 100644 --- a/src/rougail/template.py +++ b/src/rougail/template.py @@ -11,8 +11,8 @@ import logging from typing import Dict from subprocess import call -from os import listdir, unlink, mkdir -from os.path import basename, join, split, isfile, isdir +from os import listdir, unlink, makedirs +from os.path import dirname, basename, join, split, isfile, isdir from tempfile import mktemp @@ -114,14 +114,16 @@ class CheetahTemplate(ChtTemplate): context, eosfunc: Dict, config: Config, - current_container: str): + current_container: str, + destfilename): """Initialize Creole CheetahTemplate """ ChtTemplate.__init__(self, file=filename, searchList=[context, eosfunc, {'is_defined' : IsDefined(context), 'creole_client' : CreoleClient(config), 'current_container':CreoleGet(current_container), - }]) + 'rougail_filename': destfilename + }]) class CreoleLeader: @@ -326,11 +328,13 @@ class CreoleTemplateEngine: # full path of the destination file log.info(_(f"Cheetah processing: '{destfilename}'")) try: - cheetah_template = CheetahTemplate(join(self.tmp_dir, filevar['source']), + cheetah_template = CheetahTemplate(join(self.tmp_dir, + filevar['source']), self.creole_variables_dict, self.eosfunc, self.config.config.copy(), - container) + container, + destfilename) data = str(cheetah_template) except CheetahNotFound as err: varname = err.args[0][13:-1] @@ -386,15 +390,18 @@ class CreoleTemplateEngine: log.info(_("Instantiating file '{filename}'")) container_dir = join(self.dest_dir, container) - if not isdir(container_dir): - mkdir(container_dir) - destfilename = join(container_dir, - filevar['source']) - self.process(destfilename, - filevar, - container) - self.change_properties(destfilename, - filevar) + filenames = filevar['name'] + if not isinstance(filenames, list): + filenames = [filenames] + for filename in filenames: + destfilename = join(container_dir, + filename[1:]) + makedirs(dirname(destfilename), exist_ok=True) + self.process(destfilename, + filevar, + container) + self.change_properties(destfilename, + filevar) def instance_files(self, container=None): diff --git a/tests/flattener_dicos/60action_external/extra_dirs/extra/00-base.xml b/tests/flattener_dicos/60action_external/extra_dirs/extra/00-base.xml index 52695658..4b5f66e4 100644 --- a/tests/flattener_dicos/60action_external/extra_dirs/extra/00-base.xml +++ b/tests/flattener_dicos/60action_external/extra_dirs/extra/00-base.xml @@ -8,7 +8,7 @@ description="Reconfigurer le serveur" image="backup.svg" url="extra.test.calc_url" - url_type="SymLinkOption"> + url_type="variable"> Reconfigurer ead_admin ead diff --git a/tests/flattener_dicos/70container_files_symlink_multi/00-base.xml b/tests/flattener_dicos/70container_files_symlink_multi/00-base.xml index 0b49c3b0..0f688c83 100644 --- a/tests/flattener_dicos/70container_files_symlink_multi/00-base.xml +++ b/tests/flattener_dicos/70container_files_symlink_multi/00-base.xml @@ -2,7 +2,7 @@ - + diff --git a/tests/flattener_dicos/70container_fstabsymlink/00-base.xml b/tests/flattener_dicos/70container_fstabsymlink/00-base.xml index 2be4768e..cd4fc081 100644 --- a/tests/flattener_dicos/70container_fstabsymlink/00-base.xml +++ b/tests/flattener_dicos/70container_fstabsymlink/00-base.xml @@ -4,7 +4,7 @@ - + diff --git a/tests/flattener_dicos/70container_pathaccess/00-base.xml b/tests/flattener_dicos/70container_pathaccess/00-base.xml index 646a3f70..02759a91 100644 --- a/tests/flattener_dicos/70container_pathaccess/00-base.xml +++ b/tests/flattener_dicos/70container_pathaccess/00-base.xml @@ -5,7 +5,7 @@ - nut_monitor_host + nut_monitor_host diff --git a/tests/flattener_dicos/70container_pathaccess_masterslaves/00-base.xml b/tests/flattener_dicos/70container_pathaccess_masterslaves/00-base.xml index 0fd436cd..f02fc153 100644 --- a/tests/flattener_dicos/70container_pathaccess_masterslaves/00-base.xml +++ b/tests/flattener_dicos/70container_pathaccess_masterslaves/00-base.xml @@ -5,7 +5,7 @@ - nut_monitor_host + nut_monitor_host diff --git a/tests/flattener_dicos/80container_files_symlink_without_source/00-base.xml b/tests/flattener_dicos/80container_files_symlink_without_source/00-base.xml index 62986e0a..eb17e95c 100644 --- a/tests/flattener_dicos/80container_files_symlink_without_source/00-base.xml +++ b/tests/flattener_dicos/80container_files_symlink_without_source/00-base.xml @@ -2,7 +2,7 @@ - + diff --git a/tests/templates/00base/result/mailname b/tests/templates/00base/result/mailname deleted file mode 100644 index bd51bf63..00000000 --- a/tests/templates/00base/result/mailname +++ /dev/null @@ -1 +0,0 @@ -oui diff --git a/tests/templates/11disabled_if_in_filelist/result/file b/tests/templates/11disabled_if_in_filelist/result/file deleted file mode 100644 index d907505b..00000000 --- a/tests/templates/11disabled_if_in_filelist/result/file +++ /dev/null @@ -1 +0,0 @@ -non diff --git a/tests/test_template.py b/tests/test_template.py index 576e6be8..52f9451e 100644 --- a/tests/test_template.py +++ b/tests/test_template.py @@ -18,6 +18,16 @@ def test_dir(request): return request.param +def find_files(dirname, root, files): + for filename in listdir(dirname): + abs_dirname = join(dirname, filename) + root_file = root + [filename] + if isdir(join(dirname, filename)): + find_files(abs_dirname, root_file, files) + else: + files.add(join(*root_file)) + + def test_dictionary(test_dir): test_dir = join(template_dirs, test_dir) tmp_dir = join(test_dir, 'tmp') @@ -45,13 +55,15 @@ def test_dictionary(test_dir): dest_dir) if isdir(join(dest_dir, 'test')): - list_templates = set(listdir(join(dest_dir, 'test'))) + list_templates = set() + find_files(join(dest_dir), [], list_templates) else: list_templates = set() - list_results = set(listdir(join(test_dir, 'result'))) + list_results = set() + find_files(join(test_dir, 'result'), [], list_results) assert list_templates == list_results - for result in listdir(join(test_dir, 'result')): - template_file = join(dest_dir, 'test', result) + for result in list_results: + template_file = join(dest_dir, result) if not isfile(template_file): raise Exception(f'{template_file} is not generated') with open(join(test_dir, 'result', result), 'r') as fh: