diff options
-rw-r--r-- | ishtar_common/tests.py | 24 | ||||
-rw-r--r-- | ishtar_common/utils_secretary.py | 21 |
2 files changed, 45 insertions, 0 deletions
diff --git a/ishtar_common/tests.py b/ishtar_common/tests.py index c92872612..1460e7b66 100644 --- a/ishtar_common/tests.py +++ b/ishtar_common/tests.py @@ -67,6 +67,7 @@ from ishtar_common.serializers_utils import serialization_info from ishtar_common.utils import post_save_geo, update_data, move_dict_data, \ rename_and_simplify_media_name, try_fix_file from ishtar_common.tasks import launch_export +from ishtar_common import utils_secretary COMMON_FIXTURES = [ @@ -2757,3 +2758,26 @@ class DocumentTest(TestCase): doc3.save() doc3 = models.Document.objects.get(pk=doc3.pk) self.assertEqual(doc3.complete_identifier, 'no-code') + + +class JinjaFilterTest(TestCase): + def test_splitpart(self): + self.assertEqual(utils_secretary.splitpart("1,2,3", 1), "2") + self.assertEqual(utils_secretary.splitpart("1,2,3", 10), "") + self.assertEqual(utils_secretary.splitpart("1;2;3", 2, ";"), "3") + + def test_human_date(self): + self.assertEqual(utils_secretary.human_date_filter("NODATE"), "") + self.assertEqual( + utils_secretary.human_date_filter("2020-01-01"), + "1 janvier 2020") + + def test_capfirst(self): + self.assertEqual( + utils_secretary.capfirst_filter("SAINT GEORGES D'OLÉRON"), + "Saint georges d'oléron") + + def test_capitalize(self): + self.assertEqual( + utils_secretary.capitalize_filter("SAINT-GEORGES D'OLÉRON"), + "Saint-Georges d'Oléron") diff --git a/ishtar_common/utils_secretary.py b/ishtar_common/utils_secretary.py index e1f2919e4..579ac3f63 100644 --- a/ishtar_common/utils_secretary.py +++ b/ishtar_common/utils_secretary.py @@ -32,6 +32,26 @@ def capfirst_filter(value): return value.capitalize() if value else value +RE_CAP = re.compile(r"[^-' ]+") +SEP = ("un", "une", "le", "la", "les", "lez", "d", "l", "de", "des", "du") + + +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") @@ -64,6 +84,7 @@ class IshtarSecretaryRenderer(Renderer): self.media_path = settings.MEDIA_ROOT self.environment.filters['human_date'] = human_date_filter self.environment.filters['capfirst'] = capfirst_filter + self.environment.filters['capitalize'] = capitalize_filter self.environment.filters['replace_line_breaks'] = replace_line_breaks self.environment.filters['splitpart'] = splitpart |