Project

General

Profile

Development #80760

accepter plusiers l'actions "Formulaire" avec le même identifiant dans un statut de workflow

Added by Serghei Mihai 9 months ago. Updated 24 days ago.

Status:
Solution déployée
Priority:
Normal
Target version:
-
Start date:
01 September 2023
Due date:
% Done:

0%

Estimated time:
Patch proposed:
No
Planning:
No

Description

Pour éviter les situations où l'usager duplique l'action "Formulaire" sans modifier l'identifiant et qui peuvent donner des erreurs 500 car 2 formulaires s'affichent dans le statut de la demande.

La trace produite par wcs dans ces cas:

août 31 17:07:56 VJGRC uwsgi[3699961]: Exception:
août 31 17:07:56 VJGRC uwsgi[3699961]:   type = '<class 'ValueError'>', value = 'form already has 'fmodif_1' widget'
août 31 17:07:56 VJGRC uwsgi[3699961]: Stack trace (most recent call first):
août 31 17:07:56 VJGRC uwsgi[3699961]:   File "/usr/lib/python3/dist-packages/quixote/form/form.py", line 230, in add
août 31 17:07:56 VJGRC uwsgi[3699961]:    228     def add(self, widget_class, name, *args, **kwargs):
août 31 17:07:56 VJGRC uwsgi[3699961]:    229         if name in self._names:
août 31 17:07:56 VJGRC uwsgi[3699961]: >  230             raise ValueError("form already has '%s' widget" % name)
août 31 17:07:56 VJGRC uwsgi[3699961]:    231         # add 'id' attribute if not already present
août 31 17:07:56 VJGRC uwsgi[3699961]:    232         if 'id' not in kwargs:
août 31 17:07:56 VJGRC uwsgi[3699961]:   locals:
août 31 17:07:56 VJGRC uwsgi[3699961]:      args = ()
août 31 17:07:56 VJGRC uwsgi[3699961]:      kwargs = {'title': 'Je souhaite annuler mon créneau', 'hint': '', 'required': False, 'render_br': False}
août 31 17:07:56 VJGRC uwsgi[3699961]:      name = 'fmodif_1'
août 31 17:07:56 VJGRC uwsgi[3699961]:      self = <wcs.qommon.form.Form object at 0x7fcda5b378e0>
août 31 17:07:56 VJGRC uwsgi[3699961]:      widget_class = <class 'wcs.qommon.form.CheckboxWidget'>
août 31 17:07:56 VJGRC uwsgi[3699961]:   File "/usr/lib/python3/dist-packages/wcs/qommon/form.py", line 375, in add
août 31 17:07:56 VJGRC uwsgi[3699961]:    373         if self.use_tabs:
août 31 17:07:56 VJGRC uwsgi[3699961]:    374             tab = kwargs.pop('tab', None)
août 31 17:07:56 VJGRC uwsgi[3699961]: >  375         QuixoteForm.add(self, widget_class, name, *args, **kwargs)
août 31 17:07:56 VJGRC uwsgi[3699961]:    376         widget = self._names[name]
août 31 17:07:56 VJGRC uwsgi[3699961]:    377         if 'id' not in kwargs and 'id' in widget.attrs:
août 31 17:07:56 VJGRC uwsgi[3699961]:   locals:
août 31 17:07:56 VJGRC uwsgi[3699961]:      advanced = False
août 31 17:07:56 VJGRC uwsgi[3699961]:      args = ()
août 31 17:07:56 VJGRC uwsgi[3699961]:      default_value = Ellipsis
août 31 17:07:56 VJGRC uwsgi[3699961]:      kwargs = {'title': 'Je souhaite annuler mon créneau', 'hint': '', 'required': False, 'render_br': False}
août 31 17:07:56 VJGRC uwsgi[3699961]:      name = 'fmodif_1'
août 31 17:07:56 VJGRC uwsgi[3699961]:      self = <wcs.qommon.form.Form object at 0x7fcda5b378e0>
août 31 17:07:56 VJGRC uwsgi[3699961]:      widget_class = <class 'wcs.qommon.form.CheckboxWidget'>
août 31 17:07:56 VJGRC uwsgi[3699961]:   File "/usr/lib/python3/dist-packages/wcs/fields.py", line 899, in add_to_form
août 31 17:07:56 VJGRC uwsgi[3699961]:    897         else:
août 31 17:07:56 VJGRC uwsgi[3699961]:    898             hint = get_publisher().translate(self.hint or '')
août 31 17:07:56 VJGRC uwsgi[3699961]: >  899         form.add(self.widget_class, 'f%s' % self.id, title=self.label, hint=hint, **kwargs)
août 31 17:07:56 VJGRC uwsgi[3699961]:    900         widget = form.get_widget('f%s' % self.id)
août 31 17:07:56 VJGRC uwsgi[3699961]:    901         widget.field = self
août 31 17:07:56 VJGRC uwsgi[3699961]:   locals:
août 31 17:07:56 VJGRC uwsgi[3699961]:      form = <wcs.qommon.form.Form object at 0x7fcda5b378e0>
août 31 17:07:56 VJGRC uwsgi[3699961]:      hint = ''
août 31 17:07:56 VJGRC uwsgi[3699961]:      kwargs = {'required': False, 'render_br': False}
août 31 17:07:56 VJGRC uwsgi[3699961]:      self = <BoolField modif_1 'Je souhaite annuler mon créneau'>
août 31 17:07:56 VJGRC uwsgi[3699961]:      value = None
août 31 17:07:56 VJGRC uwsgi[3699961]:   File "/usr/lib/python3/dist-packages/wcs/formdef.py", line 832, in add_fields_to_form
août 31 17:07:56 VJGRC uwsgi[3699961]:    830             if not field.add_to_form:
août 31 17:07:56 VJGRC uwsgi[3699961]:    831                 continue
août 31 17:07:56 VJGRC uwsgi[3699961]: >  832             widget = field.add_to_form(form, value)
août 31 17:07:56 VJGRC uwsgi[3699961]:    833             widget.is_hidden = not (visible)
août 31 17:07:56 VJGRC uwsgi[3699961]:    834             widget.field = field
août 31 17:07:56 VJGRC uwsgi[3699961]:   locals:
août 31 17:07:56 VJGRC uwsgi[3699961]:      displayed_fields = [<BoolField modif_6 'Je souhaite annuler mon créneau'>, <TextField modif_8 "Justification de l'annulation">, <BoolField modif_7 'Je souhaite changer >
août 31 17:07:56 VJGRC uwsgi[3699961]:      field = <BoolField modif_1 'Je souhaite annuler mon créneau'>
août 31 17:07:56 VJGRC uwsgi[3699961]:      form = <wcs.qommon.form.Form object at 0x7fcda5b378e0>
août 31 17:07:56 VJGRC uwsgi[3699961]:      form_data = None
août 31 17:07:56 VJGRC uwsgi[3699961]:      hidden_varnames = set()
août 31 17:07:56 VJGRC uwsgi[3699961]:      on_page = True
août 31 17:07:56 VJGRC uwsgi[3699961]:      page = None
août 31 17:07:56 VJGRC uwsgi[3699961]:      self = <WorkflowFormFieldsFormDef 'Action «\xa0formulaire\xa0» dans le workflow «\xa0EAC 2022\xa0»' id:None>
août 31 17:07:56 VJGRC uwsgi[3699961]:      transient_formdata = None
août 31 17:07:56 VJGRC uwsgi[3699961]:      value = None
août 31 17:07:56 VJGRC uwsgi[3699961]:      visible = True
août 31 17:07:56 VJGRC uwsgi[3699961]:   File "/usr/lib/python3/dist-packages/wcs/wf/form.py", line 295, in fill_form
août 31 17:07:56 VJGRC uwsgi[3699961]:    293         ]
août 31 17:07:56 VJGRC uwsgi[3699961]:    294
août 31 17:07:56 VJGRC uwsgi[3699961]: >  295         self.formdef.add_fields_to_form(form, displayed_fields=displayed_fields)
août 31 17:07:56 VJGRC uwsgi[3699961]:    296         if 'submit' not in form._names and not self.hide_submit_button:
août 31 17:07:56 VJGRC uwsgi[3699961]:    297             form.add_submit('submit', _('Submit'))

Associated revisions

Revision 6da43e41 (diff)
Added by Frédéric Péters (de retour le 27 mai) 24 days ago

workflows: do not crash if a workflow form appears twice (#80760)

History

#2

Updated by Corentin Séchet 9 months ago

  • Assignee set to Corentin Séchet
#3

Updated by Frédéric Péters (de retour le 27 mai) 9 months ago

Je serais pour dire que non (pas alerter) et que plutôt ça fonctionne.

#5

Updated by Robot Gitea 26 days ago

  • Status changed from Nouveau to En cours
  • Assignee changed from Corentin Séchet to Frédéric Péters (de retour le 27 mai)

Frédéric Péters (fpeters) a ouvert une pull request sur Gitea concernant cette demande :

#6

Updated by Robot Gitea 25 days ago

  • Status changed from En cours to Solution proposée
#7

Updated by Robot Gitea 24 days ago

  • Status changed from Solution proposée to Solution validée

Serghei Mihai (smihai) a approuvé une pull request sur Gitea concernant cette demande :

#8

Updated by Serghei Mihai 24 days ago

  • Subject changed from alerter l'usager si un statut de workflow contient plusiers l'actions "Formulaire" avec le même identifiant to accepter plusiers l'actions "Formulaire" avec le même identifiant dans un statut de workflow
#9

Updated by Robot Gitea 24 days ago

  • Status changed from Solution validée to Résolu (à déployer)

Frédéric Péters (fpeters) a mergé une pull request sur Gitea concernant cette demande :

#10

Updated by Transition automatique 24 days ago

  • Status changed from Résolu (à déployer) to Solution déployée

Also available in: Atom PDF