diff --git a/src/uwtools/config/jinja2.py b/src/uwtools/config/jinja2.py index 62d18ce89..2c766754f 100644 --- a/src/uwtools/config/jinja2.py +++ b/src/uwtools/config/jinja2.py @@ -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( @@ -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. diff --git a/src/uwtools/tests/api/test_template.py b/src/uwtools/tests/api/test_template.py index a46e4cc97..337a67b0f 100644 --- a/src/uwtools/tests/api/test_template.py +++ b/src/uwtools/tests/api/test_template.py @@ -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 @@ -8,6 +9,8 @@ from uwtools.api import template from uwtools.exceptions import UWTemplateRenderError +from uwtools.logging import log +from uwtools.tests.support import logged @fixture @@ -25,6 +28,14 @@ def kwargs(): } +@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: template.render(**kwargs) @@ -51,6 +62,13 @@ def test_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 = { "input_file": "path1",