Bug #52927
crash sur un statut qui commence par une action "suppression" et fait d'autres choses ensuite
Statut:
Fermé
Priorité:
Bas
Assigné à:
-
Version cible:
-
Début:
10 avril 2021
Echéance:
% réalisé:
0%
Temps estimé:
Patch proposed:
Oui
Planning:
Non
Description
Bien sûr c'est un peu bêbête, mais vu en vrai, un statut avec deux actions
- Suppression
- Appel webservice (avec stockage de la réponse)
La seconde action est quand même executée mais plante forcément lors du formdata.store() (trace ci-dessous).
Mais que faire pour éviter cette affaire...? Je serais presque à imaginer de proposer de stopper le workflow lorsqu'on rencontre une action de suppression.
En tout cas, faudrait éviter le crash 500.
Exception: type = '<class 'TypeError'>', value = ''NoneType' object is not subscriptable' Stack trace (most recent call first): File "/usr/lib/python3/dist-packages/wcs/sql.py", line 2062, in store 2060 sql_dict['parts'] = None 2061 cur.execute(sql_statement, sql_dict) > 2062 evo._sql_id = cur.fetchone()[0] 2063 2064 fts_strings = [str(self.id), self.get_display_id()] locals: attr = 'prefilling_data' column_names = dict_keys(['user_id', 'status', 'page_no', 'workflow_data', 'id_display', 'anonymised', 'tracking_code', 'backoffice_submission', 'submission_context', 'prefilling_data', 'submission_agent_id', 'submission_channel', 'criticality_level', 'last_update_time', 'receipt_time', 'workflow_roles_array', 'workflow_roles', 'concerned_roles_array', 'actions_roles_array', 'f4', 'f1', 'f3', 'f2', 'id']) conn = <connection object at 0x7fea56e17178; dsn: 'user=wcs password=xxx dbname=wcs_demarches_xxx_test_entrouvert_org host=sql port=5432', closed: 0> cur = <cursor object at 0x7fea56e27428; closed: 0> evo = <wcs.formdata.Evolution object at 0x7fea56c8f748> self = <_wcs_Liste-Des-Experts 'Liste des experts - n°1-29' id:29> sql_dict = {'id': 40, 'who': '125', 'status': 'wf-recorded', 'time': datetime.datetime(2021, 4, 9, 17, 22, 40), 'last_jump_datetime': None, 'comment': None, 'formdata_id': 29, 'parts': None} sql_statement = 'UPDATE carddata_1_liste_des_experts_instructeurs_evolutions SET\n who = %(who)s,\n time = %(time)s,\n last_jump_datetime = %(last_jump_datetime)s,\n status = %(status)s,\n comment = %(comment)s,\n parts = %(parts)s\n WHERE id = %(id)s\n RETURNING id' File "/usr/lib/python3/dist-packages/wcs/qommon/substitution.py", line 28, in f 26 return func(*args, **kwargs) 27 finally: > 28 get_publisher().substitutions.invalidate_cache() 29 30 return f locals: args = (<_wcs_Liste-Des-Experts 'Liste des experts - n°1-29' id:29>,) func = <function SqlDataMixin.store at 0x7fea56e37c80> kwargs = {} File "/usr/lib/python3/dist-packages/wcs/sql.py", line 452, in f 450 except psycopg2.Error: 451 get_connection().rollback() > 452 raise 453 454 return f locals: args = (<_wcs_Liste-Des-Experts 'Liste des experts - n°1-29' id:29>,) func = <function invalidate_substitution_cache.<locals>.f at 0x7fea56e37d08> kwargs = {} File "/usr/lib/python3/dist-packages/wcs/wf/wscall.py", line 418, in perform 416 workflow_data['%s_error_response' % self.varname] = d 417 formdata.update_workflow_data(workflow_data) > 418 formdata.store() 419 420 if self.backoffice_filefield_id:
Fichiers
Révisions associées
Historique
Mis à jour par Thomas Noël il y a presque 3 ans
- Fichier 0001-workflow-stop-on-delete-action-52927.patch 0001-workflow-stop-on-delete-action-52927.patch ajouté
- Statut changé de Nouveau à En cours
- Patch proposed changé de Non à Oui
Et sur l'idée de "stopper", résultat d'insomnie (oui, il manque le test, j'ai juste cliqué pour voir que ça marche avec ça).
Mis à jour par Thomas Noël il y a presque 3 ans
- Fichier 0001-workflow-stop-workflow-after-a-remove-action-52927.patch 0001-workflow-stop-workflow-after-a-remove-action-52927.patch ajouté
- Statut changé de En cours à Solution proposée
Avec un peu de modifications sur test_remove car je le fais aussi tourner en mode sql.
Mis à jour par Frédéric Péters il y a presque 3 ans
- Statut changé de Solution proposée à Solution validée
Mis à jour par Thomas Noël il y a presque 3 ans
- Statut changé de Solution validée à Résolu (à déployer)
commit c4f5f44e4dbdde3750e3cbe093c9c31346d1fcfb Author: Thomas NOËL <tnoel@entrouvert.com> Date: Sat Apr 10 02:54:10 2021 +0200 workflow: stop workflow after a remove action (#52927)
Mis à jour par Frédéric Péters il y a presque 3 ans
- Statut changé de Résolu (à déployer) à Solution déployée
Mis à jour par Frédéric Péters il y a plus de 2 ans
Pour info ça casse le déroulé
- redirection
- suppression
parce que l'url de l'abort ici prend le pas sur celle définie dans la redirection.
workflow: stop workflow after a remove action (#52927)