Denis Bitouzé wrote:
> 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:$passw...@$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__fi...@$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 ».

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:[email protected]: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)

> 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

Attachment: signature.asc
Description: OpenPGP digital signature

_______________________________________________
cps-users-fr
Adresse de la liste : [email protected]
Gestion de l'abonnement : <http://lists.nuxeo.com/mailman/listinfo/cps-users-fr>

Répondre à