diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2024-09-29 14:39:56 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2024-09-29 23:24:09 +0200 |
commit | ccd7055b5d94f60eb6a8974f530b526fa2405e0b (patch) | |
tree | ebf1550ddd540e9478c3e1b570e0a0fee59bf526 /ishtar_common/utils_secretary.py | |
parent | 9f44f4dd6cdaeb44addf5cc8f2d15a581f1c3e89 (diff) | |
download | Ishtar-ccd7055b5d94f60eb6a8974f530b526fa2405e0b.tar.bz2 Ishtar-ccd7055b5d94f60eb6a8974f530b526fa2405e0b.zip |
✨ more robust templates (don't crash on missing values) - add fields for file templates - number_to_words and float_format filters for templates
Diffstat (limited to 'ishtar_common/utils_secretary.py')
-rw-r--r-- | ishtar_common/utils_secretary.py | 30 |
1 files changed, 28 insertions, 2 deletions
diff --git a/ishtar_common/utils_secretary.py b/ishtar_common/utils_secretary.py index e4e6e8e0b..318f50bdc 100644 --- a/ishtar_common/utils_secretary.py +++ b/ishtar_common/utils_secretary.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # -*- coding: utf-8 -*- from secretary import Renderer from lxml import etree @@ -7,10 +7,12 @@ from xml.parsers.expat import ExpatError, ErrorString from datetime import datetime import locale +from num2words import num2words from PIL import Image import re from django.conf import settings +from django.utils import formats RE_UNITS = re.compile("([.0-9]+)([a-z]+)") @@ -25,6 +27,28 @@ def parse_value_unit(value): return value, unit +def float_format(value): + if value is None or value == "": + return "" + try: + value = float(value) + except ValueError: + return "" + if int(value) == value: + return int(value) + return formats.localize(value, use_l10n=True) + + +def number_to_words(value): + if value is None or value == "": + return "" + try: + value = float(value) + except ValueError: + return "" + return num2words(value, lang=settings.LANGUAGE_CODE.split("-")[0]) + + def replace_line_breaks(value): return (value or "").replace("\r\n", "\n") @@ -60,7 +84,7 @@ def capitalize_filter(value): def human_date_filter(value): try: value = datetime.strptime(value, "%Y-%m-%d") - except ValueError: + except (ValueError, TypeError) as __: return "" language_code = settings.LANGUAGE_CODE.split("-") language_code = language_code[0] + "_" + language_code[1].upper() @@ -109,6 +133,8 @@ class IshtarSecretaryRenderer(Renderer): self.environment.filters["capfirst"] = capfirst_filter self.environment.filters["lowerfirst"] = lowerfirst_filter self.environment.filters["capitalize"] = capitalize_filter + self.environment.filters["float_format"] = float_format + self.environment.filters["number_to_words"] = number_to_words self.environment.filters["replace_line_breaks"] = replace_line_breaks self.environment.filters["splitpart"] = splitpart |