Préparation de la vue d'autocompletion pour l'intégration du BDS #705
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#705
Loading…
Reference in a new issue
No description provided.
Delete branch "kerl/merge_shared_utils"
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?
Petits changements pour préparer !390
Fusion des modules
shared
etutils
: je ne sais plus comment on s'est retrouvé avec deux modules séparés mais ça ne me paraît mieux de (re)fusionner.Séparation entre :
ModelSearch
)Select2QuerySetView
).L'idée et qu'on puisse garder la vue d'autocomplétion dal et réutiliser la partie "recherche" dans !390 avec un "combinateur" qui agrège les résultats de plusieurs instances de
ModelSearch
, les résultats d'une recherche ldap, etc. cf https://git.eleves.ens.fr/klub-dev-ens/gestioCOF/merge_requests/390#note_6718.Bonus : annotations de type dans
shared.views.autocomplete
. Je ne sais pas si on veut faire ça partout, ou à quelques endroits, ou nulle part. Je mets ça là pour montrer à quoi ça peut ressembler, je pense que dans ce genre de cas ça fait de la doc pas chère. C'est un tout petit commit, aucun souci pour le virer si on décide qu'on n'aime pas.changed milestone to %1
Pourquoi il faut créer une
TypeVar
pourModel
et pas pourQ
?Oui,
M
est une variable de type (avec la contrainte d'être un sous type deModel
), car ça peut être n'importe quel modèle. En revanche le résultat deget_queryset_filter
c'est toujours unQ
.Si j'ai bien compris la sémantique de
typing.Type
, la ligne 16 sert à dire quemodel = M
et donc que les résultats de la recherche sont des instances demodel
.À noter que la CI ne passe pas pour une bonne raison : la VM (ainsi que le conteneur de la CI) sont sous python 3.5 qui ne supporte les annotations de type que dans les déclarations de fonctions, pas pour les classes.
La machine COF est sous debian oldstable, passer sous stable réglerait le problème (stable est sous python 3.7).
Soit on fait l'upgrade bientôt, soit ça prends du temps et on peut laisser tomber les annotations pour cette fois.
Ca pourrait valoir le coup d'être commenté, du coup =)
Perso j'aime bien les type hints (module quelques comments, du coup), mais je sais pas à quel point ça prend du temps d'upgrade =)
Après avoir un peu bouquiné la doc, j'ai l'impression que c'est redondant : la définition de
M
viaTypeVar
dit déjà queM
contient toutes les sous-classes deModel
, non ? Il aurait fallu mettreType[Model]
sinon, mais vu qeu tu as besoin deM
pour le type générique...Non,
M
ne contient pas toutes les sous classes deModel
.M
est une variable qui peut être substituée par n'importe quelle type (ou classe en l'occurrence) qui est un sous-type (qui hérite) deModel
. Ainsi, la substitution deM
parUser
donneModelSearch[User]
qui est le type des instances qui renvoient uniquement desUser
s, de mêmeModelSearch[Account]
est le type des instances qui renvoient desAccount
s, etc.Le fait de mettre l'annotation
model: Type[M]
indique que le type des objets renvoyés parsearch
correspond bien au type indiqué dans l'attributmodel
.J'aurais aussi pu mettre
search(self, keywords: Iterable[str]) -> Iterable[Model]
etmodel: Type[Model]
mais dans ce cas on est moins précis : on indique juste que la classe renvoie des instances de modèles, on ne dit pas de quels modèles.Par exemple :
C'est probablement rendu peu clair par le fait qu'en python il faut créer ses variables de type soi-même alors que dans la plupart des langages avec du polymorphisme, ça fait partie de la syntaxe. Dis toi que la déclaration de la variable de type
M
ligne 6 ne devrait pas exister de même qu'on ne déclare pas à l'avance les arguments des fonctions, on écrit justedef add(x, y): ...
etx
ety
existent dans le corps deadd
.added 1 commit
Compare with previous version
added 1 commit
Compare with previous version
marked as a Work In Progress
changed the description
Bon, deux choses :
Vu la longueur de la conversation plus haut, les annotations (dans ce cas au moins) sont source d'incompréhension alors qu'elles devraient aider à comprendre le code. On devrait sûrement les virer.
Si on vire les annotations, on peut merge sans attendre que la machine COF soit mise à jour.
Tu valides @lstephan ?
changed this line in version 4 of the diff
changed this line in version 4 of the diff
added 1 commit
Compare with previous version
unmarked as a Work In Progress
added 39 commits
master
Compare with previous version
added 33 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.autocompleteCompare with previous version
plus de types
plus de types
resolved all discussions
@lstephan J'ai viré typing puisque ça semblait plus source de confusion qu'autre chose.
Est-ce que ça te va en l'état ?
Il me semblait qu'on avait parlé de faire une classe plus générale donc
ModelSearch
hériterait, mais ça peut attendre une autre MR, donc je merge ça =)merged
mentioned in commit
5298a19667
yep, ça vient juste après ;)