summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
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
commita88d28c6cb3e2b2d394c8fd20a3c26583e741f02 (patch)
tree8a16c71a8c89f52ff0b63050aaa0306c2052cf8e
parent0b07c92bdf22e1ba31f9bd206913cc9159033d19 (diff)
downloadIshtar-a88d28c6cb3e2b2d394c8fd20a3c26583e741f02.tar.bz2
Ishtar-a88d28c6cb3e2b2d394c8fd20a3c26583e741f02.zip
✨ add padding and deduplicate filters for JINJA formula
-rw-r--r--ishtar_common/utils.py85
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: