diff options
Diffstat (limited to 'ishtar_common/utils_secretary.py')
-rw-r--r-- | ishtar_common/utils_secretary.py | 104 |
1 files changed, 4 insertions, 100 deletions
diff --git a/ishtar_common/utils_secretary.py b/ishtar_common/utils_secretary.py index 917abdeaa..9988fa4c2 100644 --- a/ishtar_common/utils_secretary.py +++ b/ishtar_common/utils_secretary.py @@ -1,28 +1,17 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- +import re from secretary import Renderer from lxml import etree from xml.dom.minidom import parseString 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 - -def set_locale(): - language_code = settings.LANGUAGE_CODE.split("-") - language_code = language_code[0] + "_" + language_code[1].upper() - for language_suffix in (".utf8", ""): - try: - locale.setlocale(locale.LC_TIME, language_code + language_suffix) - break - except locale.Error: - pass +from .jinja_filters import capfirst_filter, capitalize_filter, \ + euro_format, float_format, human_date_filter, lowerfirst_filter, \ + number_to_words, replace_line_breaks RE_UNITS = re.compile("([.0-9]+)([a-z]+)") @@ -37,62 +26,6 @@ def parse_value_unit(value): return value, unit -def float_format(value): - """ - 10350.5 -> 10 350,5 - 5 -> 5 - 5.449999 -> 5,45 - """ - if value is None or value == "": - return "" - try: - value = float(value) - except ValueError: - return "" - locale.setlocale(locale.LC_ALL, "fr_FR.UTF-8") - if int(value) != value: - value = float(f"{value:.2f}") - return f"{value:n}" - - -def euro_format(value): - """ - 15000 -> 15 000,00 € - 5 -> 5,00 € - """ - value = float_format(value) - if not value: - return "" - parts = value.split(",") - if len(parts) < 2: - return value + ",00 €" - elif len(parts[1]) == 1: - return value + "0 €" - return value + " €" - - -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") - - -def capfirst_filter(value): - return value[0].upper() + value[1:] if value else value - - -def lowerfirst_filter(value): - return value[0].lower() + value[1:] if value else value - - def add_filter(value1, value2): try: return float(value1 or 0) + float(value2 or 0) @@ -114,35 +47,6 @@ def multiply_filter(value1, value2): return 0 -RE_CAP = re.compile(r"[^-' ]+") -SEP = ("un", "une", "le", "la", "les", "lez", "d", "l", "de", "des", "du", "sur", "sous", "en") - - -def capitalize_filter(value): - if not value: - return "" - value = value.lower() - res = "" - for m in RE_CAP.finditer(value): - start = m.start() - if start: - res += value[start - 1] - v = m.group() - if v not in SEP: - v = v[0].upper() + v[1:] - res += v - return res - - -def human_date_filter(value): - try: - value = datetime.strptime(value, "%Y-%m-%d") - except (ValueError, TypeError) as __: - return "" - set_locale() - return value.strftime(settings.DATE_FORMAT) - - def splitpart(value, index, index_end=None, char=",", merge_character=None): if index_end: try: |