diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2024-04-15 18:56:15 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2024-04-15 18:57:03 +0200 |
commit | a88d28c6cb3e2b2d394c8fd20a3c26583e741f02 (patch) | |
tree | 8a16c71a8c89f52ff0b63050aaa0306c2052cf8e | |
parent | 0b07c92bdf22e1ba31f9bd206913cc9159033d19 (diff) | |
download | Ishtar-a88d28c6cb3e2b2d394c8fd20a3c26583e741f02.tar.bz2 Ishtar-a88d28c6cb3e2b2d394c8fd20a3c26583e741f02.zip |
✨ add padding and deduplicate filters for JINJA formula
-rw-r--r-- | ishtar_common/utils.py | 85 |
1 files changed, 80 insertions, 5 deletions
diff --git a/ishtar_common/utils.py b/ishtar_common/utils.py index d5ace858d..074dc9ef7 100644 --- a/ishtar_common/utils.py +++ b/ishtar_common/utils.py @@ -28,6 +28,7 @@ import hashlib from importlib import import_module import io from jinja2 import Template +from jinja2.filters import FILTERS, environmentfilter import locale import math import os @@ -1988,7 +1989,9 @@ PARSE_JINJA = re.compile("{{([^}]*)}") PARSE_JINJA_IF = re.compile("{% if ([^}]*)}") -def _deduplicate(value): +@environmentfilter +def _deduplicate(*args): + value = args[0] if len(args) == 1 else args[1] # jinja simple filter new_values = [] for v in value.split("-"): if v not in new_values: @@ -1996,12 +1999,81 @@ def _deduplicate(value): return "-".join(new_values) +def _padding(formt, args): + value = args[0] if len(args) == 1 else args[1] # jinja simple filter + try: + value = int(value) + except ValueError: + return value + return formt.format(value) + + +@environmentfilter +def _padding03(*args): + return _padding("{:0>3}", args) + + +@environmentfilter +def _padding04(*args): + return _padding("{:0>4}", args) + + +@environmentfilter +def _padding05(*args): + return _padding("{:0>5}", args) + + +@environmentfilter +def _padding06(*args): + return _padding( "{:0>6}", args) + + +@environmentfilter +def _padding07(*args): + return _padding( "{:0>7}", args) + + +@environmentfilter +def _padding08(*args): + return _padding( "{:0>8}", args) + + +@environmentfilter +def _upper(*args): + value = args[0] if len(args) == 1 else args[1] # jinja simple filter + return value.upper() + + +@environmentfilter +def _lower(*args): + value = args[0] if len(args) == 1 else args[1] # jinja simple filter + return value.lower() + + +@environmentfilter +def _capitalize(*args): + value = args[0] if len(args) == 1 else args[1] # jinja simple filter + return value.capitalize() + + +@environmentfilter +def _slug(*args): + value = args[0] if len(args) == 1 else args[1] # jinja simple filter + return slugify(value) + + FORMULA_FILTERS = { - "upper": lambda x: x.upper(), - "lower": lambda x: x.lower(), - "capitalize": lambda x: x.capitalize(), - "slug": lambda x: slugify(x), + "upper": _upper, + "lower": _lower, + "capitalize": _capitalize, + "slug": _slug, "deduplicate": _deduplicate, + "padding03": _padding03, + "padding04": _padding04, + "padding05": _padding05, + "padding06": _padding06, + "padding07": _padding07, + "padding08": _padding08, } @@ -2082,6 +2154,9 @@ def get_generated_id(key, item): key_list = new_keys for key in set(key_list): _update_gen_id_dct(item, dct, key) + for key in FORMULA_FILTERS: + if key not in FILTERS: + FILTERS[key] = FORMULA_FILTERS[key] tpl = Template(formula) values = tpl.render(dct).split("||") else: |