Projet

Général

Profil

Development #75025

Action "Envoyer un mail" : EmailEvolutionPart n'est pas toujours sauvegardé

Ajouté par Benjamin Dauvergne il y a environ un an. Mis à jour il y a environ un an.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
02 mars 2023
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Non
Planning:
Non

Description

Cf. ticket client #74251 où certains envois de mail avec identifiant sont sauvés dans l'historique mais pas d'autre.

J'ai relu le code de l'optimisation de sauvegarde des évolutions et je pense qu'on un trou dans la raquette. Cette optimisation c'est sur un formdata.store() de ne pas sauvegarder les évolutions qu'à partir de la première qui n'a pas de _sql_id. Mais si une action précédente a déjà fait un formdata.store() et que l'action en cours (comme ici) ajoute une EvolutionPart à l'évolution en cours, on se retrouve avec un dernier objet Evolution modifié, mais déjà avec un identifiant SQL en base et qui ne sera pas mis à jour.

Je serai d'avis d'ajouter un flag _dirty à Evolution, par défaut à False et qui serait posé à True par Evolution.add_part().

Révisions associées

Révision 69069cda (diff)
Ajouté par Benjamin Dauvergne il y a environ un an

tests: checks new evolution parts are saved on a jump (#75025)

Révision cb05c2ed (diff)
Ajouté par Benjamin Dauvergne il y a environ un an

workflows: store EmailEvolutionPart (#75025)

Historique

#2

Mis à jour par Benjamin Dauvergne il y a environ un an

  • Description mis à jour (diff)
#3

Mis à jour par Benjamin Dauvergne il y a environ un an

Le patch de l'idée :

diff --git a/wcs/formdata.py b/wcs/formdata.py
index befeb8317..7917a7da6 100644
--- a/wcs/formdata.py
+++ b/wcs/formdata.py
@@ -176,6 +176,7 @@ class Evolution:
         if not self.parts:
             self.parts = []
         self.parts.append(part)
+        self._dirty = True

     _display_parts = None  # cache

diff --git a/wcs/sql.py b/wcs/sql.py
index c950b20d4..d8f4ba0b0 100644
--- a/wcs/sql.py
+++ b/wcs/sql.py
@@ -2747,7 +2747,7 @@ class SqlDataMixin(SqlMixin):
                 # it's still possible for debugging purpose to store them all,
                 # using formdata._store_all_evolution = True
                 for idx, evo in enumerate(self._evolution):
-                    if not hasattr(evo, '_sql_id'):
+                    if not hasattr(evo, '_sql_id') or getattr(evo, '_dirty', False):
                         break
             # now we can save all after this idx
             for evo in self._evolution[idx:]:

si ça parait cohérent à tout le monde je produis un test et une PR.

#4

Mis à jour par Benjamin Dauvergne il y a environ un an

  • Description mis à jour (diff)
#5

Mis à jour par Benjamin Dauvergne il y a environ un an

  • Assigné à mis à Benjamin Dauvergne
#6

Mis à jour par Robot Gitea il y a environ un an

  • Statut changé de Nouveau à Solution proposée

Benjamin Dauvergne (bdauvergne) a ouvert une pull request sur Gitea concernant cette demande :

#7

Mis à jour par Robot Gitea il y a environ un an

  • Statut changé de Solution proposée à En cours

Benjamin Dauvergne (bdauvergne) a commencé à travailler sur une pull request sur Gitea concernant cette demande :

#8

Mis à jour par Robot Gitea il y a environ un an

  • Statut changé de En cours à Solution proposée
#9

Mis à jour par Robot Gitea il y a environ un an

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

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

#10

Mis à jour par Transition automatique il y a environ un an

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

Mis à jour par Transition automatique il y a 11 mois

Automatic expiration

Formats disponibles : Atom PDF