rewrite jinja.py
This commit is contained in:
parent
e6328b5cea
commit
e3338a1f18
@ -8,24 +8,42 @@ import sys
|
|||||||
import jinja2
|
import jinja2
|
||||||
import yaml
|
import yaml
|
||||||
|
|
||||||
NGX_JINJA_MODULES = sorted(set(os.getenv('NGX_JINJA_MODULES', 'os os.path sys netaddr psutil re wcmatch').split(sep=' ')))
|
|
||||||
|
|
||||||
ME = sys.argv[0]
|
J2_MODULES_DEFAULT = 'os os.path sys netaddr psutil re wcmatch'
|
||||||
|
J2_SUFFIX_DEFAULT = '.j2'
|
||||||
NGX_JINJA_SUFFIX = os.getenv('NGX_JINJA_SUFFIX', '.j2')
|
J2_CFG_PATHS = [
|
||||||
if NGX_JINJA_SUFFIX == '':
|
|
||||||
raise ValueError('NGX_JINJA_SUFFIX is empty')
|
|
||||||
if not NGX_JINJA_SUFFIX.startswith('.'):
|
|
||||||
raise ValueError('NGX_JINJA_SUFFIX does not start with dot (".")')
|
|
||||||
|
|
||||||
NGX_JINJA_CONFIG = os.getenv('NGX_JINJA_CONFIG', '')
|
|
||||||
if (NGX_JINJA_CONFIG != '') and (not os.path.exists(NGX_JINJA_CONFIG)):
|
|
||||||
print(f'{ME}: config does not exist, skipping: {NGX_JINJA_CONFIG}', file=sys.stderr)
|
|
||||||
|
|
||||||
NGX_JINJA_CONFIG_NAMES = [
|
|
||||||
'/angie/jinja',
|
'/angie/jinja',
|
||||||
'/etc/angie/jinja',
|
'/etc/angie/jinja',
|
||||||
]
|
]
|
||||||
|
J2_CFG_EXTS = [
|
||||||
|
'yml',
|
||||||
|
'yaml',
|
||||||
|
'json',
|
||||||
|
]
|
||||||
|
J2_SEARCH_PATH = [
|
||||||
|
'.',
|
||||||
|
'/etc/angie',
|
||||||
|
]
|
||||||
|
J2_EXT_LIST = [
|
||||||
|
'jinja2.ext.do',
|
||||||
|
'jinja2.ext.loopcontrols',
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
J2_MODULES = sorted(set(os.getenv('NGX_JINJA_MODULES', J2_MODULES_DEFAULT).split(sep=' ')))
|
||||||
|
|
||||||
|
ME = sys.argv[0]
|
||||||
|
|
||||||
|
J2_SUFFIX = os.getenv('NGX_JINJA_SUFFIX', J2_SUFFIX_DEFAULT)
|
||||||
|
if J2_SUFFIX == '':
|
||||||
|
raise ValueError('NGX_JINJA_SUFFIX is empty')
|
||||||
|
if not J2_SUFFIX.startswith('.'):
|
||||||
|
raise ValueError('NGX_JINJA_SUFFIX does not start with dot (".")')
|
||||||
|
|
||||||
|
J2_CONFIG = os.getenv('NGX_JINJA_CONFIG', '')
|
||||||
|
if (J2_CONFIG != '') and (not os.path.exists(J2_CONFIG)):
|
||||||
|
print(f'{ME}: config does not exist, skipping: {J2_CONFIG}', file=sys.stderr)
|
||||||
|
|
||||||
|
|
||||||
if len(sys.argv) < 2:
|
if len(sys.argv) < 2:
|
||||||
raise ValueError('not enough arguments (needed: 2)')
|
raise ValueError('not enough arguments (needed: 2)')
|
||||||
@ -44,14 +62,14 @@ if len(sys.argv) == 3:
|
|||||||
output_file = sys.argv[2]
|
output_file = sys.argv[2]
|
||||||
else:
|
else:
|
||||||
output_file, ext = os.path.splitext(input_file)
|
output_file, ext = os.path.splitext(input_file)
|
||||||
if ext != NGX_JINJA_SUFFIX:
|
if ext != J2_SUFFIX:
|
||||||
raise ValueError(f'input file name extension mismatch (not a "{NGX_JINJA_SUFFIX}")')
|
raise ValueError(f'input file name extension mismatch (not a "{J2_SUFFIX}")')
|
||||||
|
|
||||||
if input_file == output_file:
|
if input_file == output_file:
|
||||||
raise ValueError('unable to process template inplace')
|
raise ValueError('unable to process template inplace')
|
||||||
|
|
||||||
kwargs = {}
|
kwargs = {}
|
||||||
for m in NGX_JINJA_MODULES:
|
for m in J2_MODULES:
|
||||||
kwargs[m] = importlib.import_module(m)
|
kwargs[m] = importlib.import_module(m)
|
||||||
kwargs['env'] = os.environ
|
kwargs['env'] = os.environ
|
||||||
kwargs['cfg'] = {}
|
kwargs['cfg'] = {}
|
||||||
@ -83,16 +101,19 @@ def merge_dict_from_file(filename):
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
for base_name in NGX_JINJA_CONFIG_NAMES:
|
if (J2_CONFIG != '') and (os.path.isfile(J2_CONFIG)):
|
||||||
for file_name in [ base_name + '.' + ext for ext in [ 'yml', 'yaml', 'json' ] ]:
|
merge_dict_from_file(J2_CONFIG)
|
||||||
if merge_dict_from_file(file_name):
|
else:
|
||||||
|
for base in J2_CFG_PATHS:
|
||||||
|
for full in [ base + '.' + ext for ext in J2_CFG_EXTS ]:
|
||||||
|
if merge_dict_from_file(full):
|
||||||
break
|
break
|
||||||
continue
|
continue
|
||||||
merge_dict_from_file(NGX_JINJA_CONFIG)
|
|
||||||
|
|
||||||
with open(input_file, mode='r', encoding='utf-8') as fin:
|
|
||||||
template = jinja2.Template(fin.read())
|
|
||||||
rendered = template.render(**kwargs)
|
|
||||||
|
|
||||||
with open(output_file, mode='w', encoding='utf-8') as fout:
|
j2_loader = jinja2.FileSystemLoader(J2_SEARCH_PATH, followlinks=True)
|
||||||
fout.write(rendered)
|
j2_environ = jinja2.Environment(loader=j2_loader, extensions=J2_EXT_LIST)
|
||||||
|
j2_template = j2_environ.get_template(input_file)
|
||||||
|
j2_stream = j2_template.stream(**kwargs)
|
||||||
|
j2_stream.disable_buffering()
|
||||||
|
j2_stream.dump(output_file, encoding='utf-8')
|
||||||
|
Loading…
Reference in New Issue
Block a user