Added JINJA_FILE_SEARCHPATH for Jinja file functions to make it easier for library projects to find their files.

This commit is contained in:
Patrick 2025-03-28 14:52:14 +01:00
parent 2769fd801f
commit 9436d2c48d

View File

@ -1,4 +1,5 @@
import os
import pathlib import pathlib
Import('env') Import('env')
@ -31,11 +32,24 @@ def _wrap_jinja(orig_jinja):
return target return target
return _wrapped 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: 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: 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]) return ','.join([hex(byte) for byte in bytes])
env.AddMethod(_wrap_jinja(env.Jinja), 'Jinja') env.AddMethod(_wrap_jinja(env.Jinja), 'Jinja')
@ -46,4 +60,5 @@ env.Append(JINJA_GLOBALS = {
}) })
env.Append(JINJA_TEMPLATE_SEARCHPATH = ['data/jinja']) env.Append(JINJA_TEMPLATE_SEARCHPATH = ['data/jinja'])
env['JINJA_CONFIG_SEARCHPATH'] = [env.Dir('#data/config')] env['JINJA_CONFIG_SEARCHPATH'] = [env.Dir('#data/config')]
env['JINJA_FILE_SEARCHPATH'] = [env.Dir('#')]
Return('env') Return('env')