Skip to content

Commit d659709

Browse files
committed
Codegen: add render_str
1 parent e40c53a commit d659709

File tree

2 files changed

+47
-4
lines changed

2 files changed

+47
-4
lines changed

misc/codegen/lib/render.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ def __init__(self, generator: pathlib.Path):
2929
self._r = pystache.Renderer(search_dirs=str(paths.templates_dir), escape=lambda u: u)
3030
self._generator = generator
3131

32-
def render(self, data: object, output: pathlib.Path):
32+
def render(self, data: object, output: typing.Optional[pathlib.Path], template: typing.Optional[str] = None):
3333
""" Render `data` to `output`.
3434
3535
`data` must have a `template` attribute denoting which template to use from the template directory.
@@ -42,13 +42,17 @@ def render(self, data: object, output: pathlib.Path):
4242
extensions = getattr(data, "extensions", [None])
4343
for ext in extensions:
4444
output_filename = output
45-
template = data.template
45+
template_to_use = template or data.template
4646
if ext:
4747
output_filename = output_filename.with_suffix(f".{ext}")
48-
template += f"_{ext}"
49-
contents = self._r.render_name(template, data, generator=self._generator)
48+
template_to_use += f"_{ext}"
49+
contents = self.render_str(data, template_to_use)
5050
self._do_write(mnemonic, contents, output_filename)
5151

52+
def render_str(self, data: object, template: typing.Optional[str] = None):
53+
template = template or data.template
54+
return self._r.render_name(template, data, generator=self._generator)
55+
5256
def _do_write(self, mnemonic: str, contents: str, output: pathlib.Path):
5357
with open(output, "w") as out:
5458
out.write(contents)

misc/codegen/test/test_render.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,45 @@ def test_render(pystache_renderer, sut):
7676
]
7777

7878

79+
def test_render_provided_template(pystache_renderer, sut):
80+
data = mock.Mock(spec=())
81+
custom_template = object()
82+
text = "some text"
83+
pystache_renderer.render_name.side_effect = (text,)
84+
output = paths.root_dir / "a/some/output.txt"
85+
sut.render(data, output, template=custom_template)
86+
87+
assert_file(output, text)
88+
assert pystache_renderer.mock_calls == [
89+
mock.call.render_name(custom_template, data, generator=generator),
90+
]
91+
92+
93+
def test_render_to_string(pystache_renderer, sut):
94+
data = mock.Mock(spec=("template",))
95+
text = "some text"
96+
pystache_renderer.render_name.side_effect = (text,)
97+
result = sut.render_str(data)
98+
99+
assert result == text
100+
assert pystache_renderer.mock_calls == [
101+
mock.call.render_name(data.template, data, generator=generator),
102+
]
103+
104+
105+
def test_render_to_string_with_provided_template(pystache_renderer, sut):
106+
data = mock.Mock(spec=())
107+
custom_template = object()
108+
text = "some text"
109+
pystache_renderer.render_name.side_effect = (text,)
110+
result = sut.render_str(data, custom_template)
111+
112+
assert result == text
113+
assert pystache_renderer.mock_calls == [
114+
mock.call.render_name(custom_template, data, generator=generator),
115+
]
116+
117+
79118
def test_managed_render(pystache_renderer, sut):
80119
data = mock.Mock(spec=("template",))
81120
text = "some text"

0 commit comments

Comments
 (0)