Development #64940
astregs, proprement gérer leurs erreurs 500
0%
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
utils/soap: disable zeep.transports logger (#64940)
Historique
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' Erreur WebService : Aucun champ clé renseigné : impossible de charger l&#39;objet (gf.tiers.BsTiersDonneesGenerales). URL: hdnCodeTrt=AFFICHE&CodTrt=Tiers&CodDom=GF&_hdnCodOrg=CG06&_hdnCodBud=01&_hdnCodExe=2020&comboOrganisme=|CG06|</faultstring> <detail/> </soapenv:Fault> </soapenv:Body> </soapenv:Envelope>
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 ?
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.
Mis à jour par Benjamin Dauvergne il y a presque 2 ans
- Fichier 0001-utils-soap-disable-zeep.transports-logger-64940.patch 0001-utils-soap-disable-zeep.transports-logger-64940.patch ajouté
- Statut changé de Nouveau à Solution proposée
- Patch proposed changé de Non à Oui
Mis à jour par Nicolas Roche il y a presque 2 ans
- Fichier astregs.gz astregs.gz ajouté
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.
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.
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).
Mis à jour par Benjamin Dauvergne il y a presque 2 ans
- Fichier 0001-utils-soap-disable-zeep.transports-logger-64940.patch 0001-utils-soap-disable-zeep.transports-logger-64940.patch ajouté
J'ai ajouté du test pour vérifier qu'on a bien les trames SOAP au niveau DEBUG.
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 ?
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.
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.
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)
Mis à jour par Transition automatique il y a presque 2 ans
- Statut changé de Résolu (à déployer) à Solution déployée
astregs: correct test on association endpoint (#64940)