Project

General

Profile

Development #35370

fonctionner avec un zeep récent

Added by Frédéric Péters 6 months ago. Updated 9 days ago.

Status:
Solution déployée
Priority:
Normal
Assignee:
Target version:
-
Start date:
12 Aug 2019
Due date:
% Done:

0%

Patch proposed:
Yes
Planning:
No

Description

Aujourd'hui,

            'zeep < 3.0',

(notre dépôt a 2.5.0, buster a 3.2.0)

0001-utils-soap-upgrade-zeep-soap-library-version-35370.patch View (8.29 KB) Nicolas Roche, 15 Oct 2019 07:39 PM

0001-utils-soap-upgrade-zeep-soap-library-version-35370.patch View (8.9 KB) Nicolas Roche, 25 Oct 2019 03:47 PM

0001-utils-soap-upgrade-zeep-soap-library-version-35370.patch View (10.6 KB) Nicolas Roche, 25 Oct 2019 07:09 PM

0001-utils-soap-allow-zeep-versions-2-and-3-35370.patch View (10.2 KB) Thomas Noël, 14 Jan 2020 04:07 PM

Associated revisions

Revision 00011f6f (diff)
Added by Nicolas Roche 13 days ago

utils/soap: allow zeep versions 2 and 3 (#35370)

History

#1 Updated by Nicolas Roche 4 months ago

  • Assignee set to Nicolas Roche

a priori ne plante que sur l'iparapheur

#2 Updated by Frédéric Péters 4 months ago

Attention il faut continuer à fonctionner avec la version qui est sur nos serveurs. (en plus de fonctionner avec la dernière version dispo).

#3 Updated by Nicolas Roche 3 months ago

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.

#4 Updated by Thomas Noël 3 months ago

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 ».

#5 Updated by Nicolas Roche 3 months ago

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 ...

#6 Updated by Thomas Noël 3 months ago

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...

#7 Updated by Nicolas Roche 3 months ago

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.

#9 Updated by Thomas Noël 14 days ago

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)

#11 Updated by Benjamin Dauvergne 14 days ago

  • Status changed from Solution proposée to 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 ?

#12 Updated by Thomas Noël 13 days ago

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).

#13 Updated by Thomas Noël 13 days ago

  • Status changed from Solution validée to 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)

#14 Updated by Frédéric Péters 9 days ago

  • Status changed from Résolu (à déployer) to Solution déployée

Also available in: Atom PDF