Development #8829
Accès à un document généré pour envoi par webservice (ou mail, etc)
0%
Description
Actuellement, ExportToModel peut enregistrer un document dans le journal, c'est tout.
Pour que ce document généré puisse être envoyé à un système tiers, (notamment via webservice), il faudrait qu'on puisse y accéder via une variable de substitution (ou autre méthode à inventer).
Quelque chose comme :- on définit dans l'instance ExportToModel le nom de la variable cible 'foobar'
- on le récupère dans form_document.foobar
form_document serait un proxy, sur le mode de DataSourcesSubstitutionProxy ... (idée: ne pas systématiquement envoyer le fichier dans le json du formdata)
Fichiers
Révisions associées
wf/attachment: add varname field (#8829)
wf/export_to_model: add varname field (#8829)
add 'attachments' substitution variable to formdatas (#8829)
Historique
Mis à jour par Benjamin Dauvergne il y a plus de 8 ans
Le problème c'est qu'ExportToModel et AddAttachmentWorkflowStatusItem utilise le même objet AttachmentEvolutionPart
pour stocker les fichiers créés et rien n'empêche pour ces deux actions de les accomplir plusieurs fois, donc même en leur donnant un nom on pourrait avoir plusieurs fichiers.
Je dirais qu'on pourrait avoir quelque chose du style, attachments.<varname>[x].filename/content_type/content
ou les attachements seraient rangés dans l'ordre inverse de leur arrivée. Comme on a pas de boucle dans le wscall je ne vois pas comment envoyer une liste variable de fichiers attachés, mais je laisse l'exercice pour plus tard.
Il suffit de stocker le <varname> dans l'objet AttachementEvolutionPart
au moment de sa création.
Mis à jour par Benjamin Dauvergne il y a plus de 8 ans
- Fichier 0001-add-subsitution-variable-to-reach-files-attached-in-.patch 0001-add-subsitution-variable-to-reach-files-attached-in-.patch ajouté
POC.
Mis à jour par Benjamin Dauvergne il y a plus de 8 ans
C'est sans le nommage des variables (je laisse ça comme exercice au lecteur attentif). Je ne suis pas sûr sur le coup de renversé le tableau des fichiers, ça rend le test plus compliqué mais l'utilisation me semble plus simple à utiliser, à moins de faire en sorte d'avoir une équivalence de ce genre attachments.content
== attachements[-1].content
.
Mis à jour par Thomas Noël il y a plus de 8 ans
En discutant la chose rapidement hier soir avec Serghei (qui a besoin d'envoyer le document généré à iParapheur, via passerelle), on s'est dit qu'une autre solution pourrait être que l'action "ExportToModel" génère dans le workflow_data les informations nécessaires (une URL) pour que passerelle récupère le document. Ca éviterait surtout de se retrouver avec des Mo de base64 dans du json (c'est vraiment très peu efficace).
Un peu comme pour les docs attachés par un formulaire de workflow (cf #8031), on aurait dans workflow_datat "foobar_content_type" + "foobar_filename" + "foobar_url", où foobar est le nom de variable choisi dans l'action ExportToModel.
Resterait cependant à étudier les droits d'accès à ces URL...
Concernant la possibilité de générer plusieurs documents avec le même nom : on n'en a pas besoin, selon moi. Une action ExportToModel créé un document "foobar", si cette action est exécutée plusieurs fois, c'est la dernière qui gagne.
Mis à jour par Benjamin Dauvergne il y a plus de 8 ans
- Fichier 0001-workflows-add-varname-field-to-AttachmentEvolutionPa.patch 0001-workflows-add-varname-field-to-AttachmentEvolutionPa.patch ajouté
- Fichier 0002-wf-attachment-add-a-varname-field.patch 0002-wf-attachment-add-a-varname-field.patch ajouté
- Fichier 0003-wf-export_to_model-add-a-varname-field.patch 0003-wf-export_to_model-add-a-varname-field.patch ajouté
- Fichier 0004-add-substitution-variable-attachments-to-reach-files.patch 0004-add-substitution-variable-attachments-to-reach-files.patch ajouté
Thomas Noël a écrit :
En discutant la chose rapidement hier soir avec Serghei (qui a besoin d'envoyer le document généré à iParapheur, via passerelle), on s'est dit qu'une autre solution pourrait être que l'action "ExportToModel" génère dans le workflow_data les informations nécessaires (une URL) pour que passerelle récupère le document. Ca éviterait surtout de se retrouver avec des Mo de base64 dans du json (c'est vraiment très peu efficace).
On a déjà cette URL, les fichiers du journal sont accessibles via <form_url>attachment?f=<basename(attached_evolution_part.filename)>
.
Un peu comme pour les docs attachés par un formulaire de workflow (cf #8031), on aurait dans workflow_datat "foobar_content_type" + "foobar_filename" + "foobar_url", où foobar est le nom de variable choisi dans l'action ExportToModel.
Resterait cependant à étudier les droits d'accès à ces URL...
C'est contrôlé par self.check_receiver()
dans wcs.forms.common.FormStatusPage._q_lookup
.
Concernant la possibilité de générer plusieurs documents avec le même nom : on n'en a pas besoin, selon moi. Une action ExportToModel créé un document "foobar", si cette action est exécutée plusieurs fois, c'est la dernière qui gagne.
J'ai laissé la possibilité de d'accéder aux autres mais par défaut attachments.<varname>.url/content/content_type/filename
donne accès aux informations du dernier fichier attaché pour ce varname
pour les autres c'est via attachments.<varname>[i]
.
Mis à jour par Frédéric Péters il y a plus de 8 ans
Dans les tests, tu pourrais laisser les existants intacts (i.e. sans placer varname) et en ajouter des variantes qui auraient justement varname ?
Autre détail de style que je note, cette manière de continuer les lignes, par le \ plutôt qu'en ayant une parenthèse ouverte, je n'aime pas trop : (et même la pep8 dit que c'est pas super).
resp = login(get_app(pub), username='admin', password='admin') \ .get(attachment_variable.url).follow()
À part ça, sur le fond, on pourrait avoir content = le contenu, et b64_content = le contenu encodé en base64 ?
Mis à jour par Frédéric Péters il y a plus de 8 ans
+ ajouter une référence à ce ticket aux messages de commit + pour le 0004 réécrire son sujet pour tenir sur une ligne de 80 caractères (genre simplement 'add 'attachments' substitution variable to formdatas (#8829)).
Mis à jour par Benjamin Dauvergne il y a plus de 8 ans
- Fichier 0001-add-varname-to-AttachmentEvolutionPart-8829.patch 0001-add-varname-to-AttachmentEvolutionPart-8829.patch ajouté
- Fichier 0002-wf-attachment-add-varname-field-8829.patch 0002-wf-attachment-add-varname-field-8829.patch ajouté
- Fichier 0003-wf-export_to_model-add-varname-field-8829.patch 0003-wf-export_to_model-add-varname-field-8829.patch ajouté
- Fichier 0004-add-attachments-substitution-variable-to-formdatas-8.patch 0004-add-attachments-substitution-variable-to-formdatas-8.patch ajouté
- Patch proposed changé de Non à Oui
- nouveaux tests au lieu de tests modifiés
- plus d'utilisation des "continuation lines"
- ajout de l'accesseur b64_content au lieu de content
- message de commit raccourci
Mis à jour par Serghei Mihai il y a plus de 8 ans
Il manque l'import de VarnameWidget
dans le patch 0003
Mis à jour par Frédéric Péters il y a plus de 8 ans
Serghei Mihai a écrit :
Il manque l'import de
VarnameWidget
dans le patch 0003
Ce qui est attrapé par tests/test_admin_pages.py::test_workflows_add_all_actions; pensons à exécuter tous les tests.
[2015-11-02 17:52:17] exception caught Exception: type = '<type 'exceptions.NameError'>', value = 'global name 'VarnameWidget' is not defined' Stack trace (most recent call first): File "/home/fred/src/eo/wcs/wcs/wf/export_to_model.py", line 266, in add_parameters_widgets 264 value=self.backoffice_info_text) 265 if 'varname' in parameters: > 266 form.add(VarnameWidget, '%svarname' % prefix, 267 title=_('Variable Name'), value=self.varname) 268
Mis à jour par Serghei Mihai il y a plus de 8 ans
- Fichier screen_1.png screen_1.png ajouté
- Fichier screen_2.png screen_2.png ajouté
Au niveau du parametrage du workflow j'ai un comportement étrange.
Quand j'upload un fichier modèle, backoffice_info_text
a comme valeur le nom du fichier chargé sans le wysiwyg.
Le self.varname
n'est pas sauvegardé quand un document modèle est attaché.
Mis à jour par Benjamin Dauvergne il y a plus de 8 ans
- Fichier 0001-wf-export_to_model-fix-bug-introduced-in-29c8e2b0-42.patch 0001-wf-export_to_model-fix-bug-introduced-in-29c8e2b0-42.patch ajouté
- Fichier 0002-add-varname-to-AttachmentEvolutionPart-8829.patch 0002-add-varname-to-AttachmentEvolutionPart-8829.patch ajouté
- Fichier 0003-wf-attachment-add-varname-field-8829.patch 0003-wf-attachment-add-varname-field-8829.patch ajouté
- Fichier 0004-wf-export_to_model-add-varname-field-8829.patch 0004-wf-export_to_model-add-varname-field-8829.patch ajouté
- Fichier 0005-add-attachments-substitution-variable-to-formdatas-8.patch 0005-add-attachments-substitution-variable-to-formdatas-8.patch ajouté
Vu, c'est un bug que j'ai introduit dans le #4292, je mets la correction ici comme premier patch.
Mis à jour par Frédéric Péters il y a plus de 8 ans
(J'ai poussé le patch de corection de #4292.)
Mis à jour par Frédéric Péters il y a plus de 8 ans
- Statut changé de Nouveau à Résolu (à déployer)
Ça a été poussé.
add varname to AttachmentEvolutionPart (#8829)
It allows differentiating between attached files from different workflow actions:
ExportToModel or AddAttachmentWorkflowStatusItem.