Projet

Général

Profil

Development #64940

astregs, proprement gérer leurs erreurs 500

Ajouté par Frédéric Péters il y a presque 2 ans. Mis à jour il y a presque 2 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
06 mai 2022
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

En cas d'erreur 500 ils produisent un contenu qui n'est même pas de l'utf-8 valide et on se trouve de notre côté à également produire une 500,

File "/usr/lib/python3/dist-packages/passerelle/apps/astregs/models.py" in get_association_by_id
  700.         r = self.call('Tiers', 'Chargement', TiersCle={'CodeTiers': association_id})

File "/usr/lib/python3/dist-packages/passerelle/apps/astregs/models.py" in call
  487.             return operation(kwargs)

File "/usr/lib/python3/dist-packages/zeep/proxy.py" in __call__
  46.         return self._proxy._binding.send(

File "/usr/lib/python3/dist-packages/zeep/wsdl/bindings/soap.py" in send
  127.         response = client.transport.post_xml(options["address"], envelope, http_headers)

File "/usr/lib/python3/dist-packages/passerelle/utils/soap.py" in post_xml
  93.         response = super().post_xml(*args, **kwargs)

File "/usr/lib/python3/dist-packages/zeep/transports.py" in post_xml
  107.         return self.post(address, message, headers)

File "/usr/lib/python3/dist-packages/zeep/transports.py" in post
  87.                     log_message = log_message.decode(response.encoding or "utf-8")

Exception Type: UnicodeDecodeError at /astregs/associations/get-association-by-id
Exception Value: 'utf-8' codec can't decode byte 0x8b in position 1: invalid start byte

Fichiers

Révisions associées

Révision 3e98717b (diff)
Ajouté par Nicolas Roche il y a presque 2 ans

astregs: correct test on association endpoint (#64940)

Révision 3da459f1 (diff)
Ajouté par Benjamin Dauvergne il y a presque 2 ans

utils/soap: disable zeep.transports logger (#64940)

Historique

#1

Mis à jour par Nicolas Roche il y a presque 2 ans

Pour info, on reçoit l'enveloppe SOAP gzippée :

<?xml version="1.0" encoding="utf-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
  <soapenv:Body>
    <soapenv:Fault>
      <faultcode>soapenv:Server</faultcode>
      <faultstring>Erreur technique dans le service 'Tiers'&#13;
Erreur WebService :  Aucun champ clé renseigné : impossible de charger l&amp;#39;objet (gf.tiers.BsTiersDonneesGenerales).   URL: hdnCodeTrt=AFFICHE&amp;CodTrt=Tiers&amp;CodDom=GF&amp;_hdnCodOrg=CG06&amp;_hdnCodBud=01&amp;_hdnCodExe=2020&amp;comboOrganisme=|CG06|</faultstring>
      <detail/>
    </soapenv:Fault>
  </soapenv:Body>
</soapenv:Envelope>

#2

Mis à jour par Benjamin Dauvergne il y a presque 2 ans

Normalement requests décompresse tout seul :

>>> import requests
>>> response = requests.get('http://httpbin.org/gzip')

>>> 
>>> response.headers['content-encoding']
'gzip'
>>> response.content
b'{\n  "gzipped": true, \n  "headers": {\n    "Accept": "*/*", \n    "Accept-Encoding": "gzip, deflate", \n    "Host": "httpbin.org", \n    "User-Agent": "python-requests/2.25.1", \n    "X-Amzn-Trace-Id": "Root=1-628e1851-10e8a5f501154b9c3582367a"\n  }, \n  "method": "GET", \n  "origin": "91.171.57.59"\n}\n'

T'es sûr de ton analyse ?

#3

Mis à jour par Benjamin Dauvergne il y a presque 2 ans

En fait c'est le bug d'AstreGS qui renvoie systématiquement quelques données binaires avant ses réponses XML, je le contourne pour les réponses normales :

# passerelle/utils/soap.py
    def post_xml(self, *args, **kwargs):
        response = super().post_xml(*args, **kwargs)

        if self.remove_first_bytes_for_xml:
            return ResponseFixContentWrapper(response)

        return response

mais dans un cas où c'est zeep qui volontairement log ça plante; il faut désactiver les logs de debug au niveau du logger zeep.transports pendant les appels, je ne vois rien d'autre.

#4

Mis à jour par Benjamin Dauvergne il y a presque 2 ans

  • Assigné à mis à Benjamin Dauvergne
#5

Mis à jour par Benjamin Dauvergne il y a presque 2 ans

#6

Mis à jour par Nicolas Roche il y a presque 2 ans

Moi j'aimais bien avoir les trames dans les logs, parce que c'est ce qu'il faut copier/coller dans les tickets pour parler aux éditeurs.
Aussi c'est vraiment une enveloppe gz qui est reçue.

#7

Mis à jour par Benjamin Dauvergne il y a presque 2 ans

Nicolas Roche a écrit :

Moi j'aimais bien avoir les trames dans les logs, parce que c'est ce qu'il faut copier/coller dans les tickets pour parler aux éditeurs.
Aussi c'est vraiment une enveloppe gz qui est reçue.

Tu l'auras mais logger par passerelle, là c'est logger deux fois normalement. En fait les logs de zeep partaient dans syslog je pense, donc c'était logger une fois dans ResourceLog via notre surcouche à requests et deux fois dans syslog.

#8

Mis à jour par Nicolas Roche il y a presque 2 ans

Oui, je parlais bien du syslog : les logs qui s'affichent quand on lance passerelle à la main, c'est un vrai plus pour déboguer les WS soap je trouve (après on peut toujours aller pose un print dans zeep/transport.py, j'avoue).

#10

Mis à jour par Benjamin Dauvergne il y a presque 2 ans

J'ai ajouté du test pour vérifier qu'on a bien les trames SOAP au niveau DEBUG.

#11

Mis à jour par Benjamin Dauvergne il y a presque 2 ans

Nicolas Roche a écrit :

Oui, je parlais bien du syslog : les logs qui s'affichent quand on lance passerelle à la main, c'est un vrai plus pour déboguer les WS soap je trouve (après on peut toujours aller pose un print dans zeep/transport.py, j'avoue).

Tu sais que tu as des logs dans passerelle via la page web du connecteur ?

#12

Mis à jour par Nicolas Roche il y a presque 2 ans

  • Statut changé de Solution proposée à Solution validée

Normalement requests décompresse tout seul

Dans un monde idéal on pourrait demander à Inetum de corriger.

(Pdb) response.headers
{'Date': 'Wed, 25 May 2022 13:07:04 GMT', 'Server': 'Simple-Server/1.1'}

il faut désactiver les logs de debug au niveau du logger zeep.transports pendant les appels, je ne vois rien d'autre.

Pas mieux.

#13

Mis à jour par Benjamin Dauvergne il y a presque 2 ans

Nicolas Roche a écrit :

Normalement requests décompresse tout seul

Dans un monde idéal on pourrait demander à Inetum de corriger.
[...]

Ok si il y a vraiment un souci de contenu gzipé envoyé sans entête Content-Encoding maintenant ça se verra mieux et on ouvrira un ticket mais assigné au CD06.

#14

Mis à jour par Benjamin Dauvergne il y a presque 2 ans

  • Statut changé de Solution validée à Résolu (à déployer)
commit 3da459f11668f1d24ef0b39138f04ae373e2c70a
Author: Benjamin Dauvergne <bdauvergne@entrouvert.com>
Date:   Wed May 25 14:13:28 2022 +0200

    utils/soap: disable zeep.transports logger (#64940)
#15

Mis à jour par Transition automatique il y a presque 2 ans

  • Statut changé de Résolu (à déployer) à Solution déployée
#16

Mis à jour par Transition automatique il y a plus d'un an

Automatic expiration

Formats disponibles : Atom PDF