Project

General

Profile

Development #66894

Avoir un filtre pour détecter les doublons dans une liste...

Added by Benjamin Dauvergne → en congés jusqu'au 29/08 about 2 months ago. Updated about 1 month ago.

Status:
Rejeté
Priority:
Normal
Assignee:
-
Target version:
-
Start date:
02 July 2022
Due date:
% Done:

0%

Estimated time:
Patch proposed:
No
Planning:
No

Description

Proposition d'évolution par monsieur Thibault Radelet de Nanterre:

avoir un filtre pour facilement détecter l'unicité des valeurs dans une liste

Ex.:

form_var_mon_bloc|values_is_unique:"form_var_ma_var" 
OU form_var_mon_bloc|getlist:"form_var_ma_var"|values_is_unique
OU form_var_mon_bloc|getlist_distinct:"form_var_ma_var" (à comparer au getlist:"xxx"|count standard) 

pour ma part je pencherai pour le comportement du filtre |values_is_unique mais certainement avec un autre nom, peut-être |has-no-duplicate, en passant on pourrait avoir un |no-duplicate qui lui retire les valeurs en double.


Related issues

Related to w.c.s. - Development #67054: templatetags: pouvoir construire des listes via list et add (était Ajouter à |list un argument optionnel pour permettre de créer des listes)Solution proposée06 July 2022

Actions

History

#3

Updated by Benjamin Dauvergne → en congés jusqu'au 29/08 about 1 month ago

Dans #66279 une proposition que j'ai faite un peu différente, avoir un filtre prenant une première valeur puis une liste, ça permettra d'utiliser le filtre soit avec des listes soit avec des champs différents :

form_var_items|getlist:"form_var_ma_var"|values-are-unique
form_var_string1|values-are-unique:form_var_string2
form_var_file1|values-are-unique:form_var_file2

Il faudrait avoir une spécialisation pour certains types de donnée (pour les fichiers comparer les hashs par exemple).

#4

Updated by Frédéric Péters about 1 month ago

Pas enthousiaste sur tout ça; comme on a |date, |datetime, |decimal, |list, je préférerais réfléchir à un |set, que s'apprennent/s'emploient là-dessus les constructions spécifiques, type ...|set|count == ...|count pour valider l'unicité des éléments, à l'image de ce qui se fait actuellement en python d'après #66826.

#5

Updated by Benjamin Dauvergne → en congés jusqu'au 29/08 about 1 month ago

Frédéric Péters a écrit :

Pas enthousiaste sur tout ça; comme on a |date, |datetime, |decimal, |list, je préférerais réfléchir à un |set, que s'apprennent/s'emploient là-dessus les constructions spécifiques, type ...|set|count == ...|count pour valider l'unicité des éléments, à l'image de ce qui se fait actuellement en python d'après #66826.

1. Je ne vois pas l'intérêt d'importer des idiomes python dans quelque chose qui n'est pas du python

2. La différence bag/set n'est vraiment pas maîtrisé par les gens (et je parle avec mon background de matheux), ils recopieront bêtement l'exemple de la doc sans comprendre (et il faudra donner un exemple spécifique pour voir l'idiome utilisé, sinon il y a peu de chance que les gens trouvent tous seuls) sans compter le fait que set va lever des erreurs pour les types non "hashable" comme un dico ou un objet pas prévu pour

3. La syntaxe des filtres simples sans argument ne permet pas les cas à base de variables différentes que je montre et qui sont réels, genre tester l'unicité entre 3 ou 4 champs, comment construire une séquence dans ce cas ? Tu verrais d'ajouter au filtre list un argument optionnel (x|list:y) pour compléter tout ça ? Ça donnerait pour le cas des fichiers un truc genre form_var_pj1|list:form_var_pj2|list:form_var_pj3|set|count != form_var_pj1|list:form_var_pj2|list:form_var_pj3|count

4. Je suis d'accord qu'avoir des opérations atomiques est plus sympa pour l'extensibilité, mais les conditions ne permettant pas d'introduire des variables ça fait des expressions plutôt longue (parce qu'on doit répéter la sous expression de construction de la liste à gauche et à droite du comparateur)

Au final mon opinion c'est que la construction de liste devrait être améliorée à part (via un x|list:y), les filtres compliqués que j'ai proposé ne sont pas une bonne idée; mais le test d'unicité devrait être une opération à part entière, facilement documentable et ne pas demander aux gens de maîtriser l'idiome len(set(sequence)) == len(sequence).

#6

Updated by Frédéric Péters about 1 month ago

  • Status changed from Nouveau to Rejeté

les filtres compliqués que j'ai proposé ne sont pas une bonne idée.

Parfait oublions tout ça et je fais un ticket pour faire |set qui est utile pour des traductions immédiates d'expressions Python comme c'est le cas à Nanterre, sans en encourager l'utilisation au-delà.

#7

Updated by Benjamin Dauvergne → en congés jusqu'au 29/08 about 1 month ago

  • Related to Development #67054: templatetags: pouvoir construire des listes via list et add (était Ajouter à |list un argument optionnel pour permettre de créer des listes) added

Also available in: Atom PDF