Projet

Général

Profil

Development #66894

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

Ajouté par Benjamin Dauvergne il y a plus d'un an. Mis à jour il y a plus d'un an.

Statut:
Rejeté
Priorité:
Normal
Assigné à:
-
Version cible:
-
Début:
02 juillet 2022
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Non
Planning:
Non

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.


Demandes liées

Lié à 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)Fermé06 juillet 2022

Actions

Historique

#3

Mis à jour par Benjamin Dauvergne il y a plus d'un an

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

Mis à jour par Frédéric Péters il y a plus d'un an

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

Mis à jour par Benjamin Dauvergne il y a plus d'un an

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

Mis à jour par Frédéric Péters il y a plus d'un an

  • Statut changé de Nouveau à 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

Mis à jour par Benjamin Dauvergne il y a plus d'un an

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

Formats disponibles : Atom PDF