Re: Upload de fichiers avec cpsdocument_create_form

Georges Racinet <[email protected]> Thu, 21 Jan 2010 20:16:52 +0100
Newsgroups gmane.comp.web.zope.cps.general.french
Message-ID <[email protected]>
This is an OpenPGP/MIME signed message (RFC 2440 and 3156)
--===============0322592529==
Content-Type: multipart/signed; micalg=pgp-sha1;
 protocol="application/pgp-signature";
 boundary="------------enig60E69635CB9FFC4986EDBFAD"

This is an OpenPGP/MIME signed message (RFC 2440 and 3156)
--------------enig60E69635CB9FFC4986EDBFAD
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

Denis Bitouz=E9 wrote:
> Bonjour,
>=20
> je tente, avec un CPS 3.4, d'exploiter le script propos=E9 par Emmanuel=

> Otton ici :
>=20
> http://thread.gmane.org/gmane.comp.web.zope.cps.general.french/2943/foc=
us=3D2947
>=20
> pour uploader un fichier =AB resultats.txt =BB avec
> cpsdocument_create_form :
>=20
> ***********************************************************************=
*******
> #!/bin/sh
>=20
> # Obligatoires
> USER=3D"XXXXXXXXXXXX"
> PASSWORD=3D"XXXXXXXXXXXX"
> FICHIER=3D"/home/bitouze/public_html/notes/scripts/resultats.txt"
> WORKSPACE=3D"members/dbitouze"
> SERVEUR=3D"gte.univ-littoral.fr"
> TITRE=3D"R=E9sultats"
>=20
> # Facultatifs
> DESCRIPTION_FICHIER=3D""
> SOURCE_FICHIER=3D"Source"
> TITRE_FICHIER=3D"titre_fichier"
> NOM_FICHIER=3D"resultats.txt"
>=20
> # R=E9cup=E9rer par curl en POST
> curl --output mon_log \
>      --url
> "http://$USER:$PASSWORD@$SERVEUR/$WORKSPACE/cpsdocument_create_form" \
>      -F type_name=3DFile \
>      -F widget__Title=3D"$TITRE" \
>      -F widget__Description=3D"$DESCRIPTION_FICHIER" \
>      -F widget__Source=3D"$SOURCE_FICHIER" \
>      -F widget__file_title=3D"$TITRE_FICHIER" \
>      -F widget__file_filename=3D"$NOM_FICHIER" \
>      -F widget__file_choice=3Dchange \
>      -F widget__file=3D@$FICHIER \
>      -F cpsdocument_create_button=3DCr=E9er
> ***********************************************************************=
*******
>=20
> Apr=E8s quelques d=E9boires, j'y suis presque arriv=E9, sauf que le fic=
hier
> =AB mon_log =BB, g=E9n=E9r=E9 par l'option --output de curl, contient l=
e source
> html de la page de formulaire (rempli !). Du coup, le fichier =AB
> resultats.txt =BB n'est pas upload=E9, sauf si j'ouvre le fichier resul=
t
> dans un navigateur Web et que je confirme la cr=E9ation en cliquant sur=

> le bouton =AB Cr=E9er =BB.

En effet, ce qui est fait par cet appel est de l'ordre du
pr=E9remplissage. 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 =E0
obtenir des informations provenant de la page pr=E9c=E9dente
(cpsdocument_create_form). En bref, il est con=E7u pour de l'interaction
avec l'utilisateur, pas pour automatiser.

Pour tout ce qui est cr=E9ation en masse et autres robots, on dispose de
CPSRemoteController (activable en chargeant le profil du m=EAme 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=E9gr=E9e =E0
CPSRemoteController/ControllerTool.py):

        from xmlrpclib import ServerProxy, Binary
        p =3D
ServerProxy('http://user:[email protected]:8080/cps/portal_remote_controll=
er')
        f =3D open('MyImage.png', 'r')
        binary =3D 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=E9e) et non plus l'identifiant du widget
(=E9l=E9ment d'interface utilisateur qui produit le html adapt=E9 =E0 un =
ou
plusieurs champ).

On trouve une documentation de CPSRemoteController avec des exemples
avanc=E9s dans CPSRemoteController/doc/howto-using_remote_controller.txt
(je ne l'ai pas lue)

> Question subsidiaire : o=F9 se trouve la documentation permettant
> d'adapter ce script =E0 la cr=E9ation d'un =AB Document Web =BB (=E0 pa=
rtir de =AB
> Fichier =E0 utiliser pour remplir la zone de texte =BB) et plus seuleme=
nt
> d'un =AB Fichier =BB. En particulier, pour les =AB Documents Web =BB, i=
l semble
> qu'il faille proc=E9der en 2 temps : avec cpsdocument_create_form, puis=

> avec cpsdocument_edit_form.
>=20
> 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=E9cis, mais
je peux me tromper. En tout cas je confirme qu'=E0 la cr=E9ation, un
=ABDocument Web=BB ne contient que des m=E9ta-donn=E9es (dont Titre et
Description), les blocs sont ajout=E9s dans un second temps, c'est la
logique de la chose.

Vous pouvez bien s=FBr reproduire une requ=EAte manuelle en l'analysant a=
vec
un outil comme LiveHTTPHeaders (extension Firefox que j'ai utilis=E9e en
fait pour la obtenir la r=E9ponse plus haut, car je ne la connaissais pas=

par coeur).

Pour ce qui est de CPSRemoteController, il y a une certaine capacit=E9 =E0=

peupler les champs =ABflexibles=BB (les fameux blocs), mais faut conna=EE=
tre
la r=E8gle de nommage de ces champs pour le type de document que vous
visez, ce qui d=E9passe mon propos du moment.

Bonne soir=E9e,

PS: j'avais dans un coin un script g=E9n=E9rique =E9crit en python pour
transformer (=E0 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.

--=20
Georges Racinet, http://www.racinet.fr
Zope/CPS/Plone expertise, assistance & development
GPG: 0x4862FFF7


--------------enig60E69635CB9FFC4986EDBFAD
Content-Type: application/pgp-signature; name="signature.asc"
Content-Description: OpenPGP digital signature
Content-Disposition: attachment; filename="signature.asc"

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iQEcBAEBAgAGBQJLWKgmAAoJEOAffZJiF+Z4xXQH/3cFh08Lg4kOEVu/al74aisj
zGbP4zEK/fZVdM8QTSLGcTs1gWFieLJU0LpCqe4S154ClqV4+vUfEy3nEfNeHQcH
eykgSteJq0Js4MqkqlzONTfZUuXi4EwdZbq02xY+Hp3utLjOSE+uy7+vH/WQUUUU
mBUGH32MNYG6LYy8dsCh+yAlCC4DXUxekEFHYjUYaHd6Zya1bImqAXSCRfebo6Pb
j8Z2x1eey9V4GwpCcAp4RRPbDkfEjT6OpAJpH559Z2QRTexy7kU+ndMPZERSX0h6
3X6Agezn2RNPLI7CRdcWJmJIRZ8wM+0vtLX7YId5JCrBJfK2d9oP2dqqGwnJxkM=
=F4ha
-----END PGP SIGNATURE-----

--------------enig60E69635CB9FFC4986EDBFAD--

--===============0322592529==
Content-Type: text/plain; charset="iso-8859-1"
MIME-Version: 1.0
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline

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

--===============0322592529==--