Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1from typing import List
2from 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([x.name for x in filter(
28 lambda f: f.__class__.__name__ == "Name", b.nodes)])
29 return res