Projet

Général

Profil

Bug #7258

Documents attachés absent lors du lancement du workflow

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

Statut:
Fermé
Priorité:
Normal
Assigné à:
-
Version cible:
-
Début:
16 mai 2015
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:

Description

Suite à l'application (sur une plateforme de dev) de #7254 je constate que l'appel à value.get_file_pointer().read() renvoie une chaine vide lors du premier lancement du workflow.

Il faudrait sans doute s'assurer de l'enregistrement complet de la demande (i.e. y compris des fichiers attachés) avant de lancer le workflow.

(Je met le ticket "haut" parce que c'est vraiment urgent pour le webservice Maarch qui envoie les demandes directement, sans aucune validation)


Fichiers


Demandes liées

Bloque w.c.s. - Development #7254: export json intégrant les fichiers jointsFermé15 mai 2015

Actions

Historique

#1

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

en première lecture, ça pourrait être lié au fait que wcs (quixote?) ne ferme pas le fichier après l'avoir écrit, donc quand on fait un read, on n'est pas au début.

Sans doute faut-il faire ceci :

  fp = value.get_file_pointer()
  fp.seek(0)
  content = base64.b64encode(fp.read())

Testé, ça fonctionne. Mais je n'aime pas vraiment (thread-safe et autres considérations). Il y aurait une autre (meilleure) méthode ?...

#2

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

Une autre correction pourrait être, avant d'exécuter le workflow, de charger l'objet formdata depuis sa représentation (disque/db), plutôt qu'utiliser la version construite à partir des données du submit http; quelque chose genre :

--- a/wcs/forms/root.py
+++ b/wcs/forms/root.py
@@ -806,6 +806,7 @@ class FormPage(Directory):
         get_logger().info('form %s - done (id: %s)' % (self.formdef.name, filled.id))
         url = None
         if existing_formdata is None:
+            filled = filled.get(filled.id)
             url = filled.perform_workflow()

         if not filled.user_id:
#3

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

Pas certain que ça corrige à coup sûr. Le problème c'est qu'en faisant dans le reste du code des accès genre "fp = value.get_file_pointer(); content = fp.read()", il faudrait être sûr qu'un seul appel de ce genre est fait, sinon le premier read pose le file_pointer en fin de fichier, et la seconde passe renverra du vide.

On pourrait penser à ajouter dans qommon.forms.PicklableUpload un explicite "value.get_content()" -- ou éventuellement un value.get_new_file_pointer() sachant ça sera toujours pour faire un read+close avec...

#4

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

#5

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

Proposition de get_content

#6

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

Tu le valides sur la plateforme maarch ?

#7

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

  • Priorité changé de Haut à Normal
#8

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

  • Statut changé de Nouveau à Résolu (à déployer)

Intégré dans #7254.

#9

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

  • Statut changé de Résolu (à déployer) à Fermé

Formats disponibles : Atom PDF