[Python] Appels webservices SOAP

Fermé
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 - 31 août 2007 à 10:09
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 - 5 févr. 2008 à 13:09
Hello.

Je cherche à faire des appels à un webservice (SOAP/WSDL) à partir de Python.
Je cherche donc quel module je pourrais utiliser.

Mais je ne sais pas quel module utiliser:

- SOAPy semblait populaire mais il n'est plus maintenu (dernière mise à jour: avril 2001)

- SOAP.py est mort également.

- ZSI semble être la référence, mais en l'installant je m'aperçoit qu'il dépend de pyXML qui n'est plus maintenu et n'existe pas pour Python 2.5 ! (dernière mise à jour: novembre 2004).

- soaplib a l'air potable, mais il dépend de cElementTree... et je n'ai pas de VisualStudio 2003 sous la main pour compiler cElementTree ("Visual Studio 2003 was not found on this system." lors de l'installation), donc impossible d'installer cElementTree et soaplib.


Je me retrouve donc sans client SOAP.

Quel module SOAP utiliseriez vous ?

Peut-être 4Suite ?
(Même s'il semble que les développeurs de 4Suite se soient débarassés de toute la partie SOAP ?)

:-(((

Je suis dans la mouise.
(à moins de tout bricoler moi-même, y compris les proxy)

8 réponses

sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 655
4 sept. 2007 à 12:01
Je reviens sur ce que j'ai dit:
J'ai trouvé un client SOAP potable (qui ne gère pas le WSDL, mais qui gère les exception des webservices).

Il fait un boulot très potable, bien que la doc soit franchement succinte et éparpillée:

Il s'agit de elementsoap. (Un clent SOAP basé uniquement sur ElementTree, et qui fonctionne donc avec les libs standard de Python).


ça marche bien.

URL:
http://effbot.org/downloads/#elementsoap


Example:
# delayed stock quote demo (www.xmethods.com)

from elementsoap.ElementSOAP import *

class QuoteService(SoapService):
    url = "http://66.28.98.121:9090/soap"
    def getQuote(self, symbol):
        action = "urn:xmethods-delayed-quotes#getQuote"
        request = SoapRequest("{urn:xmethods-delayed-quotes}getQuote")
        SoapElement(request, "symbol", "string", symbol)
        response = self.call(action, request)
        return float(response.findtext("Result"))

q = QuoteService()
print "MSFT", q.getQuote("MSFT")
print "LNUX", q.getQuote("LNUX")
1
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 655
4 sept. 2007 à 10:39
Bon... au final je me bricole mon propre client SOAP, en utilisant uniquement des librairies standard de Python (httplib et ElementTree).

Ça marche déjà: J'arrive à faire un appel.
(Il me reste encore les retours d'erreur à gérer, ainsi que le parsing de la réponse, mais ça ne pose aucun problème.)

Tant pis pour WSDL: pas de construiction automatique du proxy. J'implémenterai à la main les méthodes du webservice dont j'ai besoin (C'est pas la mort.)
0
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 655
4 sept. 2007 à 14:01
0
PROBLEME, il me semble, similaire... Voici un appel que j'ai fait avec soap UI:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:fet="http://prodomweb.univ-lyon1.fr/fetchProDom">
<soapenv:Header/>
<soapenv:Body>
<fet:runFetchDom>
<fet:ProdomAC>PD001000</fet:ProdomAC>
</fet:runFetchDom>
</soapenv:Body>
</soapenv:Envelope>

Mon but est de l'integrer dans un script Python mais SOAPpy refuse d'entendre raison (à moin que ce ne soit moi...)
Que dois-je faire à votre avis?
Merci d'avance....
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 655
3 janv. 2008 à 23:50
J'ai eu des problèmes avec SOAPy. J'ai fini par utiliser ElementSoap.
0
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 655
4 janv. 2008 à 11:32
Lis le lien que j'ai donné: SOAPy et SOAP.py sont basés sur des librairies qui n'existent plus en Python 2.5.
0
Perso j'ai réussit à compiler SOAPpy sous windows pour python 2.5. Voici ce que j'ai fait :

Il nous faut mingw32 pour la compilation si nous ne voulons pas installer visual studio 2003. Le télécharger ici : https://sourceforge.net/projects/mingw/files/

1) installer fpconst :
- python setup.py install

2) compiler et installer pyXML :
- récupérer libpython25.a ici : http://mpan3.homeip.net/content/resources/libpython25.zip
ou le compiler comme expliqué ici : https://sebsauvage.net/python/mingw.html
et le placer dans python25\libs

- python setup.py build -c mingw32
- python setup.py install
il y a un message d'erreur à la fin de l'install, donc je me suis permis de copier le répertoire PyXML-0.8.4\build\lib.win32-2.5\_xmlplus vers mon installation python : python25\Lib
Comme il y a maintenant un module xml intégré à python 2.5, il faudra utiliser pyXml sous le nom de module _xmlplus.

3) compiler et installer SOAPpy :
- remonter au début de chaque fichier qui la contient la ligne suivante :
from __future__ import nested_scopes
Les fichiers concernés sont sous le répertoire SOAPpy : Client.py, Types.py, Server.py, GSIServer.py.

- python setup.py build
- python setup.py install
0
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 655
5 févr. 2008 à 13:09
Merci pour l'info !
0