kolypto / j2cli

Jinja2 Command-Line Tool, reworked

Home Page:http://pypi.python.org/pypi/j2cli

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Not able to template piped variables

hesoyamhh opened this issue · comments

My dummy test.j2 file contains: Hi {{ data_var | env_var | d('default_var') }}
My data_test.yaml contains: data_var: foo_yaml
I have set env_var via: export env_var='foo_env'

So, as per templating:

Case-1: j2 --undefined test.j2 data_test.yaml -o test should output Hi foo_yaml

Case-2: j2 --undefined test.j2 -o test should output Hi foo_env

Case-3: if I execute unset env_var and then execute j2 --undefined test.j2 -o test, it should output Hi default_var

But in all cases, it throws error:

Traceback (most recent call last):
  File "/usr/local/bin/j2", line 8, in <module>
    sys.exit(main())
  File "/usr/local/lib/python2.7/site-packages/j2cli/cli.py", line 206, in main
    sys.argv[1:]
  File "/usr/local/lib/python2.7/site-packages/j2cli/cli.py", line 186, in render_command
    result = renderer.render(args.template, context)
  File "/usr/local/lib/python2.7/site-packages/j2cli/cli.py", line 86, in render
    .get_template(template_path) \
  File "/usr/local/lib/python2.7/site-packages/jinja2/environment.py", line 830, in get_template
    return self._load_template(name, self.make_globals(globals))
  File "/usr/local/lib/python2.7/site-packages/jinja2/environment.py", line 804, in _load_template
    template = self.loader.load(self, name, globals)
  File "/usr/local/lib/python2.7/site-packages/jinja2/loaders.py", line 125, in load
    code = environment.compile(source, name, filename)
  File "/usr/local/lib/python2.7/site-packages/jinja2/environment.py", line 591, in compile
    self.handle_exception(exc_info, source_hint=source_hint)
  File "/usr/local/lib/python2.7/site-packages/jinja2/environment.py", line 780, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "/tmp/test.j2", line 1, in template
    Hi {{ data_var | env_var | d('default_var') }}
jinja2.exceptions.TemplateAssertionError: no filter named 'env_var'

So, not only piped templating doesn't happen, it also ignores --undefined

You need to modify your test.j2 to Hi {{ data_var | d(env_var) | d('default_var') }}

bash-5.0$ cat test.j2
Hi {{ data_var | d(env_var) | d('default_var') }}
bash-5.0$
bash-5.0$ cat data_test.yaml
data_var: foo_yaml

bash-5.0$
bash-5.0$ export env_var='foo_env_var'
bash-5.0$
bash-5.0$ echo $env_var
foo_env_var
bash-5.0$
bash-5.0$
bash-5.0$ j2 --undefined -o test test.j2 && cat test
Hi foo_env_var
bash-5.0$
bash-5.0$ j2 --undefined -o test test.j2 data_test.yaml && cat test
Hi foo_yaml
bash-5.0$
bash-5.0$ unset env_var
bash-5.0$
bash-5.0$ j2 --undefined -o test test.j2 && cat test
Hi default_var
bash-5.0$

It will work as expected