Coverage for tarjinja/jinjafilter.py: 100%

21 statements  

« prev     ^ index     » next       coverage.py v7.16.0, created at 2026-09-05 14:24 +0000

1from jinja2 import Environment 

2 

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( 

28 [ 

29 x.name 

30 for x in filter(lambda f: f.__class__.__name__ == "Name", b.nodes) 

31 ] 

32 ) 

33 return res