[Python] Script intégré au classeur, classe non trouvée

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur : Vilains modOOs

Règles du forum
:alerte: Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
Avatar de l’utilisateur
Benzouye
Membre lOOyal
Membre lOOyal
Messages : 29
Inscription : 28 févr. 2009 10:13

[Python] Script intégré au classeur, classe non trouvée

Message par Benzouye »

Bonjour,

J'ai développé un script Python qui utilise la bibliothèque suds (client SOAP pour utiliser des services web).
Dans un premier temps j'ai codé dans le répertoire "share/Scripts/python/" ce qui permet d'accéder au script Python, mais uniquement sur mon installation de OpenOffice.
Dans le répertoire "share/Scripts/python/" j'ai ajouté la classé suds dans un sous-répertoire "pythonpath/suds/".
Une fois le script fonctionnel (ça marche nickel quand je travaille su le répertoire "share"), j'ai décidé de l'intégrer à mon document en suivant la procédure proposée ici.
Je pense avoir fait le boulot correctement puisque mon document s'ouvre normalement.

Mon problème c'est qu'à l'exécution de la macro j'ai une erreur d'exécution de Python, il n'arrive pas à trouver la classe suds :
h**ps://user.oc-static.com/upload/2019/04/19/15556611311727_class_error.PNG
La modération vous a écrit: Pas d'image hébergée en dehors du forum.

Y-a-t-il un paramétrage spécifique à faire pour inclure les chemins de classes pour les scripts Python intégrés au document ?

Ai-je raté quelque chose ?

D'avance merci.
OpenOffice 4.1.0 (obligation de version)
Win7 64 bits
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
Messages : 1214
Inscription : 06 avr. 2016 07:26

Re: [Python] Script intégré au classeur, classe non trouvée

Message par Hubert Lambert »

Bonjour,

Pour info, Apso permet d'incorporer un module dans un document d'un simple clic ;) .
Concernant l'utilisation d'une bibliothèque tierce dans un document, le mécanisme du pythonpath ne fonctionnera malheureusement pas. Ce fil explique pourquoi, et propose un contournement (à utiliser avec une certaine prudence) .
L'idéal serait de trouver un code équivalent à suds, aussi léger que possible, et de l'incorporer dans le corps du module qui l'utilisera.
Cordialement.
AOOo 4.1.7 sur Win10
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
| « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
Avatar de l’utilisateur
Benzouye
Membre lOOyal
Membre lOOyal
Messages : 29
Inscription : 28 févr. 2009 10:13

Re: [Python] Script intégré au classeur, classe non trouvée

Message par Benzouye »

Merci pour ce nouvel aiguillage !
Je n'avais pas trouvé ce thread en cherchant sur le forum...
Je teste ça rapidement et vous fais un retour.
OpenOffice 4.1.0 (obligation de version)
Win7 64 bits
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
Messages : 1214
Inscription : 06 avr. 2016 07:26

Re: [Python] Script intégré au classeur, classe non trouvée

Message par Hubert Lambert »

pysimplesoap est une bibliothèque plus légère que suds. Il a été assez simple de refondre les quelques modules utiles dans un seul fichier "soap", qui comprend donc également la macro qui l'utilise (voir exemple joint).
Cordialement.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
AOOo 4.1.7 sur Win10
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
| « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
Avatar de l’utilisateur
Benzouye
Membre lOOyal
Membre lOOyal
Messages : 29
Inscription : 28 févr. 2009 10:13

Re: [Python] Script intégré au classeur, classe non trouvée

Message par Benzouye »

Bonjour, et merci encore pour ton aide !

Lorsque j'ouvre ton fichier d'exemple, si je clique sur le bouton j'obtiens cette erreur :
Image
Apparemment problème de DLL, mais je ne sais absolument pas comment comprendre cela ...

Par contre si j'ouvre APSO et que j'exécute le script depuis l'IHM cela fonctionne sans erreur ... et ensuite, la macro fonctionne correctement depuis le bouton ... je suis un peu désemparé ...
OpenOffice 4.1.0 (obligation de version)
Win7 64 bits
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
Messages : 1214
Inscription : 06 avr. 2016 07:26

Re: [Python] Script intégré au classeur, classe non trouvée

Message par Hubert Lambert »

Apparemment il y a un problème à l'import de la bibliothèque "ssl" (ligne 10 du script). Je ne vois aucune raison a priori pour que cela fonctionne normalement lorsque la fonction est appelée depuis Apso, mais je ne maîtrise pas du tout la matière ssl...
Je ferai quelques tests jeudi, dès que j'aurai accès à un poste Windows (sur linux tout fonctionne bien).
AOOo 4.1.7 sur Win10
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
| « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25181
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Python] Script intégré au classeur, classe non trouvée

Message par Dude »

L'erreur est :
Dans la copie écran, il y a écrit :DLL load failed: le système d'exploitation ne peut exécuter %1
Il y a sûrement un mélange entre le système qui est x64 et le Python d'OpenOffice resté en 32-bits.
Cette page fournit les binaires Windows adaptés pour les paquetages Python : https://www.lfd.uci.edu/~gohlke/pythonlibs/
Avatar de l’utilisateur
Benzouye
Membre lOOyal
Membre lOOyal
Messages : 29
Inscription : 28 févr. 2009 10:13

Re: [Python] Script intégré au classeur, classe non trouvée

Message par Benzouye »

En ignorant le problème de DLL précisé plus haut (qu'il faudra quand même que je règle), j'ai maintenant un problème, apparemment de compatibilité SOAP avec pysimplesoap ...

Code : Tout sélectionner

Cannot determine service in WSDL: SOAP version: soap11
Alors que la bibliothèque Suds fonctionnait bien ...

Mon code qui plante :

Code : Tout sélectionner

WSDLSession = "..."

def helloWorld(event=None):
    classeur = XSCRIPTCONTEXT.getDocument()
    feuille = classeur.getSheets().getByName( "Test" )
    soapSession = SoapClient( wsdl=WSDLSession )
    feuille.getCellByPosition( 0, 0 ).setString( soapSession.testHello() )
C'est sur l'appel du service (ou opération) testHello que ça plante ...

Je pense que je vais abandonner ma super idée de services web ... Sauf si un éclair fulgurant vous parcoure :mrgreen:
OpenOffice 4.1.0 (obligation de version)
Win7 64 bits
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
Messages : 1214
Inscription : 06 avr. 2016 07:26

Re: [Python] Script intégré au classeur, classe non trouvée

Message par Hubert Lambert »

Pour pouvoir reproduire cette nouvelle erreur et essayer de la comprendre, il faudrait au minimum connaître la valeur de "WSDLSession", ou tout autre équivalente...
AOOo 4.1.7 sur Win10
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
| « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
Avatar de l’utilisateur
Benzouye
Membre lOOyal
Membre lOOyal
Messages : 29
Inscription : 28 févr. 2009 10:13

Re: [Python] Script intégré au classeur, classe non trouvée

Message par Benzouye »

Je ne peux pas communiquer la valeur du WSDL car c'est un service web d'une application interne (non accessible de l'extérieur du LAN). Vous ne pourrez pas l'utiliser en dehors de mon réseau d'entreprise.

Je suppose par contre que je peux vous fournir le contenu du WSDL, même si je doute que cela puisse vous être d'une aide formidable ... On peut y trouver l'implémentation de l'opération testHello que j'utilise dans mon code de test et qui est censée retourner une simple chaîne "It Works !".

On dirait que pysimplesoap n'arrive pas à parser correctement le XML.

J'ai essayé en passant sur soap12, l'erreur est la même mais avec soap12 dedans :(
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
OpenOffice 4.1.0 (obligation de version)
Win7 64 bits
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
Messages : 1214
Inscription : 06 avr. 2016 07:26

Re: [Python] Script intégré au classeur, classe non trouvée

Message par Hubert Lambert »

Pourrais-tu essayer de reproduire le problème à partir d'une url publique ?
AOOo 4.1.7 sur Win10
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
| « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
Avatar de l’utilisateur
Benzouye
Membre lOOyal
Membre lOOyal
Messages : 29
Inscription : 28 févr. 2009 10:13

Re: [Python] Script intégré au classeur, classe non trouvée

Message par Benzouye »

Avec le service web ISBN que tu utilises en exemple le WSDL est bien parsé, si je fais un print de l'instance SoapClient je vois bien la liste des services proposés, alors qu'avec mon WSDL pro, l'instance SoapClient est bien créée, mais la liste des services est laissée vide ... On dirait vraiment que le parsing échoue et le client SOAP est instancié "vide".
J'ai essayé de creuser dans la classe pysimplepython, et c'est au niveau de la classe SimpleXMLElement que ça ne fonctionne pas. Je n'arrive pas à trouver pourquoi ...

Si tu te sens le courage, tu peux tester avec le XML transmis précédemment en le passant directement à la méthode wsdl_parse ...

Je continue mes investigations de mon côté, peut-être un problème de préfixe ou de namespace non reconnu. Pour info j'arrive très bien à faire fonctionner mon code avec la bibliothèque suds ...
OpenOffice 4.1.0 (obligation de version)
Win7 64 bits