Projet

Général

Profil

Development #35370

fonctionner avec un zeep récent

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

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
12 août 2019
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

Aujourd'hui,

            'zeep < 3.0',

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


Fichiers

Révisions associées

Révision 00011f6f (diff)
Ajouté par Nicolas Roche il y a plus de 4 ans

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

Historique

#1

Mis à jour par Nicolas Roche il y a plus de 4 ans

  • Assigné à mis à Nicolas Roche

a priori ne plante que sur l'iparapheur

#2

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

#3

Mis à jour par Nicolas Roche il y a plus de 4 ans

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

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

#5

Mis à jour par Nicolas Roche il y a plus de 4 ans

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

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

#7

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.

#9

Mis à jour par Thomas Noël il y a plus de 4 ans

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

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 ?

#12

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

#13

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)

#14

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

Formats disponibles : Atom PDF