From fb071321e94e3f5befc0d63ccb6fe73de1aebb5e Mon Sep 17 00:00:00 2001 From: deadc0de6 Date: Sat, 15 Feb 2020 13:05:17 +0100 Subject: [PATCH] add func_file and filter_file for the config (for #210) --- dotdrop/cfg_yaml.py | 31 ++++++++++++++++++++----------- tests-ng/filter_file.sh | 4 ++++ tests-ng/func_file.sh | 5 +++++ 3 files changed, 29 insertions(+), 11 deletions(-) diff --git a/dotdrop/cfg_yaml.py b/dotdrop/cfg_yaml.py index 8811f80..de1842e 100644 --- a/dotdrop/cfg_yaml.py +++ b/dotdrop/cfg_yaml.py @@ -23,7 +23,7 @@ from dotdrop.exceptions import YamlException class CfgYaml: # global entries - key_settings = 'config' + key_settings = Settings.key_yaml key_dotfiles = 'dotfiles' key_profiles = 'profiles' key_actions = 'actions' @@ -61,12 +61,12 @@ class CfgYaml: key_import_ignore_key = 'optional' # settings - key_settings_dotpath = 'dotpath' - key_settings_workdir = 'workdir' - key_settings_link_dotfile_default = 'link_dotfile_default' - key_settings_noempty = 'ignoreempty' - key_settings_minversion = 'minversion' - key_imp_link = 'link_on_import' + key_settings_dotpath = Settings.key_dotpath + key_settings_workdir = Settings.key_workdir + key_settings_link_dotfile_default = Settings.key_link_dotfile_default + key_settings_noempty = Settings.key_ignoreempty + key_settings_minversion = Settings.key_minversion + key_imp_link = Settings.key_link_on_import # link values lnk_nolink = LinkTypes.NOLINK.name.lower() @@ -216,7 +216,9 @@ class CfgYaml: def _resolve_dotfile_paths(self): """resolve dotfile paths""" - t = Templategen(variables=self.variables) + t = Templategen(variables=self.variables, + func_file=self.settings[Settings.key_func_file], + filter_file=self.settings[Settings.key_filter_file]) for dotfile in self.dotfiles.values(): # src @@ -248,7 +250,9 @@ class CfgYaml: def _rec_resolve_vars(self, variables): """recursive resolve variables""" default = self._get_variables_dict(self.profile) - t = Templategen(variables=self._merge_dict(default, variables)) + t = Templategen(variables=self._merge_dict(default, variables), + func_file=self.settings[Settings.key_func_file], + filter_file=self.settings[Settings.key_filter_file]) for k in variables.keys(): val = variables[k] while Templategen.var_is_template(val): @@ -284,7 +288,10 @@ class CfgYaml: self._debug_vars(merged) # resolve profile includes - t = Templategen(variables=merged) + t = Templategen(variables=merged, + func_file=self.settings[Settings.key_func_file], + filter_file=self.settings[Settings.key_filter_file]) + for k, v in self.profiles.items(): if self.key_profile_include in v: new = [] @@ -314,7 +321,9 @@ class CfgYaml: def _apply_variables(self): """template any needed parts of the config""" - t = Templategen(variables=self.variables) + t = Templategen(variables=self.variables, + func_file=self.settings[Settings.key_func_file], + filter_file=self.settings[Settings.key_filter_file]) # import_actions new = [] diff --git a/tests-ng/filter_file.sh b/tests-ng/filter_file.sh index 09aec9e..d82edf2 100755 --- a/tests-ng/filter_file.sh +++ b/tests-ng/filter_file.sh @@ -77,6 +77,8 @@ profiles: p1: dotfiles: - f_abc +variables: + filt: "{{@@ 'whatever' | filter1 @@}}" _EOF #cat ${cfg} @@ -116,6 +118,7 @@ echo "{{@@ "abc" | filter1 @@}}" >> ${tmps}/dotfiles/abc echo "{{@@ "arg1" | filter2('arg2') @@}}" >> ${tmps}/dotfiles/abc echo "{{@@ "13" | filter3() @@}}" >> ${tmps}/dotfiles/abc echo "{{@@ "something" | filter_ext() @@}}" >> ${tmps}/dotfiles/abc +echo "{{@@ filt @@}}variable" >> ${tmps}/dotfiles/abc # install cd ${ddpath} | ${bin} install -f -c ${cfg} -p p1 -V @@ -129,6 +132,7 @@ grep '^external$' ${tmpd}/abc >/dev/null set +e grep '^something$' ${tmpd}/abc >/dev/null && exit 1 set -e +grep '^filteredvariable$' ${tmpd}/abc > /dev/null ## CLEANING rm -rf ${tmps} ${tmpd} ${filter_file} ${filter_file2} ${filter_file3} diff --git a/tests-ng/func_file.sh b/tests-ng/func_file.sh index bc4a002..7c68a1c 100755 --- a/tests-ng/func_file.sh +++ b/tests-ng/func_file.sh @@ -77,6 +77,8 @@ profiles: p1: dotfiles: - f_abc +variables: + func: "{{@@ func1(False) @@}}" _EOF #cat ${cfg} @@ -132,6 +134,8 @@ echo "{%@@ if func3("whatever") == 42 @@%}" >> ${tmps}/dotfiles/abc echo "externalok" >> ${tmps}/dotfiles/abc echo "{%@@ endif @@%}" >> ${tmps}/dotfiles/abc +echo "{{@@ func @@}}added" >> ${tmps}/dotfiles/abc + # install cd ${ddpath} | ${bin} install -f -c ${cfg} -p p1 -V @@ -144,6 +148,7 @@ grep '^externalok$' ${tmpd}/abc >/dev/null set +e grep '^nope$' ${tmpd}/abc >/dev/null && exit 1 set -e +grep '^Falseadded$' ${tmpd}/abc >/dev/null ## CLEANING rm -rf ${tmps} ${tmpd} ${func_file} ${func_file2} ${func_file3}