L'autocomplétion est isolée et réutilisable par d'autres apps #694
No reviewers
Labels
No labels
devtype -- backend
devtype -- docs
devtype -- frontend
devtype -- user interface
difficulty -- easy
difficulty -- hard
difficulty -- normal
Doing
domain -- bda
domain -- bds
domain -- cof
domain -- core
domain -- kfet
Good first issue
priority -- high
priority -- low
priority -- medium
priority -- staff-wanted
status -- development
status -- discussion
status -- need review
status -- production
status -- ready to merge
status -- todo
To Do
type -- bug
type -- hygiene
type -- improvement
type -- new feature
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: DGNum/gestioCOF#694
Loading…
Reference in a new issue
No description provided.
Delete branch "kerl/autocomplete"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Idée : on écrit des petites unités de recherche qui cherche à un endroit (genre une table SQL, le LDAP, etc) et on laisse la classe
Compose
agréger les résultats.ModelSearch
LDAPSearch
avec une interface similaireCompose
fait le taf d'appeler tout le monde et de virer les doublons.À propos des doublons : je ne suis pas hyper convaincu de ce que j'ai fait mais j'ai pas tellement de meilleure idée, en tout cas pas qui soit aussi simple. Des idées ou on garde ça ?
À voir ensemble (au moins) :
added 1 commit
Compare with previous version
mentioned in merge request !396
Après réflexion, je serais plutôt pour fermer cette MR...
J'ai l'impression que c'est à la fois très général (tous les trucs de
_get_clipper_field
par exemple), mais que finalement le usecase est assez restreint. Typiquement, sur les 3/4 utilisations de l'autocomplétion (comptes K-Fêt, création de compte K-Fêt, inscription d'utilisateurs, [future] recherche de participants BdA (voir #235)) dans le gestioCOF actuel, ça n'en couvre vraiment qu'un seul.Ce que j'aurais plus vu, quitte à factoriser l'autocomplétion, ça serait une vue (là, une
TemplateView
me va très bien) qui gère l'affichage, et qui délègue l'autocomplétion à des modules plus spécialisés (clippers, comptes COF, comptes K-Fêt, etc). Mais il y a aussi probablement d'autres solutions =)En tout cas, je pense que ça mérite un peu de discussion sur le sujet ; si @champeno ou @areitz ont des idées...
Le but était effectivement de tout factoriser, et je pense que ça couvre plus ou moins les inscriptions COF/BDS/K-Fêt. Mais comme tu dis, c'est encore un peu trop rigide. Je suis d'accord pour qu'on prenne le temps de faire un truc mieux.
Ta suggestion me paraît bien, un truc me fait peur : il ne faut pas garder la logique de l'autocomplétion des différentes apps séparées comme c'est le cas actuellement. Mais c'est peut-être pas ce que tu sous-entendais. Au minimum il faut que la recherche dans le LDAP soit partagée par tout le monde, mais idéalement il faudrait un moyen de "composer" des modes de recherche, un peu dans la même idée que le
_get_clipper_field
mais de façon plus générique. Peut-être avec une liste de champs dans lesquels chercher, à la manière de https://git.eleves.ens.fr/klub-dev-ens/gestioCOF/blob/master/gestioncof/views.py#L945. J'essaie de creuser cette piste.Ce que je sous entendais serait plutôt une logique du genre :
Autocomplete
), qui s'occupe juste de l'affichage (et est indépendante de toutes les apps)Le but de la vue d'affichage serait juste d'agréger les complétions de ses différents providers en un truc unique, et du coup à chaque fois qu'on veut utiliser de l'autocomplétion il suffit de subclass
Autocomplete
et de lui spécifier les providers nécessaires.mentioned in merge request !401
added 93 commits
master
914888d1
- Merge the utils and shared appsd2c6c9da
- Type hints in shared.views.autocompletee45ee3fb
- More documentation for ModelSearcha259b04d
- Explicative comment about the Type[M] annotationb8cd5f1d
- Drop type hints in shared.views.autocompleteb1d8bb04
- Generic auto-completion mechanismCompare with previous version
changed the description
assigned to @lstephan
J'ai implémenté en gros ce que tu disais. Ça te parait comment ?
La syntaxe whitespace-separated est assez perturbante imo,
['clipper', 'fullname']
serait plus lisible.Oh j'avais pas vu qu'on pouvais faire ça, c'est beaucoup mieux oui
À mettre dans la docstring de la fonction du dessus ?
typo =)
C'est pep-standard de mettre les double ` dans les docstrings ?
aucune idée, j'ai l'impression qu'on voit un peu de tout dans la nature mais j'ai pas eu la motiv d'aller chercher dans les PEPs
thx!
Ça me paraît vraiment bien ! Dernier caveat (qui est possiblement trop overengineer ?) : est ce que tu penses que ça serait une bonne idée de déléguer une partie du rendering aux sous classes (ou à la classe d'agrégation) ? J'ai l'impression que la présentations des résultats varie très peu d'une autocomplétion à l'autre, mais peut-être que les légères différences rendent ça relou...
Une seule ` tu préfères ? Moi aussi, je ne sais plus où j'ai pris cette habitude des `` mais c'est moche
Je trouve ça un peu lourd avec ``, effectivement...
C'est une bonne question.
J'ai pas de réponse définitive mais je pense que ça prendra la forme d'une class-based view
AutocompletionView
, qui utiliseCompose
en interne, mais séparée dans une autre classe.Donc a priori c'est facile de travailler sans en attendant et facile à mettre dans une autre MR, je propose d'en rester là pour cette MR, si ça te va
changed this line in version 5 of the diff
changed this line in version 5 of the diff
changed this line in version 5 of the diff
added 1 commit
3b0d4ba5
- lstephan's suggestionsCompare with previous version
done
Pourquoi s'emmerder à
map
si on ne fait que les compter ?marked the checklist item Est-ce que le design général est ok ? as completed
marked the checklist item Est-ce que les docstrings sont claires ? as completed
resolved all discussions
merged
mentioned in commit
64ceb813c6
Le nom est trompeur :
assertCountEqual
vérifie que les deux itérables contiennent les mêmes éléments avec le même nombre de répétitions. Et c'est implémenté avec uncollections.Counter
d'où le nom.Ref: https://docs.python.org/3/library/unittest.html#unittest.TestCase.assertCountEqual