36 lines
1.2 KiB
Python

import pathlib
Import('env')
def _jinja_load_config(env, config_name):
searched_paths = []
for scons_path in env['JINJA_CONFIG_SEARCHPATH']:
if hasattr(scons_path, 'abspath'):
scons_path = scons_path.abspath
path = pathlib.Path(scons_path) / f'{config_name}.yml'
if path.exists():
with path.open('r') as file:
import yaml
return yaml.safe_load(file)
searched_paths.append(f'\n{path}')
joined_paths = ''.join(searched_paths)
raise Exception(f'Could not find Jinja config file "{config_name}.yml". Searched: {joined_paths}')
def _wrap_jinja(orig_jinja):
def _wrapped(env, target, **kwargs):
if 'source' not in kwargs:
kwargs['source'] = f'{target}.jinja'
target = orig_jinja(**kwargs)
if 'depends' in kwargs:
for dependency in kwargs['depends']:
env.Depends(target, dependency)
# env.Depends(alias_prepare, target)
return target
return _wrapped
env.AddMethod(_wrap_jinja(env.Jinja), 'Jinja')
env.Append(JINJA_FILTERS = {'load_config': _jinja_load_config})
env.Append(JINJA_TEMPLATE_SEARCHPATH = ['data/jinja'])
env['JINJA_CONFIG_SEARCHPATH'] = [env.Dir('#data/config')]
Return('env')