Discussion:
Upload de fichiers avec cpsdocument_create_form
Denis Bitouzé
2010-01-21 18:32:42 UTC
Permalink
Bonjour,

je tente, avec un CPS 3.4, d'exploiter le script proposé par Emmanuel
Otton ici :

http://thread.gmane.org/gmane.comp.web.zope.cps.general.french/2943/focus=2947

pour uploader un fichier « resultats.txt » avec
cpsdocument_create_form :

******************************************************************************
#!/bin/sh

# Obligatoires
USER="XXXXXXXXXXXX"
PASSWORD="XXXXXXXXXXXX"
FICHIER="/home/bitouze/public_html/notes/scripts/resultats.txt"
WORKSPACE="members/dbitouze"
SERVEUR="gte.univ-littoral.fr"
TITRE="Résultats"

# Facultatifs
DESCRIPTION_FICHIER=""
SOURCE_FICHIER="Source"
TITRE_FICHIER="titre_fichier"
NOM_FICHIER="resultats.txt"

# Récupérer par curl en POST
curl --output mon_log \
--url
"http://$USER:$PASSWORD@$SERVEUR/$WORKSPACE/cpsdocument_create_form" \
-F type_name=File \
-F widget__Title="$TITRE" \
-F widget__Description="$DESCRIPTION_FICHIER" \
-F widget__Source="$SOURCE_FICHIER" \
-F widget__file_title="$TITRE_FICHIER" \
-F widget__file_filename="$NOM_FICHIER" \
-F widget__file_choice=change \
-F widget__file=@$FICHIER \
-F cpsdocument_create_button=Créer
******************************************************************************

Après quelques déboires, j'y suis presque arrivé, sauf que le fichier
« mon_log », généré par l'option --output de curl, contient le source
html de la page de formulaire (rempli !). Du coup, le fichier «
resultats.txt » n'est pas uploadé, sauf si j'ouvre le fichier result
dans un navigateur Web et que je confirme la création en cliquant sur
le bouton « Créer ».

Question subsidiaire : où se trouve la documentation permettant
d'adapter ce script à la création d'un « Document Web » (à partir de «
Fichier à utiliser pour remplir la zone de texte ») et plus seulement
d'un « Fichier ». En particulier, pour les « Documents Web », il semble
qu'il faille procéder en 2 temps : avec cpsdocument_create_form, puis
avec cpsdocument_edit_form.

Merci d'avance pour toute piste pour me sortir de ce mauvais.
--
Denis
Georges Racinet
2010-01-21 19:16:52 UTC
Permalink
Post by Denis Bitouzé
Bonjour,
je tente, avec un CPS 3.4, d'exploiter le script proposé par Emmanuel
http://thread.gmane.org/gmane.comp.web.zope.cps.general.french/2943/focus=2947
pour uploader un fichier « resultats.txt » avec
******************************************************************************
#!/bin/sh
# Obligatoires
USER="XXXXXXXXXXXX"
PASSWORD="XXXXXXXXXXXX"
FICHIER="/home/bitouze/public_html/notes/scripts/resultats.txt"
WORKSPACE="members/dbitouze"
SERVEUR="gte.univ-littoral.fr"
TITRE="Résultats"
# Facultatifs
DESCRIPTION_FICHIER=""
SOURCE_FICHIER="Source"
TITRE_FICHIER="titre_fichier"
NOM_FICHIER="resultats.txt"
# Récupérer par curl en POST
curl --output mon_log \
--url
-F type_name=File \
-F widget__Title="$TITRE" \
-F widget__Description="$DESCRIPTION_FICHIER" \
-F widget__Source="$SOURCE_FICHIER" \
-F widget__file_title="$TITRE_FICHIER" \
-F widget__file_filename="$NOM_FICHIER" \
-F widget__file_choice=change \
-F cpsdocument_create_button=Créer
******************************************************************************
Après quelques déboires, j'y suis presque arrivé, sauf que le fichier
« mon_log », généré par l'option --output de curl, contient le source
html de la page de formulaire (rempli !). Du coup, le fichier «
resultats.txt » n'est pas uploadé, sauf si j'ouvre le fichier result
dans un navigateur Web et que je confirme la création en cliquant sur
le bouton « Créer ».
En effet, ce qui est fait par cet appel est de l'ordre du
préremplissage. C'est sur cpsdocument_create qu'il faut poster et non
cpsdocument_create_form.

Il faut avoir conscience du fait que ce cpsdocument_create s'attend à
obtenir des informations provenant de la page précédente
(cpsdocument_create_form). En bref, il est conçu pour de l'interaction
avec l'utilisateur, pas pour automatiser.

Pour tout ce qui est création en masse et autres robots, on dispose de
CPSRemoteController (activable en chargeant le profil du même nom dans
portal_setup). Il expose une interface programmatique en XML-RPC. La
plupart des langages de script fournissent une

Voici un exemple en python (extrait de la doc intégrée à
CPSRemoteController/ControllerTool.py):

from xmlrpclib import ServerProxy, Binary
p =
ServerProxy('http://user:pwd-***@public.gmane.org:8080/cps/portal_remote_controller')
f = open('MyImage.png', 'r')
binary = Binary(f.read())
p.createDocument('File',
{'Title': "The report from Monday meeting",
'Description': "Another boring report"},
'file_name': "MyImage.png",
'file': binary,
},
'workspaces')

Notez l'absence de 'widget__' Ici en effet, on fournit le nom du champ
(ie l'identifiant base de donnée) et non plus l'identifiant du widget
(élément d'interface utilisateur qui produit le html adapté à un ou
plusieurs champ).

On trouve une documentation de CPSRemoteController avec des exemples
avancés dans CPSRemoteController/doc/howto-using_remote_controller.txt
(je ne l'ai pas lue)
Post by Denis Bitouzé
Question subsidiaire : où se trouve la documentation permettant
d'adapter ce script à la création d'un « Document Web » (à partir de «
Fichier à utiliser pour remplir la zone de texte ») et plus seulement
d'un « Fichier ». En particulier, pour les « Documents Web », il semble
qu'il faille procéder en 2 temps : avec cpsdocument_create_form, puis
avec cpsdocument_edit_form.
Merci d'avance pour toute piste pour me sortir de ce mauvais.
Je ne crois pas qu'il y ait de documentation sur ce point précis, mais
je peux me tromper. En tout cas je confirme qu'à la création, un
«Document Web» ne contient que des méta-données (dont Titre et
Description), les blocs sont ajoutés dans un second temps, c'est la
logique de la chose.

Vous pouvez bien sûr reproduire une requête manuelle en l'analysant avec
un outil comme LiveHTTPHeaders (extension Firefox que j'ai utilisée en
fait pour la obtenir la réponse plus haut, car je ne la connaissais pas
par coeur).

Pour ce qui est de CPSRemoteController, il y a une certaine capacité à
peupler les champs «flexibles» (les fameux blocs), mais faut connaître
la règle de nommage de ces champs pour le type de document que vous
visez, ce qui dépasse mon propos du moment.

Bonne soirée,

PS: j'avais dans un coin un script générique écrit en python pour
transformer (à l'aide de CPSRemoteController) une arborescence de
fichiers en espaces de travail avec des documents de type 'File' dedans.
Si je la retrouve, je la posterai.
--
Georges Racinet, http://www.racinet.fr
Zope/CPS/Plone expertise, assistance & development
GPG: 0x4862FFF7
Denis Bitouzé
2010-01-21 23:35:29 UTC
Permalink
Le jeudi 21/01/10 à 20h16,
Post by Georges Racinet
En effet, ce qui est fait par cet appel est de l'ordre du
préremplissage. C'est sur cpsdocument_create qu'il faut poster et non
cpsdocument_create_form.
Il faut avoir conscience du fait que ce cpsdocument_create s'attend à
obtenir des informations provenant de la page précédente
(cpsdocument_create_form). En bref, il est conçu pour de l'interaction
avec l'utilisateur, pas pour automatiser.
Mais, dans le message indiqué, Emmanuel Otton semblait parvenir à une
automatisation par ce biais...
Post by Georges Racinet
Pour tout ce qui est création en masse et autres robots, on dispose de
CPSRemoteController [...]
OK, merci beaucoup !
--
Denis
Racinet Georges
2010-01-23 13:14:27 UTC
Permalink
Post by Denis Bitouzé
Le jeudi 21/01/10 à 20h16,
Post by Georges Racinet
En effet, ce qui est fait par cet appel est de l'ordre du
préremplissage. C'est sur cpsdocument_create qu'il faut poster et non
cpsdocument_create_form.
Il faut avoir conscience du fait que ce cpsdocument_create s'attend à
obtenir des informations provenant de la page précédente
(cpsdocument_create_form). En bref, il est conçu pour de
l'interaction
avec l'utilisateur, pas pour automatiser.
Mais, dans le message indiqué, Emmanuel Otton semblait parvenir à une
automatisation par ce biais...
Je crois que c'est simplement que l'enchaînement de pages a changé.
Par exemple, en 3.2 il fallait fournir le titre sur la même page que
le type de document (folder_factories).
Je crois bien même qu'on ne pouvait tout simplement pas adapter pour
que le titre soit fourni a posteriori.

Dans l'idéal, il faudrait une base de connaissances en ligne pour
compiler ces recettes et les tenir à jour.
Mais il faudrait aussi un certain nombre de contributeurs pour que ce
soit rentable en termes d'effort par rapport à l'enchaînement Google
-- question sur la liste. Si une demi-douzaine de contributeurs se
manifestaient, ce qui n'est pas tant que ça par rapport au nombre
d'instances en service, on pourrait commencer à y réfléchir, mais pas
à moins, àmha.

Très cordialement,
--
Georges Racinet, http://www.racinet.fr
Zope/CPS/Plone expertise, assistance & development
GPG: 0x4862FFF7

Loading...