Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions src/uwtools/config/jinja2.py
Original file line number Diff line number Diff line change
Expand Up @@ -170,7 +170,7 @@ def render(
:param searchpath: Paths to search for extra templates.
:param values_needed: Just report variables needed to render the template?
:param dry_run: Run in dry-run mode?
:return: The rendered template, or None.
:return: The unrendered template if values_needed is True, the rendered template, or None.
"""
_report(locals())
values = _supplement_values(
Expand All @@ -180,11 +180,11 @@ def render(
undeclared_variables = template.undeclared_variables

# If a report of variables required to render the template was requested, make that report and
# then return.
# then return the unrendered template.

if values_needed:
_values_needed(undeclared_variables)
return None
return str(template)

# Render the template. If there are missing values, report them and return an error to the
# caller.
Expand Down
17 changes: 15 additions & 2 deletions src/uwtools/tests/api/test_template.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
# pylint: disable=missing-function-docstring,redefined-outer-name

import logging
import os
from pathlib import Path
from unittest.mock import patch
Expand All @@ -8,7 +9,8 @@

from uwtools.api import template
from uwtools.exceptions import UWTemplateRenderError

from uwtools.tests.support import logged
from uwtools.logging import log

@fixture
def kwargs():
Expand All @@ -24,6 +26,13 @@ def kwargs():
"dry_run": True,
}

@fixture
def template_file(tmp_path):
path = tmp_path / "template.jinja2"
with open(path, "w", encoding="utf-8") as f:
f.write("roses are {{roses_color}}, violets are {{violets_color}}")
return path


def test_render(kwargs):
with patch.object(template, "_render") as _render:
Expand All @@ -43,13 +52,17 @@ def test_render_fail(kwargs):
with raises(UWTemplateRenderError):
template.render(**kwargs)


def test_render_to_str(kwargs):
del kwargs["output_file"]
with patch.object(template, "render") as render:
template.render_to_str(**kwargs)
render.assert_called_once_with(**{**kwargs, "output_file": Path(os.devnull)})

def test_render_values_needed(caplog, template_file):
log.setLevel(logging.INFO)
template.render(input_file=template_file, values_needed=True)
for var in ("roses_color", "violets_color"):
assert logged(caplog, f" {var}")

def test_translate():
kwargs: dict = {
Expand Down