Projet

Général

Profil

Development #16104

Avoir un transport SOAPpy qui loggue l'HTTP

Ajouté par Frédéric Péters il y a presque 7 ans. Mis à jour il y a plus de 5 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Josué Kouka
Version cible:
-
Début:
28 avril 2017
Echéance:
% réalisé:

100%

Temps estimé:
Patch proposed:
Oui
Planning:

Description

Après avoir nettoyé les soap.py dans le cadre de #13221, il sera pas mal que le code commun puisse logguer l'HTTP.


Fichiers


Demandes liées

Lié à Passerelle - Bug #13221: multiplication des soap.py dans les connecteurs (nettoyage nécessaire)Nouveau19 septembre 2016

Actions
Lié à Passerelle - Development #24675: Utiliser python-zeep pour avoir du log httpFermé20 juin 2018

Actions
Lié à Passerelle - Development #24567: Connecteur IWSFermé15 juin 2018

Actions

Révisions associées

Révision 2cc36d68 (diff)
Ajouté par Emmanuel Cazenave il y a plus de 5 ans

start a SOAP common infrastructure (#16104)

Historique

#1

Mis à jour par Frédéric Péters il y a presque 7 ans

  • Lié à Bug #13221: multiplication des soap.py dans les connecteurs (nettoyage nécessaire) ajouté
#2

Mis à jour par Emmanuel Cazenave il y a presque 6 ans

  • Assigné à mis à Emmanuel Cazenave
#3

Mis à jour par Emmanuel Cazenave il y a presque 6 ans

#4

Mis à jour par Frédéric Péters il y a presque 6 ans

Suite au commentaire 14 dans #24567 :

Je suis toujours pour une mise en commun, dans passerelle/utils/soap.py, que les connecteurs n'aient pas à faire cet import/configuration de Transport.

from passerelle.utils.api import Client
...
client = Client(connector=self) # pose le transport, tire wsdl_url de l'instance, etc.
#5

Mis à jour par Frédéric Péters il y a presque 6 ans

#6

Mis à jour par Emmanuel Cazenave il y a presque 6 ans

  • Assigné à Emmanuel Cazenave supprimé

Je suis d'avis d'abandonner cette piste au profit de zeep.

#7

Mis à jour par Emmanuel Cazenave il y a presque 6 ans

J'avais pas vu le commentaire précédent.

#8

Mis à jour par Emmanuel Cazenave il y a presque 6 ans

Frédéric Péters a écrit :

Je suis toujours pour une mise en commun, dans passerelle/utils/soap.py, que les connecteurs n'aient pas à faire cet import/configuration de Transport.

Si on parle bien ici d'un soap.py qui utiliserait zeep, je ne suis pas de ton avis.

Avec zeep, le log http s'obtient en deux lignes de code, c'est vraiment pas grand chose.

Ce soap.py devra à terme gérer tous les cas possibles d'initialisation d'un client SOAP, à comparer avec laisser les spécificités d'initialisation d'un client dans le connecteur qui l'utilise (ces spécificités étant dictés par le webservice qu'on a en face), je ne vois pas trop l'intérêt.

Mise à part le fait que ça aurait le mérite de standardiser les noms d'attributs de modèle de connecteur genre wsdl_endpoint...mais j'ai peur que la diversité des cas d'usage ne transforme rapidement ce soap.py en usine à gaz.

#9

Mis à jour par Frédéric Péters il y a presque 6 ans

Au contraire je trouve vraiment cettre normalisation utile et dans la logique de ce qui est déjà en place (attributs wsdl_url, verify_cert, client_certificate, etc.); qu'au moment où on se rend compte qu'un connecteur doit malheureusement faire de l'https sans vérifier le certificat, on sache qu'on peut juste ajouter un attribut verify_cert au modèle, sans devoir chercher dans la documentation ou copier/coller d'un autre connecteur le code touchant à zeep).

Qu'on puisse lire dans la documentation de zeep le conseil d'avoir un backend pour cacher des wsdl et xsd et qu'on ait à le faire qu'une fois, aussi.

#10

Mis à jour par Emmanuel Cazenave il y a presque 6 ans

  • Assigné à mis à Emmanuel Cazenave

bon ok je le tente, même si je trouve ça dur à faire avec si peu de recul sur zeep.

#11

Mis à jour par Frédéric Péters il y a presque 6 ans

Merci; et comme je le notais, on peut/doit commencer tout léger, simplement tirer le wsdl_url et poser le transport, ce dont tu as besoin dans ton connecteur. Puis le travail de #13221 d'uniformisation ne disparaitra pas et au fur et à mesure de la conversion des connecteurs, passerelle/utils/soap.py pourra gagner en fonctionnalités.

#12

Mis à jour par Emmanuel Cazenave il y a presque 6 ans

Et du coup puisque l'on contraint ici l'attribut wsdl_url (pour commencer), je me dis que ça a intérêt à apparaître clairement dans modèle qui hérite de BaseResource , qui aurait une une property client etc...

#13

Mis à jour par Emmanuel Cazenave il y a presque 6 ans

Finalement opté pour le plus simple.

Je ne fais pas de soap_client une property, car le client SOAP peut alors être initialisé par le inspect.getmembers de passerelle/views.py::dispatch (et casser des tests sur des connecteurs dont le modèle définit un attribut wsdl_url, mais qui n'ont rien demandé).

#14

Mis à jour par Frédéric Péters il y a presque 6 ans

Ok pour moi, en mettant "start" plutôt que "create" dans le sujet du commit.

#16

Mis à jour par Thomas Noël il y a presque 6 ans

J'arrive après la bataille, mais pourquoi mettre des trucs dans utils.py qui ne seront en fait jamais utilisés... Je pense qu'on pourrait tout poser dans le BaseResource, genre

 
    def get_soap_transport(self):
        return zeepTransport(session=self.requests, cache=zeepInMemoryCache())

    def get_soap_client(self):
        return zeepClient(self.wsdl_url, transport=self.get_soap_transport())

Nan ?

#17

Mis à jour par Josué Kouka il y a plus de 5 ans

Vu que le patch n'est pas encore poussé. Peut on faire à ce que le l'initialisation du SOAPClient soit un peu plus flexible ?(Cas ou l'on a des Plugin ou Settings zeep à passer au client).

#18

Mis à jour par Emmanuel Cazenave il y a plus de 5 ans

Avec plaisir mais tu ne m'en dis pas assez pour comprendre de dont tu as besoin, met un bout de ton code pour qu'on comprenne stp.

#19

Mis à jour par Josué Kouka il y a plus de 5 ans

Emmanuel Cazenave a écrit :

Avec plaisir mais tu ne m'en dis pas assez pour comprendre de dont tu as besoin, met un bout de ton code pour qu'on comprenne stp.

En fait je veux pouvoir juste faire:

settings = Settings(strict=False)
plugins = [FooPlugin, BarPluging]
client = self.soap_client(settings=settings, plugins=plugins)
client.service.foo(ham, eggs)
...
#20

Mis à jour par Josué Kouka il y a plus de 5 ans

(Patch à la demande d'Emmanuel)

#21

Mis à jour par Emmanuel Cazenave il y a plus de 5 ans

  • Statut changé de Solution proposée à Solution validée
  • Assigné à changé de Emmanuel Cazenave à Josué Kouka

ok pour moi

#22

Mis à jour par Josué Kouka il y a plus de 5 ans

  • Statut changé de Solution validée à Résolu (à déployer)
  • % réalisé changé de 0 à 100
commit 2cc36d68aab4689ab4e85d1383457d2a0b0275e5 (HEAD -> master, origin/master, origin/HEAD)
Author: Emmanuel Cazenave <ecazenave@entrouvert.com>
Date:   Mon Jun 25 16:59:38 2018 +0200

    start a SOAP common infrastructure (#16104)

#23

Mis à jour par Benjamin Dauvergne il y a plus de 5 ans

  • Statut changé de Résolu (à déployer) à Fermé

Formats disponibles : Atom PDF