templatetags: add |range and |repeat (#89921) #1439

Merged
yweber merged 1 commits from wip/89921-create-list-with-fixed-length into main 2024-04-30 14:46:29 +02:00
Owner
No description provided.
yweber added 1 commit 2024-04-24 16:09:41 +02:00
yweber force-pushed wip/89921-create-list-with-fixed-length from 143450632e to 4ecfaa26ab 2024-04-24 16:10:16 +02:00 Compare
yweber force-pushed wip/89921-create-list-with-fixed-length from 4ecfaa26ab to b75542a618 2024-04-24 16:12:52 +02:00 Compare
fpeters reviewed 2024-04-24 16:18:56 +02:00
fpeters left a comment
Owner

(c'est wip mais je pose déjà cette note)

(c'est wip mais je pose déjà cette note)
@ -1176,2 +1176,4 @@
@register.filter(name='range')
def range_(start, stop):
Owner

Le ticket proposait range ou repeat, je serais pour le second uniquement.

Le ticket proposait range ou repeat, je serais pour le second uniquement.
Author
Owner

Le ticket proposait range ou repeat

Oui, et je ne voyais pas sur quoi me baser pour choisir ;)

je serais pour le second uniquement.

parfait, merci !

> Le ticket proposait range ou repeat Oui, et je ne voyais pas sur quoi me baser pour choisir ;) > je serais pour le second uniquement. parfait, merci !
yweber marked this conversation as resolved
@ -1216,0 +1225,4 @@
@register.filter
def repeat(to_repeat, repeat_count):
try:
return str(to_repeat) * repeat_count
Owner

Attention dans wcs, il faut commencer par passer les paramètres dans unlazy; aussi ça vaut le coup de passer repeat_count dans int().

Attention dans wcs, il faut commencer par passer les paramètres dans unlazy; aussi ça vaut le coup de passer repeat_count dans int().
Author
Owner

Attention dans wcs, il faut commencer par passer les paramètres dans unlazy;

Ok, merci !

aussi ça vaut le coup de passer repeat_count dans int().

J'avais fais ça initialement, mais j'étais revenu sur cette idée car ça me semblait contre-intuitif que le tag produise un résultat si le nombre de répétition est un float ( |repeat:2.8 par exemple ).


EDIT : un autre comportement contre-intuitif en passant repeat_count dans int()

  • |repeat:2.8 répète 2 fois
  • |repeat:"2" aussi
  • mais |repeat:"2.8" ne produit rien

Est-ce que ça vaudrait pas le coup de passer repeat_count dans un int(float(...)) ?

> Attention dans wcs, il faut commencer par passer les paramètres dans unlazy; Ok, merci ! > aussi ça vaut le coup de passer repeat_count dans int(). J'avais fais ça initialement, mais j'étais revenu sur cette idée car ça me semblait contre-intuitif que le tag produise un résultat si le nombre de répétition est un float ( |repeat:2.8 par exemple ). ------ EDIT : un autre comportement contre-intuitif en passant repeat_count dans int() * `|repeat:2.8` répète 2 fois * `|repeat:"2"` aussi * mais `|repeat:"2.8"` ne produit rien Est-ce que ça vaudrait pas le coup de passer repeat_count dans un int(float(...)) ?
Owner

Oui ça pourrait être passé dans parse_decimal puis vérifier que la valeur = int(valeur), enregistrer une erreur si ça n'est pas le cas, cf par exemple unaccent() pour l'appel à record_error().

Oui ça pourrait être passé dans parse_decimal puis vérifier que la valeur = int(valeur), enregistrer une erreur si ça n'est pas le cas, cf par exemple unaccent() pour l'appel à record_error().
Author
Owner

Super, merci :)

Spontanément j'aurais eu tendance à enregistrer des erreurs pour les autres cas, typiquement un échec du parse_decimal. Mais comme ça n'a pas l'air d'être l'habitude je laisse do_raise à False : ça renverra une chaîne vide sans log d'erreur.

Super, merci :) Spontanément j'aurais eu tendance à enregistrer des erreurs pour les autres cas, typiquement un échec du parse_decimal. Mais comme ça n'a pas l'air d'être l'habitude je laisse do_raise à False : ça renverra une chaîne vide sans log d'erreur.
yweber marked this conversation as resolved
yweber force-pushed wip/89921-create-list-with-fixed-length from b75542a618 to 1e1990e020 2024-04-24 16:25:54 +02:00 Compare
yweber force-pushed wip/89921-create-list-with-fixed-length from 1e1990e020 to 1da392ca7c 2024-04-24 16:29:11 +02:00 Compare
yweber changed title from WIP: templatetags: add |range and |repeat (#89921) to templatetags: add |range and |repeat (#89921) 2024-04-24 16:35:14 +02:00
yweber force-pushed wip/89921-create-list-with-fixed-length from 1da392ca7c to 9802c1bf6a 2024-04-24 17:45:00 +02:00 Compare
yweber reviewed 2024-04-24 17:53:24 +02:00
@ -1393,0 +1400,4 @@
assert Template('{{ 42|repeat:2 }}').render(context) == '4242'
assert Template('{{ False|repeat:2 }}').render(context) == 'FalseFalse'
assert Template('{{ None|repeat:2 }}').render(context) == 'NoneNone'
assert html.unescape(Template('{{ "ab"|make_list|repeat:2 }}').render(context)) == "['a', 'b']['a', 'b']"
Author
Owner

Je ne sais pas si c'est utile : on pourrait peut être aussi gérer les répétition de listes/tuples ?

Je ne sais pas si c'est utile : on pourrait peut être aussi gérer les répétition de listes/tuples ?
yweber marked this conversation as resolved
yweber force-pushed wip/89921-create-list-with-fixed-length from 9802c1bf6a to a050561035 2024-04-25 09:55:56 +02:00 Compare
fpeters requested changes 2024-04-26 11:18:05 +02:00
Dismissed
@ -1393,0 +1401,4 @@
assert Template('{{ 42|repeat:2 }}').render(context) == '4242'
assert Template('{{ False|repeat:2 }}').render(context) == 'FalseFalse'
assert Template('{{ None|repeat:2 }}').render(context) == 'NoneNone'
assert html.unescape(Template('{{ l|repeat:2 }}').render(context)) == "['a', 'b', 'a', 'b']"
Owner

Oui tout à fait ok de multiplier ainsi.

Oui tout à fait ok de multiplier ainsi.
yweber marked this conversation as resolved
@ -1393,0 +1403,4 @@
assert Template('{{ None|repeat:2 }}').render(context) == 'NoneNone'
assert html.unescape(Template('{{ l|repeat:2 }}').render(context)) == "['a', 'b', 'a', 'b']"
assert html.unescape(Template('{{ t|repeat:2 }}').render(context)) == "(1, 2, 'a', 1, 2, 'a')"
assert html.unescape(Template('{{ d|repeat:2 }}').render(context)) == "{'a': 1, 2: 'b'}{'a': 1, 2: 'b'}"
Owner

Je serais pour noter une erreur sur le |repeat d'un dictionnaire; en fait pour tout ce qui ne serait pas str, list, tuple, plutôt que faire str() dessus.

Je serais pour noter une erreur sur le |repeat d'un dictionnaire; en fait pour tout ce qui ne serait pas str, list, tuple, plutôt que faire str() dessus.
Author
Owner

Ok, ça me semble aussi plus raisonnable !

Par contre j'ai laissé le passage de str() sur les entiers et les flottants, dit moi si tu penses que pour eux aussi il faudrait noter une erreur.

Ok, ça me semble aussi plus raisonnable ! Par contre j'ai laissé le passage de str() sur les entiers et les flottants, dit moi si tu penses que pour eux aussi il faudrait noter une erreur.
@ -1393,0 +1406,4 @@
assert html.unescape(Template('{{ d|repeat:2 }}').render(context)) == "{'a': 1, 2: 'b'}{'a': 1, 2: 'b'}"
assert Template('{{ "x"|repeat:0 }}').render(context) == ''
assert Template('{{ "x"|repeat:-2 }}').render(context) == ''
Owner

Ça serait bien de logguer une erreur également pour le cas de valeur négative.

Ça serait bien de logguer une erreur également pour le cas de valeur négative.
Author
Owner

Ok, fait :)

Ok, fait :)
yweber marked this conversation as resolved
@ -1393,0 +1411,4 @@
assert Template('{{ "x"|repeat:2.99 }}').render(context) == ''
logged_error = pub.loggederror_class.select(order_by='id')[-1]
assert logged_error.summary == 'Repetition count 2.99 have non-zero decimal part'
Owner

Je serais pour mettre la valeur entre parenthèses, ça fera quelque chose plus lisible, notamment pour la traduction.

Je serais pour mettre la valeur entre parenthèses, ça fera quelque chose plus lisible, notamment pour la traduction.
Author
Owner

Ok, merci :)

Ok, merci :)
yweber marked this conversation as resolved
yweber force-pushed wip/89921-create-list-with-fixed-length from a050561035 to 4407ff1cfa 2024-04-29 09:18:23 +02:00 Compare
yweber force-pushed wip/89921-create-list-with-fixed-length from 4407ff1cfa to 7b99cab8a2 2024-04-29 09:19:59 +02:00 Compare
yweber requested review from fpeters 2024-04-29 12:04:30 +02:00
fpeters approved these changes 2024-04-29 16:41:10 +02:00
fpeters left a comment
Owner

Je pense que c'est ok ainsi.

Je pense que c'est ok ainsi.
yweber force-pushed wip/89921-create-list-with-fixed-length from 7b99cab8a2 to 2860d305f3 2024-04-30 14:34:39 +02:00 Compare
yweber merged commit 2860d305f3 into main 2024-04-30 14:46:29 +02:00
yweber deleted branch wip/89921-create-list-with-fixed-length 2024-04-30 14:46:29 +02:00
Sign in to join this conversation.
No reviewers
No Label
No Milestone
No Assignees
2 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: entrouvert/wcs#1439
No description provided.