Projet

Général

Profil

Bug #52927

crash sur un statut qui commence par une action "suppression" et fait d'autres choses ensuite

Ajouté par Thomas Noël il y a presque 3 ans. Mis à jour il y a plus de 2 ans.

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

Révision c4f5f44e (diff)
Ajouté par Thomas Noël il y a presque 3 ans

workflow: stop workflow after a remove action (#52927)

Historique

#1

Mis à jour par Thomas Noël il y a presque 3 ans

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).

#2

Mis à jour par Thomas Noël il y a presque 3 ans

Avec un peu de modifications sur test_remove car je le fais aussi tourner en mode sql.

#3

Mis à jour par Frédéric Péters il y a presque 3 ans

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

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)

#5

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
#6

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.

Formats disponibles : Atom PDF