From 9436d2c48d91dc104099d8805c696a85d7bd37f2 Mon Sep 17 00:00:00 2001 From: Patrick Wuttke Date: Fri, 28 Mar 2025 14:52:14 +0100 Subject: [PATCH] Added JINJA_FILE_SEARCHPATH for Jinja file functions to make it easier for library projects to find their files. --- addons/jinja.py | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/addons/jinja.py b/addons/jinja.py index 8ff501a..6708c41 100644 --- a/addons/jinja.py +++ b/addons/jinja.py @@ -1,4 +1,5 @@ +import os import pathlib Import('env') @@ -31,11 +32,24 @@ def _wrap_jinja(orig_jinja): return target return _wrapped +def _find_file(env, fname): + for path in env['JINJA_FILE_SEARCHPATH']: + fullpath = os.path.join(path.abspath, fname) + if os.path.exists(fullpath): + return env.File(fullpath) + return None + def _file_size(env, fname: str) -> int: - return env.File(fname).get_size() + file = _find_file(env, fname) + if not file: + env.Error(f'File does not exist: {fname}. Searched in: {[d.abspath for d in env["JINJA_FILE_SEARCHPATH"]]}') + return file.get_size() def _file_content_hex(env, fname: str) -> str: - bytes = env.File(fname).get_contents() + file = _find_file(env, fname) + if not file: + env.Error(f'File does not exist: {fname}. Searched in: {[d.abspath for d in env["JINJA_FILE_SEARCHPATH"]]}') + bytes = file.get_contents() return ','.join([hex(byte) for byte in bytes]) env.AddMethod(_wrap_jinja(env.Jinja), 'Jinja') @@ -46,4 +60,5 @@ env.Append(JINJA_GLOBALS = { }) env.Append(JINJA_TEMPLATE_SEARCHPATH = ['data/jinja']) env['JINJA_CONFIG_SEARCHPATH'] = [env.Dir('#data/config')] +env['JINJA_FILE_SEARCHPATH'] = [env.Dir('#')] Return('env')