Development #35370
fonctionner avec un zeep récent
0%
Description
Aujourd'hui,
'zeep < 3.0',
(notre dépôt a 2.5.0, buster a 3.2.0)
Fichiers
Révisions associées
Historique
Mis à jour par Nicolas Roche il y a plus de 4 ans
- Assigné à mis à Nicolas Roche
a priori ne plante que sur l'iparapheur
Mis à jour par Frédéric Péters il y a plus de 4 ans
Attention il faut continuer à fonctionner avec la version qui est sur nos serveurs. (en plus de fonctionner avec la dernière version dispo).
Mis à jour par Nicolas Roche il y a plus de 4 ans
- Fichier 0001-utils-soap-upgrade-zeep-soap-library-version-35370.patch 0001-utils-soap-upgrade-zeep-soap-library-version-35370.patch ajouté
- Statut changé de Nouveau à Solution proposée
- Patch proposed changé de Non à Oui
Oui, j'avais zappé.
Désolé, encore un patch bien moche.
Le principal problème vient du déport de certains paramètres du
constructeur de l'objet client SOAP dans un objet de configuration.
Ici, il ne s'agit en fait que du paramètre 'strict' qui permet
d'être plus permissif avec le SOAP retourné.
https://python-zeep.readthedocs.io/en/master/client.html#strict-mode
J'ai du modifier le soap.wsdl des tests pour ajouter un test qui met
en évidence son effet.
Pour l'instant il n'y a que l'iparapheur qui utilise ce paramètre.
Peut-être que se serait plus propre d'utiliser un block with :
with client.settings(strict=True): response = client.service.myoperation()
et alors de laisser à chaque connecteur le soin de gérer ce paramètre.
Mis à jour par Thomas Noël il y a plus de 4 ans
Faudrait avoir l'infra de test sur les deux versions.
Dans tox.ini, ie y créer deux environnements, zeep2 et zeep3.
Ensuite, pour ne pas doubler les temps de test dans Jenkins, tant qu'on n'a pas encore commencé la bascule vers zeep3, je pense qu'on pourrait rester en « envlist = django111-pg-zeep2 ».
Mis à jour par Nicolas Roche il y a plus de 4 ans
- Fichier 0001-utils-soap-upgrade-zeep-soap-library-version-35370.patch 0001-utils-soap-upgrade-zeep-soap-library-version-35370.patch ajouté
Pour que ça marche j'ai du retirer la contrainte sur la version '< 3.0' dans le setup.py.
$ tox tests/test_iparapheur.py ... zeep==2.5.0 ... $ tox -e django111-pg-zeep3 tests/test_iparapheur.py ... zeep==3.4.0 ...
Mis à jour par Thomas Noël il y a plus de 4 ans
Ok pour les tests.
Pour le __init__
, pas facile de trouver une jolie façon de faire. Je pense cependant que le zeep_version<'3' n'est pas génial, parce ça ne marchera plus pour zeep 10 (mais oui, je suis sans doute un peu tatasse). Tu pourrais voir si un "from zeep import Settings" lève une ImportError et dans ce cas agir en mode zeep2... peut-être que ça donnera un code un peu plus lisible...
Mis à jour par Nicolas Roche il y a plus de 4 ans
Remarque prise en compte pour la gestion des versions.
Etant donné que seul iParapheur fait que l'on ne peut plus utiliser l'API de zeep (qui a évolué) tel quelle, je propose ici l'autre façon de faire : où chaque connecteur doit gérer le paramètre 'strict' lors des appels (et non plus à l'initialisation).
Dites-moi laquelle vous préférez.
Mis à jour par Nicolas Roche il y a plus de 4 ans
Mis à jour par Thomas Noël il y a plus de 4 ans
- Fichier 0001-utils-soap-allow-zeep-versions-2-and-3-35370.patch 0001-utils-soap-allow-zeep-versions-2-and-3-35370.patch ajouté
Je préfère cette dernière version. J'ai juste modifié un peu ta proposition de détection des possibilités de zeep en faisant juste :
try:
from zeep import Settings # zeep version >= 3.x
except ImportError:
Settings = None
et comme si, si "Settings is not None" on sait qu'on est dans une version récente de zeep, et donc on peut faire des choses telles que :
- client = self.get_client(strict_mode=strict_mode)
+ if Settings is not None: # zeep version >= 3.x:
+ client = self.get_client(settings=Settings(strict=strict_mode))
+ else:
+ client = self.get_client(strict=strict_mode)
J'ai créé la branche wip/35370-zeep-2-and-3 qui a ce patch + une petite modif pour faire tourne les tests sur zeep 2 et zeep 3 (mais je ne pousserais pas ce petit commit et laisserait pour l'instant les tests tourne en zeep 2, le temps de packager zeep 3 pour Debian 9, #38959)
Mis à jour par Benjamin Dauvergne il y a plus de 4 ans
- Statut changé de Solution proposée à Solution validée
Thomas Noël a écrit :
J'ai créé la branche wip/35370-zeep-2-and-3 qui a ce patch + une petite modif pour faire tourne les tests sur zeep 2 et zeep 3 (mais je ne pousserais pas ce petit commit et laisserait pour l'instant les tests tourne en zeep 2, le temps de packager zeep 3 pour Debian 9, #38959)
Je ne comprends pas ce dernier point, quel rapport entre les tests zeep3 et le packaging Debian 9 de zeep 3.0 ?
Mis à jour par Thomas Noël il y a plus de 4 ans
Benjamin Dauvergne a écrit :
Thomas Noël a écrit :
J'ai créé la branche wip/35370-zeep-2-and-3 qui a ce patch + une petite modif pour faire tourne les tests sur zeep 2 et zeep 3 (mais je ne pousserais pas ce petit commit et laisserait pour l'instant les tests tourne en zeep 2, le temps de packager zeep 3 pour Debian 9, #38959)
Je ne comprends pas ce dernier point, quel rapport entre les tests zeep3 et le packaging Debian 9 de zeep 3.0 ?
C'était juste histoire de pas lancer deux fois la batterie de tests Passerelle : actuellement on teste sur zeep 2, et quand aura basculé sur zeep 3 en recette je proposerais de modifier le tox.ini pour tester sur zeep 3 (j'ai juste vérifié via la branche ici que c'était ok sur zeep2 et zeep3).
Mis à jour par Thomas Noël il y a plus de 4 ans
- Statut changé de Solution validée à Résolu (à déployer)
commit 00011f6f02fd760c3fa96e3b3e2200353994edc8 Author: Nicolas ROCHE <nroche@entrouvert.com> Date: Tue Oct 15 10:39:01 2019 +0200 utils/soap: allow zeep versions 2 and 3 (#35370)
Mis à jour par Frédéric Péters il y a plus de 4 ans
- Statut changé de Résolu (à déployer) à Solution déployée
utils/soap: allow zeep versions 2 and 3 (#35370)