Coverage for waveqc/filters.py: 0%
23 statements
« prev ^ index » next coverage.py v7.4.4, created at 2024-05-15 08:47 +0000
« prev ^ index » next coverage.py v7.4.4, created at 2024-05-15 08:47 +0000
1from pyramid.config import Configurator
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}"
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 ""
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 ]
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")