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():  | 
