Hide keyboard shortcuts

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 

4 

5 

6class JinjaFilter(Filter): 

7 def __init__(self, **kwargs): 

8 self.env = Environment(keep_trailing_newline=True, **kwargs) 

9 self.addfilter("brace", self.brace) 

10 

11 def addfilter(self, name, fn): 

12 self.env.filters[name] = fn 

13 

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) 

19 

20 def render(self, s: str, vals: dict) -> str: 

21 tmpl = self.env.from_string(s) 

22 return tmpl.render(**vals) 

23 

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