Development #39803
Création d'une demande/resoumission : avoir accès à la demande parente
0%
Description
Via form.links
on a accès aux demandes filles, mais les données formdata.submission_context['orgi_formdef/formdata_id']
elles ne sont pas exposés via les variables de substitution, je propose un form.parent
sur le même principe que form.parent.<varname>
, ainsi une demande fille pourra référencer des données de la demande parente (exemple, une demande de pré-réservation validée pourra fournir les détails de la réservation à la demande fille permettant de remplir un dossier administratif).
Fichiers
Révisions associées
misc: add parent variable to lazy formdata (#39803)
Historique
Mis à jour par Benjamin Dauvergne il y a environ 4 ans
- Fichier 0001-misc-add-parent-variable-to-lazy-formdata-39803.patch 0001-misc-add-parent-variable-to-lazy-formdata-39803.patch ajouté
- Statut changé de Nouveau à Solution proposée
- Patch proposed changé de Non à Oui
Mis à jour par Benjamin Dauvergne il y a environ 4 ans
- Fichier 0002-misc-prevent-infinite-recursion-when-walking-lazy-fo.patch 0002-misc-prevent-infinite-recursion-when-walking-lazy-fo.patch ajouté
- Fichier 0001-misc-add-parent-variable-to-lazy-formdata-39803.patch 0001-misc-add-parent-variable-to-lazy-formdata-39803.patch ajouté
Le fait d'ajouter un accesseur dans les deux sens pose problème pour la vue /inspect (ça boucle).
Mis à jour par Thomas Noël il y a environ 4 ans
Je me suis posé la question d'utilise form_orig parce que c'est ainsi que c'est codé (orig_formdef_id / orig_formdata_id) mais parent c'est joli.
Rien à dire sur 0001, sauf que l'inspecteur va afficher un form_parent à None sur toutes les demandes qui n'ont pas de parent. C'est un peu dommage je trouve, on pourrait l'éviter avec :
--- a/wcs/variables.py +++ b/wcs/variables.py @@ -213,7 +213,8 @@ class LazyFormData(LazyFormDef): if key[0] == '_' or key in blacklist: continue if key == 'parent': - yield key, False # = recurse + if self.parent: + yield key, False # = recurse else: yield key
Si le "self.parent" va un peu trop loin parce qu'il faut un formdata.get_substitution_variables inutile ici, on pourrait décomposer avec un "has_parent(self)" et un "parent(self):" dans LazyFormData, le second utilisant le premier. Et on pourrait dnoc faire un "if self.has_parent():" à la place de "if self.parent:" dans le inspect_keys ci-dessus.
(Mais je suis ouvert à la remarque qui serait "c'est bien d'avoir un form_parent = None", ça veut dire explicitement que cette demande n'a pas de parent)
Sur 0002 pour moi ça manque de commentaire un peu plus explicite. Sur le « yield key, False # = recurse » j'aurai préféré une phrase qui explique qu'on renvoie ici un message spécifique (tuple) pour faire comprendre à get_flat_keys qu'il ne doit pas aller plus loin. Et dans get_flat_keys rappeler ce mécanisme au niveau du "if not isinstance(sub_key, str):". Je dis ça parce que ça m'a pris un peu de temps de piger le truc.
Mis à jour par Frédéric Péters il y a environ 4 ans
(Mais je suis ouvert à la remarque qui serait "c'est bien d'avoir un form_parent = None", ça veut dire explicitement que cette demande n'a pas de parent)
Là-dessus pas d'avis majeur de mon côté, instinctivement je serais pour ne pas afficher. (on n'affiche pas un form_attachments qui n'existe pas, bien qu'on voudrait peut-être, #21107).
À noter aussi que la récursion infinie que cela essaie d'éviter est déjà évitée par #39803. Ça n'empêche pas de se dire qu'on veut que parent_... ne soit pas développé/déplié mais je me demande quand même ce que ça affiche dans le /inspect.
Mis à jour par Thomas Noël il y a environ 4 ans
Frédéric Péters a écrit :
(Mais je suis ouvert à la remarque qui serait "c'est bien d'avoir un form_parent = None", ça veut dire explicitement que cette demande n'a pas de parent)
Là-dessus pas d'avis majeur de mon côté, instinctivement je serais pour ne pas afficher. (on n'affiche pas un form_attachments qui n'existe pas, bien qu'on voudrait peut-être, #21107).
À noter aussi que la récursion infinie que cela essaie d'éviter est déjà évitée par #39803
#39803 c'est ce ticket lui-même, tu voulais parler d'un autre ?
Ça n'empêche pas de se dire qu'on veut que parent_... ne soit pas développé/déplié mais je me demande quand même ce que ça affiche dans le /inspect
Effectivement, comme form_link ça va ajouter beaucoup (beaucoup) de choses dans l'inspect qui ne sont pas liées à la demande elle-même. On pourrait effectivement voir à afficher les form_links et form_parent dans une section à part, comme on prévoit de le faire pour form_attachments. Ca aurait ma préférence.
Mis à jour par Frédéric Péters il y a environ 4 ans
#39803 c'est ce ticket lui-même, tu voulais parler d'un autre ?
yep, #40429...
ça va ajouter beaucoup (beaucoup) de choses dans l'inspect qui ne sont pas liées à la demande elle-même. (...)
Mon idée (mais ça quitte se ticket), c'était que tout soit affiché dans la même liste mais certaines entrées seraient "pliées" par défaut; on aurait form_attachments_… [déplier]. (j'étais parti pour le faire au moment où j'ai tapé l'utilisation des lazy pour le /inspect mais ça mêlait trop de choses).
Mis à jour par Benjamin Dauvergne il y a environ 4 ans
- Fichier Firefox_Screenshot_2020-03-31T13-39-09.307Z.png Firefox_Screenshot_2020-03-31T13-39-09.307Z.png ajouté
Frédéric Péters a écrit :
À noter aussi que la récursion infinie que cela essaie d'éviter est déjà évitée par #39803. Ça n'empêche pas de se dire qu'on veut que parent_... ne soit pas développé/déplié mais je me demande quand même ce que ça affiche dans le /inspect.
J'ai vu ça mais ça déscend quand même puis ça remonte et la page inspect prend un temps dingue à s'afficher parce que même si c'est pas infini, c'est trop (ex.: form_parent_form_links_newform_form_parent_form_number_raw).
Firefox_Screenshot_2020-03-31T13-39-09.307Z.png
Mis à jour par Benjamin Dauvergne il y a environ 4 ans
Frédéric Péters a écrit :
#39803 c'est ce ticket lui-même, tu voulais parler d'un autre ?
yep, #40429...
ça va ajouter beaucoup (beaucoup) de choses dans l'inspect qui ne sont pas liées à la demande elle-même. (...)
Mon idée (mais ça quitte se ticket), c'était que tout soit affiché dans la même liste mais certaines entrées seraient "pliées" par défaut; on aurait form_attachments_… [déplier]. (j'étais parti pour le faire au moment où j'ai tapé l'utilisation des lazy pour le /inspect mais ça mêlait trop de choses).
De mon coté plutôt que de partir sur une mécanique un peu complexe, j'aurai plutôt passer du temps pour voir comment en faire des liens vers les vues inspect des demandes concernées (et des fiches aussi).
Mis à jour par Benjamin Dauvergne il y a environ 4 ans
Le screenshot est obtenu en faisant un revert du patch 0002.
Mis à jour par Benjamin Dauvergne il y a environ 4 ans
- Statut changé de Solution proposée à En cours
Bon ça ne marche pas du tout, visiblement inspect() récupère juste un CompatibilityNamesDict() (sur form_parent
et ne sait pas comment l'afficher).
elif hasattr(v, 'inspect_keys') or isinstance(v, dict): # skip expanded continue
va falloir que je réfléchisse un peu plus.
Mis à jour par Benjamin Dauvergne il y a environ 4 ans
- Fichier 0002-misc-prevent-infinite-recursion-when-walking-lazy-fo.patch 0002-misc-prevent-infinite-recursion-when-walking-lazy-fo.patch ajouté
- Fichier 0001-misc-add-parent-variable-to-lazy-formdata-39803.patch 0001-misc-add-parent-variable-to-lazy-formdata-39803.patch ajouté
- Fichier 0003-misc-do-not-show-form_parent-when-it-s-None-39803.patch 0003-misc-do-not-show-form_parent-when-it-s-None-39803.patch ajouté
- Statut changé de En cours à Solution proposée
Avec la suggestion de Thomas et au lieu d'empêcher toute récursion je la limite à 3 (je vais mettre un screenshot) mais en gros on voit jusqu'à form_var_* (et je devrais faire pareil sur links_*).
Mis à jour par Benjamin Dauvergne il y a environ 4 ans
- Fichier Firefox_Screenshot_2020-03-31T14-25-29.215Z.png Firefox_Screenshot_2020-03-31T14-25-29.215Z.png ajouté
- Fichier Firefox_Screenshot_2020-03-31T14-25-11.515Z.png Firefox_Screenshot_2020-03-31T14-25-11.515Z.png ajouté
Demande parente : Firefox_Screenshot_2020-03-31T14-25-29.215Z.png
Demande fille : Firefox_Screenshot_2020-03-31T14-25-11.515Z.png
Mis à jour par Benjamin Dauvergne il y a environ 4 ans
- Fichier 0001-misc-prevent-infinite-recursion-when-walking-lazy-fo.patch 0001-misc-prevent-infinite-recursion-when-walking-lazy-fo.patch ajouté
- Fichier 0002-misc-add-parent-variable-to-lazy-formdata-39803.patch 0002-misc-add-parent-variable-to-lazy-formdata-39803.patch ajouté
Nouvelle proposition cette fois on ne voit justement qu'un lien vers la page inspect du formulaire.
Mis à jour par Benjamin Dauvergne il y a environ 4 ans
Mis à jour par Frédéric Péters il y a environ 4 ans
Pas vraiment fan, ça n'aide pas à capter les noms de variable qui peuvent être utilisés.
(note sur le côté, j'ai retiré les affichages directs des images pour laisser uniquement les vignettes).
Mis à jour par Benjamin Dauvergne il y a environ 4 ans
Frédéric Péters a écrit :
Pas vraiment fan, ça n'aide pas à capter les noms de variable qui peuvent être utilisés.
(note sur le côté, j'ai retiré les affichages directs des images pour laisser uniquement les vignettes).
Donc tu préfères le patch d'avant ? (#39803-13)
Mis à jour par Frédéric Péters il y a environ 4 ans
Ma préférence déjà notée ce serait « certaines entrées seraient "pliées" par défaut; on aurait form_attachments_… [déplier]. ».
Mais j'ai également noté que ce serait pour ailleurs; à défaut, ici, donc je serais pour
- form_parent <lien vers> + form_parent_… /variables de la demande parente (<lien vers>)/
qui est "explicite" sur le fait qu'on peut avoir des variables commençant par form_parent_; et sur le détail ça attendra l'ajout d'un bouton [déplier].
Mis à jour par Benjamin Dauvergne il y a environ 4 ans
- Fichier Firefox_Screenshot_2020-04-03T15-24-46.132Z.png Firefox_Screenshot_2020-04-03T15-24-46.132Z.png ajouté
- Fichier Firefox_Screenshot_2020-04-03T15-24-28.537Z.png Firefox_Screenshot_2020-04-03T15-24-28.537Z.png ajouté
Voilà (branche à jour).
Mis à jour par Frédéric Péters il y a environ 4 ans
(ça reste moche ce truc de coupage de récursion et à mon avis ça sera à défaire au moment d'étendre la vue pour pouvoir déplier mais passons)
Vu les tests ça fait aussi partir form_links_resubmitted_form_var_foo_string, ça pourrait concerner uniquement parent_ ? (a priori ne pas avoir la modif à create_formdata.py)
Sans doute un peu de répercussion ici elif hasattr(v, 'inspect_url') and getattr(v, '_formdata', None) != self.filled:
pour que ça soit moins générique, que ça vise juste la variable "parent"; mais sans doute ça rajoute une autre couche pas terrible, donc passons tout ça, coupons aussi la récurision de "resubmitted", juste quand même ajouter un commentaire à cet endroit, genre "variable representing another form, subvariables are not included, a link to its inspect page is used instead"). (question ici sur les fiches, qui vont être prises aussi dans ce jeu, ok passons).
inspect_url
pourrait être get_inspect_url
retourner une URL, plutôt qu'un bout d'HTML ?
Mis à jour par Benjamin Dauvergne il y a environ 4 ans
- Fichier 0001-misc-prevent-infinite-recursion-when-walking-lazy-fo.patch 0001-misc-prevent-infinite-recursion-when-walking-lazy-fo.patch ajouté
- Fichier 0002-misc-add-parent-variable-to-lazy-formdata-39803.patch 0002-misc-add-parent-variable-to-lazy-formdata-39803.patch ajouté
Voilà.
PS: j'ai bougé tout le rendu dans inspect comme demandé et ça ne vise plus que les variables se terminant par 'form_parent', screenshot attaché.
Mis à jour par Benjamin Dauvergne il y a environ 4 ans
- Fichier Firefox_Screenshot_2020-04-10T12-17-45.695Z.png ajouté
Mis à jour par Benjamin Dauvergne il y a environ 4 ans
Mis à jour par Benjamin Dauvergne il y a environ 4 ans
- Fichier
Firefox_Screenshot_2020-04-10T12-17-45.695Z.pngsupprimé
Mis à jour par Thomas Noël il y a environ 4 ans
A mon tour, allez.
- tu peux supprimer le
from quixote.html import htmltext
de wcs/variables.py htmltext(_('<var>/variables from parent\'s request/</var>'))
→htmltext('<var>%s</var>') % _('variables from parent\'s request')
pour avoir un .po plus propre
Pour moi on peut se passer du get_inspect_url et faire un 'inspect_url': v['form'].backoffice_url() + 'inspect',
(Bon, aussi, je n'arrive pas bien à voir ce qui va se passer si v['form'] pointe vers un formulaire qui n'existe plus, du mal à suivre le fil)
Mis à jour par Benjamin Dauvergne il y a environ 4 ans
Thomas Noël a écrit :
A mon tour, allez.
- tu peux supprimer le
from quixote.html import htmltext
de wcs/variables.py
ok.
htmltext(_('<var>/variables from parent\'s request/</var>'))
→htmltext('<var>%s</var>') % _('variables from parent\'s request')
pour avoir un .po plus propre
ok.
Pour moi on peut se passer du get_inspect_url et faire un
'inspect_url': v['form'].backoffice_url() + 'inspect',
ok.
(Bon, aussi, je n'arrive pas bien à voir ce qui va se passer si v['form'] pointe vers un formulaire qui n'existe plus, du mal à suivre le fil)
LazyFormData.parent va renvoyer None, et donc isinstance(v, CompatibilityNamesDict)
va renvoyer False, et donc ça on ne passera pas dans cette branche du elif
.
PS: branche à jour.
Mis à jour par Thomas Noël il y a environ 4 ans
Je pige pas trop les "/" dans "/variables from parent\'s request/" (ça fait un peu moche, mais bon, goûts, couleurs, tout ça)
Mis à jour par Thomas Noël il y a environ 4 ans
Thomas Noël a écrit :
Je pige pas trop les "/" dans "/variables from parent\'s request/" (ça fait un peu moche, mais bon, goûts, couleurs, tout ça)
En dehors de ça j'ai rien d'autre à dire... Frédéric, en dernière passe, c'est ok ?
Mis à jour par Benjamin Dauvergne il y a environ 4 ans
Thomas Noël a écrit :
Je pige pas trop les "/" dans "/variables from parent\'s request/" (ça fait un peu moche, mais bon, goûts, couleurs, tout ça)
C'est une demande explicite de Fred.
Mis à jour par Frédéric Péters il y a environ 4 ans
Je retombe pas sur mon commentaire mais ça symbolisait de l'italique.
Mis à jour par Benjamin Dauvergne il y a environ 4 ans
Frédéric Péters a écrit :
Je retombe pas sur mon commentaire mais ça symbolisait de l'italique.
Ok je vire les barres obliques.
PS: branche à jour.
Mis à jour par Thomas Noël il y a environ 4 ans
- Statut changé de Solution proposée à Solution validée
Pour moi c'est ok ainsi en première approche, car j'ai pas d'autre idée (pour éviter la "coupure de récursion").
Mis à jour par Benjamin Dauvergne il y a environ 4 ans
- Statut changé de Solution validée à Résolu (à déployer)
commit 9ec51c0174b89234c75cf94b9501cf82a7820e95 Author: Benjamin Dauvergne <bdauvergne@entrouvert.com> Date: Wed Feb 12 19:48:49 2020 +0100 misc: add parent variable to lazy formdata (#39803) commit 18782e585a615dabf26c65bbdd92650222b17f44 Author: Benjamin Dauvergne <bdauvergne@entrouvert.com> Date: Mon Mar 2 14:09:10 2020 +0100 misc: prevent infinite recursion when walking lazy formdata (#39803)
Mis à jour par Frédéric Péters il y a environ 4 ans
- Statut changé de Résolu (à déployer) à Solution déployée
misc: prevent infinite recursion when walking lazy formdata (#39803)