From d5d5e30b923e3571423984f3d160de2226a1a272 Mon Sep 17 00:00:00 2001 From: deadc0de6 Date: Sun, 12 Jan 2020 10:43:51 +0100 Subject: [PATCH] dynamically load jinja2 custom functions --- dotdrop/templategen.py | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/dotdrop/templategen.py b/dotdrop/templategen.py index d1db7db..a65c27a 100644 --- a/dotdrop/templategen.py +++ b/dotdrop/templategen.py @@ -6,6 +6,7 @@ jinja2 template generator """ import os +import inspect from jinja2 import Environment, FileSystemLoader # local imports @@ -49,13 +50,20 @@ class Templategen: # adding header method self.env.globals['header'] = self._header # adding helper methods - self.env.globals['exists'] = jhelpers.exists - self.env.globals['exists_in_path'] = jhelpers.exists_in_path - self.env.globals['basename'] = jhelpers.basename - self.env.globals['dirname'] = jhelpers.dirname + self._load_funcs_to_dic(jhelpers, self.env.globals) if self.debug: self.log.dbg('template additional variables: {}'.format(variables)) + def _load_funcs_to_dic(self, mod, dic): + """dynamically load functions from module to dic""" + for m in inspect.getmembers(mod): + name, func = m + if not inspect.isfunction(func): + continue + if self.debug: + self.log.dbg('load function \"{}\"'.format(name)) + dic[name] = func + def generate(self, src): """render template from path""" if not os.path.exists(src):