Projet

Général

Profil

Bug #21001

l'import d'un export de formulaire ne respecte par les id des champs de l'export

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

Statut:
Fermé
Priorité:
Haut
Assigné à:
Version cible:
-
Début:
04 janvier 2018
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:

Description

Cas d'usage : depuis une plateforme de production, j'exporte un formulaire. Je l'importe sur une recette pour le modifier tranquillement, dans l'optique d'ensuite ré-écraser la production avec la nouvelle version.

Mais lors cet import de départ, w.c.s. ré-ordonne les id des champs... et donc ré-écraser ne fonctionnera pas !


Fichiers

Révisions associées

Révision 200a391e (diff)
Ajouté par Thomas Noël il y a plus de 6 ans

formdefs: try to preserve fields ids on import (#21001)

Historique

#2

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

  • Assigné à mis à Thomas Noël
#3

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

On ne touche plus aux id des champs importés.

Corollaire: si les id des champs importés ne sont pas bons (genre, en double), on refuse l'import ; ça me parait pas un soucis (ça ne devrait jamais arriver).

Le test reprend la procédure de travail:
  • on exporte un formulaire
  • on l'importe
  • on travaille sur cet import puis on l'exporte
  • on écrase le formulaire initial avec cet export
#4

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

  • Statut changé de Nouveau à En cours
#5

Mis à jour par Frédéric Péters il y a plus de 6 ans

L'import d'un formdef erroné contenant plusieurs fois le même id va échouer avec l'exception FormdefImportError.

Dans la modification à test_duplicated_field_ids, il faut selon moi qu'il reste deux modes, celui qui lève FormdefImportError mais également un mode qui assure l'import et la renumérotation.

Et cette partie doit être suivie côté UI, si l'import échoue de manière récupérable (avoir FormdefImportRecoverableError ?), alors relancer l'import avec le paramètre qui assure la renuméroration.

Genre :

        try:
            formdef = FormDef.import_from_xml(fp)
+     except FormdefImportRecoverableError, e:
+          fp.seek(0) # sans doute
+          formdef = FormDef.import_from_xml(fp, fsck_on_error=True)
+          get_session().message('info', _('Form contained errors and has been automatically fixed, you should nevertheless check everything is ok.'))
        except FormdefImportError, e:
            error = True
            reason = _(e.msg)
            if e.details:
                reason += ' [%s]' % e.details
        except ValueError:
            error = True

(ou si on imagine que même avec fsck ça peut échouer, construire ça sous forme de boucle,

        try:
+          for fsck in (False, True):
+                try:
+                     formdef = FormDef.import_from_xml(fp, fsck=fsck)
+                     break
+                except FormdefImportRecoverableError, e:
+                     fp.seek(0) # sans doute
+          else:
+              get_session().message('info', _('Form contained errors and has been automatically fixed, you should nevertheless check everything is ok.'))
        except FormdefImportError, e:
            error = True
            reason = _(e.msg)
#6

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

J'ai mis du temps parce que à cause de toi il a fallu que je me rappelle que get_session().message n'est pas une fonction :)

#7

Mis à jour par Frédéric Péters il y a plus de 6 ans

Ça me semble ok.

#8

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

  • Statut changé de En cours à Résolu (à déployer)
commit 200a391e6d36323fd495eb5a0f31397780625ef6
Author: Thomas NOEL <tnoel@entrouvert.com>
Date:   Thu Jan 4 17:28:29 2018 +0100

    formdefs: try to preserve fields ids on import (#21001)

#9

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

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

Formats disponibles : Atom PDF