Bug #20874
crash (500) lorsqu'on cherche à ajouter une action globale dont le nom est déjà pris
0%
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
Historique
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 ?
Mis à jour par Paul Marillonnet il y a plus de 6 ans
- Fichier 0001-WIP-do-not-crash-on-invalid-global-action-name-20874.patch 0001-WIP-do-not-crash-on-invalid-global-action-name-20874.patch ajouté
- Patch proposed changé de Non à Oui
Un peu à court d'idées sur le patch.
Peut-être qqchose comme ça ?
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)
Mis à jour par Paul Marillonnet il y a plus de 6 ans
Mis à jour par Paul Marillonnet il y a plus de 5 ans
- Fichier 0001-do-not-crash-on-global-action-name-duplicate-20874.patch 0001-do-not-crash-on-global-action-name-duplicate-20874.patch ajouté
- Statut changé de Nouveau à Solution proposée
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.
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)
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
workflows: do not crash on global action name duplicate (#20874)