diff options
-rw-r--r-- | CHANGES.md | 6 | ||||
-rw-r--r-- | docs/fr/source/annexe-tech-4-jinja-filters.rst | 35 | ||||
-rw-r--r-- | ishtar_common/tests.py | 5 | ||||
-rw-r--r-- | ishtar_common/utils_secretary.py | 24 | ||||
-rw-r--r-- | ishtar_common/version.py | 4 |
5 files changed, 53 insertions, 21 deletions
diff --git a/CHANGES.md b/CHANGES.md index 28635e38b..2fab69393 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,6 +1,12 @@ Ishtar changelog ================ +v3.1.50 - 2022-03-08 +-------------------- + +### Features ### +- Templates: improve splitpart filter + v3.1.49 - 2022-02-28 -------------------- diff --git a/docs/fr/source/annexe-tech-4-jinja-filters.rst b/docs/fr/source/annexe-tech-4-jinja-filters.rst index 0df8369e8..6f2a13a47 100644 --- a/docs/fr/source/annexe-tech-4-jinja-filters.rst +++ b/docs/fr/source/annexe-tech-4-jinja-filters.rst @@ -7,7 +7,7 @@ Annexe technique 4 - Filtres pour les patrons de documents ========================================================== :Auteurs: Étienne Loks, Valérie-Emma Leroux -:Date: 2021-10-20 +:Date: 2022-03-08 :Copyright: CC-BY 3.0 :Ishtar Version: v3.1.0 @@ -35,7 +35,7 @@ Formatage des chaînes de caractères Ce filtre met la première lettre en majuscule et ne touche pas au reste de la chaîne. - - `{{"saint georges d'oléron"|capfisrt}}` -> `Saint georges d'oléron` + - `{{\"saint georges d'oléron\"|capfisrt}}` -> `Saint georges d'oléron` - **lowerfirst** @@ -43,7 +43,7 @@ chaîne. Ce filtre met la première lettre en minuscule et ne touche pas au reste de la chaîne - - `{{"SAINT-GEORGES-D'OLÉRON"|lowerfirst}}` -> `sAINT-GEORGES-D'OLÉRON` + - `{{\"SAINT-GEORGES-D'OLÉRON\"|lowerfirst}}` -> `sAINT-GEORGES-D'OLÉRON` - **capitalize** @@ -51,20 +51,20 @@ chaîne Ce filtre met la première lettre de chaque mot en majuscule et le reste de la chaîne en minuscule. - - `{{"SAINT-GEORGES-D'OLÉRON"|capitalize}}` -> `Saint-Georges-d'Oléron` + - `{{\"SAINT-GEORGES-D'OLÉRON\"|capitalize}}` -> `Saint-Georges-d'Oléron` - **human_date** Ce filtre permet d'afficher une date en toutes lettres. - - `{{"2020-03-03"|human_date}}` -> `3 mars 2020` + - `{{\"2020-03-03\"|human_date}}` -> `3 mars 2020` - **int** Pour afficher un nombre sans décimales. - - `{{"600.0"|int}}` -> `600` + - `{{\"600.0\"|int}}` -> `600` Manipulation des chaînes de caractères @@ -76,14 +76,19 @@ Manipulation des chaînes de caractères Ce filtre permet d'extraire un élément depuis une chaîne de caractères en prenant en compte un séparateur. Par exemple depuis la chaîne `2,3,10`, accéder au troisième élément : `10`. Ce filtre nécessite au minimum -un argument : le numéro de l'élément souhaité (en commençant le compte à 0). +un argument, le numéro de l'élément souhaité (en commençant le compte à 0) : pour +avoir le second élément, il faut indiquer en argument `1`. +Le second argument correspond à la borne de fin non incluse (en commençant le +compte à 0) : ainsi pour avoir jusqu'au deuxième élément il faut indiquer en argument +`2`. Si l'on ne souhaite avoir qu'un seul élément, on indique `0`. Par défaut le séparateur `,` est utilisé si l'on souhaite un autre -séparateur, on spécifie celui-ci en second argument. On peut associer un -dernier argument qui permet de renvoyer le reste de la chaîne concaténée, -il suffit de mettre cet argument à True. - - - `{{"9,2,10"|splitpart(1)}}` -> `2` - - `{{"chaise;bureau;papier;paragraphe"|splitpart(0, ";")}}` -> `chaise` - - `{{"182025_C001"|splitpart(1, "_")}}` -> `C001` - - `{{"chaise;bureau;papier;paragraphe"|splitpart(2, ";", True)}}` -> `papier;paragraphe` +séparateur, on spécifie celui-ci en troisème argument. On peut associer un +dernier argument qui permet de spécifier le(s) caractère(s) de concatnation que l'on +souhaite utiliser pour la chaîne en retour. + + - `{{\"9,2,10\"|splitpart(1)}}` -> `2` + - `{{\"chaise;bureau;papier;paragraphe\"|splitpart(0,0,\";\")}}` -> `chaise` + - `{{\"182025_C001\"|splitpart(1,0,\"_\")}}` -> `C001` + - `{{\"chaise;bureau;papier;paragraphe\"|splitpart(1,3,\";\")}}` -> `bureau;papier` + - `{{\"chaise;bureau;papier;paragraphe\"|splitpart(1,4,\";\",\"|\")}}` -> `bureau|papier|paragraphe` diff --git a/ishtar_common/tests.py b/ishtar_common/tests.py index 90af3ac93..8ef083c9f 100644 --- a/ishtar_common/tests.py +++ b/ishtar_common/tests.py @@ -3095,8 +3095,13 @@ class JinjaFilterTest(TestCase): self.assertEqual(utils_secretary.splitpart("1,2,3", 1), "2") self.assertEqual(utils_secretary.splitpart("1,2,3", 10), "") self.assertEqual(utils_secretary.splitpart("", 10), "") + # old use self.assertEqual(utils_secretary.splitpart("1;2;3", 2, ";"), "3") self.assertEqual(utils_secretary.splitpart("1;2;3;4", 1, ";", True), "2;3;4") + # new filter use + self.assertEqual(utils_secretary.splitpart("1;2;3", 0, 2, ";"), "1;2") + self.assertEqual(utils_secretary.splitpart("1;2;3", 2, 0, ";"), "3") + self.assertEqual(utils_secretary.splitpart("1;2;3;4", 1, -1, ";", "|"), "2|3") def test_human_date(self): self.assertEqual(utils_secretary.human_date_filter("NODATE"), "") diff --git a/ishtar_common/utils_secretary.py b/ishtar_common/utils_secretary.py index 062b43913..eea688ea1 100644 --- a/ishtar_common/utils_secretary.py +++ b/ishtar_common/utils_secretary.py @@ -71,15 +71,31 @@ def human_date_filter(value): return value.strftime(settings.DATE_FORMAT) -def splitpart(value, index, char=",", merge_end=False): - if not value or not index: +def splitpart(value, index, index_end=None, char=",", merge_character=None): + if index_end: + try: + index_end = int(index_end) + if not merge_character: # merge is assumed + merge_character = char + except ValueError: + # old filter use - manage compatibility + merge_character = char + char = index_end + index_end = None + if not value or (not index and index != 0): return "" + if merge_character is True: # old filter use + merge_character = char splited = value.split(char) if len(splited) <= index: return "" - if not merge_end: + if not merge_character: return splited[index] - return char.join(splited[index:]) + if index_end: + splited = splited[index:index_end] + else: + splited = splited[index:] + return merge_character.join(splited) class IshtarSecretaryRenderer(Renderer): diff --git a/ishtar_common/version.py b/ishtar_common/version.py index b2f930812..830404ea5 100644 --- a/ishtar_common/version.py +++ b/ishtar_common/version.py @@ -1,5 +1,5 @@ -# 3.1.49 -VERSION = (3, 1, 49) +# 3.1.50 +VERSION = (3, 1, 50) def get_version(): |