Projet

Général

Profil

Bug #20874

crash (500) lorsqu'on cherche à ajouter une action globale dont le nom est déjà pris

Ajouté par Thomas Noël il y a plus de 6 ans. Mis à jour il y a environ 5 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
22 décembre 2017
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

Facile à reproduire : chercher à ajouter une action globale avec le nom d'une action globale déjà existante, et boum :

Exception:
  type = '<class 'wcs.workflows.DuplicateGlobalActionNameError'>', value = ''

Stack trace (most recent call first):
  File "/usr/lib/python2.7/dist-packages/wcs/workflows.py", line 383, in add_global_action
   381     def add_global_action(self, name, id=None):
   382         if [x for x in self.global_actions if x.name == name]:
>  383             raise DuplicateGlobalActionNameError()
   384         action = WorkflowGlobalAction(name)
   385         action.parent = self

  locals:
     x = <wcs.workflows.WorkflowGlobalAction object at 0x7fa23a1ab590>
     self = <Workflow 'DEJ - parapheur (Envoi contrat en signature)' id:80>
     id = None
     name = 'Supprimer'

  File "/usr/lib/python2.7/dist-packages/wcs/admin/workflows.py", line 1297, in new
  1295         if form.is_submitted() and not form.has_errors():
  1296             name = form.get_widget('name').parse()
> 1297             action = self.workflow.add_global_action(name)
  1298             self.workflow.store()
  1299             return redirect('%s/' % action.id)

  locals:
     self = <wcs.admin.workflows.GlobalActionsDirectory object at 0x7fa24b6187d0>
     name = 'Supprimer'
     form = <wcs.qommon.form.Form object at 0x7fa238747e10>

  File "/usr/lib/pymodules/python2.7/quixote/directory.py", line 67, in _q_traverse
    65                 raise TraversalError
    66         elif hasattr(obj, '__call__'):
>   67             return obj()
    68         else:
    69             return obj


Fichiers

Révisions associées

Révision 5a5f2eb7 (diff)
Ajouté par Paul Marillonnet il y a environ 5 ans

workflows: do not crash on global action name duplicate (#20874)

Historique

#1

Mis à jour par Paul Marillonnet il y a plus de 6 ans

On dirait que c'est wcs.worklows.Workflow.add_global_action() qui lève une DuplicateGlobalActionNameError, laquelle n'est pas traitée dans wcs.admin.workflows.GlobalActionsDirectory.new().

Je pense que c'est dans cette dernière méthode que l'exception devrait être traitée, possiblement en modifiant le bout de HTML généré à la volée à la fin de cette méthode new(), non ?

#3

Mis à jour par Paul Marillonnet il y a plus de 6 ans

Un peu à court d'idées sur le patch.
Peut-être qqchose comme ça ?

#5

Mis à jour par Thomas Noël il y a plus de 6 ans

Si tu veux aller au bout, regarde plutôt ce qui est fait dans GlobalActionPage::edit (faire un form.get_widget('name').set_error() en cas de doublon)

#9

Mis à jour par Benjamin Dauvergne il y a plus de 5 ans

  • Assigné à mis à Paul Marillonnet
#10

Mis à jour par Benjamin Dauvergne il y a plus de 5 ans

  • Statut changé de Solution proposée à Solution validée

Seul cette ligne devrait être dans le try/catch:

                action = self.workflow.add_global_action(name)

C'est la seule à émettre cette exception, avec cette modif c'est ack pour moi.

#11

Mis à jour par Frédéric Péters il y a environ 5 ans

  • Statut changé de Solution validée à Résolu (à déployer)

J'ai fait la modif, j'ai ajouté un test, j'ai poussé,

commit 5a5f2eb71ae35476092076b0c83ae20a9eab63c1
Author: Paul Marillonnet <pmarillonnet@entrouvert.com>
Date:   Thu Aug 2 14:35:31 2018 +0200

    workflows: do not crash on global action name duplicate (#20874)
#12

Mis à jour par Paul Marillonnet il y a environ 5 ans

Merci à toi.

#13

Mis à jour par Frédéric Péters il y a environ 5 ans

  • Statut changé de Résolu (à déployer) à Solution déployée

Formats disponibles : Atom PDF