From a72f0f21b3846f3f8a771ab769194b532addda14 Mon Sep 17 00:00:00 2001 From: Matt Robenolt Date: Thu, 23 Apr 2020 21:18:26 -0700 Subject: [PATCH 1/2] Add the ability to import filters Fixes #85 --- jinja2cli/cli.py | 19 +++++++++++++++++-- tests/test_jinja2cli.py | 4 ++-- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/jinja2cli/cli.py b/jinja2cli/cli.py index 79d84db..840365e 100644 --- a/jinja2cli/cli.py +++ b/jinja2cli/cli.py @@ -212,7 +212,7 @@ def _parse_env(data): } -def render(template_path, data, extensions, strict=False): +def render(template_path, data, extensions, filters, strict=False): from jinja2 import Environment, FileSystemLoader, StrictUndefined env = Environment( @@ -227,6 +227,13 @@ def render(template_path, data, extensions, strict=False): env.globals["environ"] = lambda key: force_text(os.environ.get(key)) env.globals["get_context"] = lambda: data + if filters: + from jinja2.utils import import_string + + for filter in set(filters): + filter = import_string(filter) + env.filters[filter.__name__] = filter + return env.get_template(os.path.basename(template_path)).render(data) @@ -312,7 +319,7 @@ def cli(opts, args): out = codecs.getwriter("utf8")(out) - out.write(render(template_path, data, extensions, opts.strict)) + out.write(render(template_path, data, extensions, opts.filters, opts.strict)) out.flush() return 0 @@ -379,6 +386,14 @@ def main(): action="append", default=["do", "with_", "autoescape", "loopcontrols"], ) + parser.add_option( + "-f", + "--filter", + help="extra jinja2 filters to load", + dest="filters", + action="append", + default=[], + ) parser.add_option( "-D", help="Define template variable in the form of key=value", diff --git a/tests/test_jinja2cli.py b/tests/test_jinja2cli.py index 181a8bd..9c9aac5 100644 --- a/tests/test_jinja2cli.py +++ b/tests/test_jinja2cli.py @@ -10,7 +10,7 @@ def test_relative_path(): path = "./files/template.j2" title = b"\xc3\xb8".decode("utf8") - output = cli.render(path, {"title": title}, []) + output = cli.render(path, {"title": title}, [], []) assert output == title assert type(output) == cli.text_type @@ -20,6 +20,6 @@ def test_absolute_path(): path = os.path.join(absolute_base_path, "files", "template.j2") title = b"\xc3\xb8".decode("utf8") - output = cli.render(path, {"title": title}, []) + output = cli.render(path, {"title": title}, [], []) assert output == title assert type(output) == cli.text_type From ad775051ba53207495f466442c25b5c2803d08de Mon Sep 17 00:00:00 2001 From: Matt Robenolt Date: Thu, 23 Apr 2020 21:23:53 -0700 Subject: [PATCH 2/2] ci: Swap python 3.4 with 3.8 --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 8ee17f0..cf2178d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,10 +3,10 @@ language: python dist: xenial python: - '2.7' - - '3.4' - '3.5' - '3.6' - '3.7' + - '3.8' install: pip install -e .[yaml,toml,tests,xml]