2025-01-07 19:14:49 +00:00
|
|
|
import os
|
|
|
|
|
|
|
|
from jinja2 import Environment, FileSystemLoader
|
|
|
|
|
2025-01-10 17:53:57 +00:00
|
|
|
from grimoiressg.utils import to_relative, logger
|
|
|
|
|
2025-01-07 19:14:49 +00:00
|
|
|
jinja_env = Environment(
|
|
|
|
loader=FileSystemLoader("/")
|
|
|
|
)
|
|
|
|
|
|
|
|
|
2025-01-12 21:09:19 +00:00
|
|
|
def render_templates(data, context, config):
|
2025-01-07 19:14:49 +00:00
|
|
|
files_written = 0
|
|
|
|
|
2025-01-18 09:43:00 +00:00
|
|
|
# render templates in reverse order, so included renderings can be used
|
2025-01-18 09:57:27 +00:00
|
|
|
for entry in reversed(data):
|
2025-01-07 19:14:49 +00:00
|
|
|
if "template" in entry:
|
|
|
|
template_path = os.path.realpath(os.path.dirname(entry["filename"]) + "/" + entry["template"])
|
|
|
|
template_dir = os.path.dirname(template_path)
|
2025-01-10 17:53:57 +00:00
|
|
|
logger.debug("Rendering template for %s...", entry['relative_filename'])
|
2025-01-07 19:14:49 +00:00
|
|
|
template = jinja_env.get_template(template_path)
|
|
|
|
entry["rendered"] = template.render(
|
|
|
|
**context,
|
|
|
|
current=entry,
|
|
|
|
all=data,
|
|
|
|
template_dir=template_dir
|
|
|
|
)
|
|
|
|
|
|
|
|
if "rendered" in entry and "output" in entry:
|
|
|
|
files_written += 1
|
|
|
|
filename = os.path.realpath(context["output_dir"] + "/" + entry["output"])
|
2025-01-10 17:53:57 +00:00
|
|
|
logger.debug(" writing to %s", to_relative(filename))
|
2025-01-07 19:14:49 +00:00
|
|
|
os.makedirs(os.path.dirname(filename), exist_ok=True)
|
|
|
|
with open(filename, "w") as file:
|
|
|
|
file.write(entry["rendered"])
|
|
|
|
|
2025-01-10 17:53:57 +00:00
|
|
|
logger.debug("%d rendered", files_written)
|