diff options
Diffstat (limited to 'ishtar_common')
| -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:  | 
