Coverage for tarjinja/jinjafilter.py: 100%
21 statements
« prev ^ index » next coverage.py v7.16.0, created at 2026-09-05 14:24 +0000
« prev ^ index » next coverage.py v7.16.0, created at 2026-09-05 14:24 +0000
1from jinja2 import Environment
3from .iface import Filter
6class JinjaFilter(Filter):
7 def __init__(self, **kwargs):
8 self.env = Environment(keep_trailing_newline=True, **kwargs)
9 self.addfilter("brace", self.brace)
11 def addfilter(self, name, fn):
12 self.env.filters[name] = fn
14 def brace(self, vals):
15 if isinstance(vals, (tuple, list)):
16 vals = [self.brace(x) for x in vals]
17 return "{" + ",".join(vals) + "}"
18 return str(vals)
20 def render(self, s: str, vals: dict) -> str:
21 tmpl = self.env.from_string(s)
22 return tmpl.render(**vals)
24 def var_names(self, s: str) -> list[str]:
25 res = set()
26 for b in self.env.parse(source=s).body:
27 res.update(
28 [
29 x.name
30 for x in filter(lambda f: f.__class__.__name__ == "Name", b.nodes)
31 ]
32 )
33 return res