summaryrefslogtreecommitdiff
path: root/ishtar_common
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2020-12-29 13:24:25 +0100
committerÉtienne Loks <etienne.loks@iggdrasil.net>2021-02-28 12:15:23 +0100
commit50fefcbf421f60e1f4e92aeafa83ad949a19e9db (patch)
tree17786b221bdaa8585e849539b67cff8e8c4f3082 /ishtar_common
parent752d3d8eda5cd968faf0d370ae2d781575c60d90 (diff)
downloadIshtar-50fefcbf421f60e1f4e92aeafa83ad949a19e9db.tar.bz2
Ishtar-50fefcbf421f60e1f4e92aeafa83ad949a19e9db.zip
Secretary filters: capitalize
Diffstat (limited to 'ishtar_common')
-rw-r--r--ishtar_common/tests.py24
-rw-r--r--ishtar_common/utils_secretary.py21
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