Bug #15537
demandes multiples d'un usager: trop d'appel webservice lors de l'affichafge de l'une d'elle
0%
Description
- une statut avec une action "afficher un formulaire"
- dans ce formulaire, un champ liste avec un datasource qui appelle un webservice
Une demande est dans ce statut. Quand on l'affiche, le datasource est calculé deux fois = deux appels webservices.
Deux demande dans ce statut, liées au même utilisateur : quand on affiche l'une d'entre elle, trois appels au webservices.
En fait, pour chaque demande du même usager qui s'affiche dans la colonne de droite, si son statut est "avec un datasource" alors il est appelé.
Fichiers
Révisions associées
Historique
Mis à jour par Thomas Noël il y a environ 7 ans
Les appels en trop disparaissent si on fait ça (c'est pas un patch, juste une piste à suivre) :
--- a/wcs/backoffice/management.py +++ b/wcs/backoffice/management.py @@ -1975,7 +1975,7 @@ class FormBackOfficeStatusPage(FormStatusPage): ] from wcs import sql formdatas = sql.AnyFormData.select(criterias, order_by='receipt_time') - self.filled.related_user_forms = formdatas + self.filled.related_user_forms = [] # formdatas
Mis à jour par Thomas Noël il y a environ 7 ans
Parce que ensuite, on fait ceci dans wcs/forms/common.py :
615 related_user_forms = getattr(self.filled, 'related_user_forms', None) or [] 616 for user_formdata in related_user_forms: 617 other_form = user_formdata.get_workflow_form(user) 618 if other_form: 619 user_formdata.mark_as_being_visited()
pour savoir si l'user a quelque chose à faire et locker la demande, cf #12895
Mis à jour par Thomas Noël il y a environ 7 ans
- Fichier 0001-backoffice-optimize-locking-of-related-user-formdata.patch 0001-backoffice-optimize-locking-of-related-user-formdata.patch ajouté
- Patch proposed changé de Non à Oui
Voilà, les tests passent très bien et ça ne me semble pas nécessaire d'en ajouter.
Mis à jour par Thomas Noël il y a environ 7 ans
- Statut changé de Nouveau à En cours
- Assigné à mis à Thomas Noël
Mis à jour par Frédéric Péters il y a environ 7 ans
Je suis gêné par la disparition du or [] qui ajoute un niveau d'indentatoin, + nouveau check sur get_request().user et .roles, a priori nécessairement là; cela ne marche pas
--- a/wcs/forms/common.py +++ b/wcs/forms/common.py @@ -613,9 +613,9 @@ class FormStatusPage(Directory): r += form.render() self.filled.mark_as_being_visited() related_user_forms = getattr(self.filled, 'related_user_forms', None) or [] + user_roles = set(get_request().user.roles) for user_formdata in related_user_forms: - other_form = user_formdata.get_workflow_form(user) - if other_form: + if user_roles.intersection(user_formdata.actions_roles): user_formdata.mark_as_being_visited() if not locked:
(en exécutant uniquement les tests backoffice ça sonne ok)
Mis à jour par Thomas Noël il y a environ 7 ans
- Fichier 0001-backoffice-optimize-locking-of-related-user-formdata.patch 0001-backoffice-optimize-locking-of-related-user-formdata.patch ajouté
C'était exactement mon premier patch, j'aurai dû m'arrêter à ça :)
Mis à jour par Frédéric Péters il y a environ 7 ans
Ouaip c'est bien sûr ok pour moi vu que je proposais aussi ce patch :)
Mis à jour par Thomas Noël il y a environ 7 ans
- Statut changé de En cours à Résolu (à déployer)
commit 966015f83092a3338b9d92ba66a9012f14476c22 Author: Thomas NOEL <tnoel@entrouvert.com> Date: Tue Mar 21 19:50:29 2017 +0100 backoffice: optimize locking of related user formdata (#15537) Use actions_roles instead of get_workflow_form, because get_workflow_form could contain a workflow form, which could use data_sources, which could call webservices.
Mis à jour par Frédéric Péters il y a plus de 5 ans
- Statut changé de Résolu (à déployer) à Solution déployée
backoffice: optimize locking of related user formdata (#15537)
Use actions_roles instead of get_workflow_form, because
get_workflow_form could contain a workflow form, which could use
data_sources, which could call webservices.