Coverage for waveqc/filters.py: 0%

23 statements  

« prev     ^ index     » next       coverage.py v7.4.4, created at 2024-05-15 08:47 +0000

1from pyramid.config import Configurator 

2 

3 

4def update_filter(querystring: str, key: str, value: int) -> str: 

5 """ 

6 If the key is present in querystring, update its value 

7 else add the key/value pair in querystring 

8 """ 

9 url = f"{key}={value}" 

10 pairs = querystring.split("&") 

11 filtered = filter(lambda p: p.split("=")[0] != key, pairs) 

12 encoded = "&".join(filtered) 

13 if encoded: 

14 return f"?{url}&{encoded}" 

15 return f"?{url}" 

16 

17 

18def drop_filter(querystring: str, key: str) -> str: 

19 """ 

20 Remove the key from the querystring 

21 """ 

22 pairs = querystring.split("&") 

23 filtered = filter(lambda p: p.split("=")[0] != key, pairs) 

24 encoded = "&".join(filtered) 

25 if encoded: 

26 return f"?{encoded}" 

27 return "" 

28 

29 

30def distinct_filter(objects: list[object], key: str) -> list[str]: 

31 """ 

32 Remove attribute duplicates (due to casing) from a list of objects 

33 """ 

34 return [ 

35 getattr(instance, key).upper().split("(")[1].split(")")[0] 

36 if "(" in getattr(instance, key) 

37 else getattr(instance, key) 

38 for instance in objects 

39 ] 

40 

41 

42def includeme(config: Configurator) -> None: 

43 # Here we configure additionnal jinja2 filters 

44 filters = config.get_settings().setdefault("jinja2.filters", {}) 

45 filters.setdefault("update", "waveqc.filters:update_filter") 

46 filters.setdefault("drop", "waveqc.filters:drop_filter") 

47 filters.setdefault("distinct", "waveqc.filters:distinct_filter")