Bug #73411
soap: activer api_error=True sur Parsifal
0%
Description
Dans les traces (rien trouvé encore sur Jenkins)
From: FAMILLE & ACTIVITES DE LOISIRS <ne-pas-repondre+parsifal.test.entrouvert.org@entrouvert.com> To: admin+recette@entrouvert.com Subject: FAMILLE & ACTIVITES DE LOISIRS : [ERROR] [DATASOURCE] Error reading JSON data source output (err_desc Unknown fault occured, err_class passerelle.utils.jsonresponse.APIError, err Site-readSchoolForAdressAndLevel-None) ## FAMILLE & ACTIVITES DE LOISIRS ## Stack trace (most recent call first): File "/usr/lib/python3/dist-packages/wcs/data_sources.py", line 298, in get_json_from_url get_publisher().record_error( File "/usr/lib/python3/dist-packages/wcs/data_sources.py", line 311, in request_json_items entries = get_json_from_url(url, data_source, cache_duration=cache_duration) File "/usr/lib/python3/dist-packages/wcs/data_sources.py", line 530, in _get_structured_items items = request_json_items(url, data_source, cache_duration=cache_duration) File "/usr/lib/python3/dist-packages/wcs/data_sources.py", line 371, in get_structured_items items = _get_structured_items(data_source, mode=mode, raise_on_error=raise_on_error) File "/usr/lib/python3/dist-packages/wcs/data_sources.py", line 224, in get_items structured_items = get_structured_items(data_source, mode=mode, include_disabled=include_disabled) File "/usr/lib/python3/dist-packages/wcs/fields.py", line 2274, in perform_more_widget_changes items = data_sources.get_items(self.data_source, include_disabled=self.display_disabled_items) File "/usr/lib/python3/dist-packages/wcs/fields.py", line 887, in add_to_form self.perform_more_widget_changes(form, kwargs) File "/usr/lib/python3/dist-packages/wcs/formdef.py", line 834, in add_fields_to_form widget = field.add_to_form(form, value) File "/usr/lib/python3/dist-packages/wcs/formdef.py", line 780, in create_form self.add_fields_to_form( File "/usr/lib/python3/dist-packages/wcs/forms/root.py", line 893, in create_form form = self.formdef.create_form(*args, **kwargs) File "/usr/lib/python3/dist-packages/wcs/forms/root.py", line 563, in page form = self.create_form(page, displayed_fields, transient_formdata=transient_formdata) File "/usr/lib/python3/dist-packages/wcs/forms/root.py", line 1435, in previous_page return self.page(previous_page, page_change=True) File "/usr/lib/python3/dist-packages/wcs/forms/root.py", line 1165, in _q_index return self.previous_page(page_no, magictoken) File "/usr/lib/python3/dist-packages/quixote/directory.py", line 92, in _q_traverse return obj() File "/usr/lib/python3/dist-packages/quixote/directory.py", line 88, in _q_traverse return obj._q_traverse(path) File "/usr/lib/python3/dist-packages/quixote/directory.py", line 116, in _q_traverse return super(AccessControlled, self)._q_traverse(path) File "/usr/lib/python3/dist-packages/quixote/directory.py", line 88, in _q_traverse return obj._q_traverse(path) File "/usr/lib/python3/dist-packages/wcs/root.py", line 307, in _q_traverse return Directory._q_traverse(self, path) File "/usr/lib/python3/dist-packages/quixote/publish.py", line 241, in try_publish output = self.root_directory._q_traverse(components) File "/usr/lib/python3/dist-packages/wcs/compat.py", line 214, in process_request output = self.try_publish(request) File "/usr/lib/python3/dist-packages/wcs/compat.py", line 262, in quixote return pub.process_request(pub.get_request()) File "/usr/lib/python3/dist-packages/django/core/handlers/base.py", line 113, in _get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) File "/usr/lib/python3/dist-packages/django/core/handlers/exception.py", line 34, in inner response = get_response(request) File "/usr/lib/python3/dist-packages/django/utils/deprecation.py", line 94, in __call__ response = response or self.get_response(request) File "/usr/lib/python3/dist-packages/sentry_sdk/integrations/django/middleware.py", line 92, in +sentry_wrapped_method return old_method(*args, **kwargs) File "/usr/lib/python3/dist-packages/sentry_sdk/integrations/django/middleware.py", line 131, in __call__ return f(*args, **kwargs) File "/usr/lib/python3/dist-packages/django/core/handlers/exception.py", line 34, in inner response = get_response(request) File "/usr/lib/python3/dist-packages/django/utils/deprecation.py", line 94, in __call__ response = response or self.get_response(request) File "/usr/lib/python3/dist-packages/sentry_sdk/integrations/django/middleware.py", line 92, in +sentry_wrapped_method return old_method(*args, **kwargs) File "/usr/lib/python3/dist-packages/sentry_sdk/integrations/django/middleware.py", line 131, in __call__ return f(*args, **kwargs) File "/usr/lib/python3/dist-packages/django/core/handlers/exception.py", line 34, in inner response = get_response(request) File "/usr/lib/python3/dist-packages/wcs/middleware.py", line 155, in process_request return self.get_response(request) File "/usr/lib/python3/dist-packages/django/utils/deprecation.py", line 93, in __call__ response = self.process_request(request) File "/usr/lib/python3/dist-packages/sentry_sdk/integrations/django/middleware.py", line 92, in +sentry_wrapped_method return old_method(*args, **kwargs) File "/usr/lib/python3/dist-packages/sentry_sdk/integrations/django/middleware.py", line 131, in __call__ return f(*args, **kwargs) File "/usr/lib/python3/dist-packages/django/core/handlers/exception.py", line 34, in inner response = get_response(request) File "/usr/lib/python3/dist-packages/django/utils/deprecation.py", line 94, in __call__ response = response or self.get_response(request) File "/usr/lib/python3/dist-packages/sentry_sdk/integrations/django/middleware.py", line 92, in +sentry_wrapped_method return old_method(*args, **kwargs) File "/usr/lib/python3/dist-packages/sentry_sdk/integrations/django/middleware.py", line 131, in __call__ return f(*args, **kwargs) File "/usr/lib/python3/dist-packages/django/core/handlers/exception.py", line 34, in inner response = get_response(request) File "/usr/lib/python3/dist-packages/django/utils/deprecation.py", line 94, in __call__ response = response or self.get_response(request) File "/usr/lib/python3/dist-packages/sentry_sdk/integrations/django/middleware.py", line 92, in +sentry_wrapped_method return old_method(*args, **kwargs) File "/usr/lib/python3/dist-packages/sentry_sdk/integrations/django/middleware.py", line 131, in __call__ return f(*args, **kwargs) File "/usr/lib/python3/dist-packages/django/core/handlers/exception.py", line 34, in inner response = get_response(request) File "/usr/lib/python3/dist-packages/django/utils/deprecation.py", line 94, in __call__ response = response or self.get_response(request) File "/usr/lib/python3/dist-packages/sentry_sdk/integrations/django/middleware.py", line 92, in +sentry_wrapped_method return old_method(*args, **kwargs) File "/usr/lib/python3/dist-packages/sentry_sdk/integrations/django/middleware.py", line 131, in __call__ return f(*args, **kwargs) File "/usr/lib/python3/dist-packages/django/core/handlers/exception.py", line 34, in inner response = get_response(request) File "/usr/lib/python3/dist-packages/django/utils/deprecation.py", line 94, in __call__ response = response or self.get_response(request) File "/usr/lib/python3/dist-packages/hobo/middleware/common.py", line 10, in __call__ return super().__call__(*args, **kwargs) File "/usr/lib/python3/dist-packages/sentry_sdk/integrations/django/middleware.py", line 92, in +sentry_wrapped_method return old_method(*args, **kwargs) File "/usr/lib/python3/dist-packages/sentry_sdk/integrations/django/middleware.py", line 131, in __call__ return f(*args, **kwargs) File "/usr/lib/python3/dist-packages/django/core/handlers/exception.py", line 34, in inner response = get_response(request) File "/usr/lib/python3/dist-packages/hobo/middleware/maintenance.py", line 55, in __call__ return self.get_response(request) File "/usr/lib/python3/dist-packages/sentry_sdk/integrations/django/middleware.py", line 92, in +sentry_wrapped_method return old_method(*args, **kwargs) File "/usr/lib/python3/dist-packages/sentry_sdk/integrations/django/middleware.py", line 131, in __call__ return f(*args, **kwargs) File "/usr/lib/python3/dist-packages/django/core/handlers/exception.py", line 34, in inner response = get_response(request) File "/usr/lib/python3/dist-packages/django/utils/deprecation.py", line 94, in __call__ response = response or self.get_response(request) File "/usr/lib/python3/dist-packages/sentry_sdk/integrations/django/middleware.py", line 92, in +sentry_wrapped_method return old_method(*args, **kwargs) File "/usr/lib/python3/dist-packages/sentry_sdk/integrations/django/middleware.py", line 131, in __call__ return f(*args, **kwargs) File "/usr/lib/python3/dist-packages/django/core/handlers/exception.py", line 34, in inner response = get_response(request) File "/usr/lib/python3/dist-packages/django/utils/deprecation.py", line 94, in __call__ response = response or self.get_response(request) File "/usr/lib/python3/dist-packages/sentry_sdk/integrations/django/middleware.py", line 92, in +sentry_wrapped_method return old_method(*args, **kwargs) File "/usr/lib/python3/dist-packages/sentry_sdk/integrations/django/middleware.py", line 131, in __call__ return f(*args, **kwargs) File "/usr/lib/python3/dist-packages/django/core/handlers/exception.py", line 34, in inner response = get_response(request) File "/usr/lib/python3/dist-packages/django/utils/deprecation.py", line 94, in __call__ response = response or self.get_response(request) File "/usr/lib/python3/dist-packages/sentry_sdk/integrations/django/middleware.py", line 92, in +sentry_wrapped_method return old_method(*args, **kwargs) File "/usr/lib/python3/dist-packages/sentry_sdk/integrations/django/middleware.py", line 131, in __call__ return f(*args, **kwargs) File "/usr/lib/python3/dist-packages/django/core/handlers/exception.py", line 34, in inner response = get_response(request) File "/usr/lib/python3/dist-packages/django/utils/deprecation.py", line 94, in __call__ response = response or self.get_response(request) File "/usr/lib/python3/dist-packages/sentry_sdk/integrations/django/middleware.py", line 92, in +sentry_wrapped_method return old_method(*args, **kwargs) File "/usr/lib/python3/dist-packages/sentry_sdk/integrations/django/middleware.py", line 131, in __call__ return f(*args, **kwargs) File "/usr/lib/python3/dist-packages/django/core/handlers/exception.py", line 34, in inner response = get_response(request) File "/usr/lib/python3/dist-packages/django/utils/deprecation.py", line 94, in __call__ response = response or self.get_response(request) File "/usr/lib/python3/dist-packages/sentry_sdk/integrations/django/middleware.py", line 92, in +sentry_wrapped_method return old_method(*args, **kwargs) File "/usr/lib/python3/dist-packages/sentry_sdk/integrations/django/middleware.py", line 131, in __call__ return f(*args, **kwargs) File "/usr/lib/python3/dist-packages/django/core/handlers/exception.py", line 34, in inner response = get_response(request) File "/usr/lib/python3/dist-packages/django/utils/deprecation.py", line 94, in __call__ response = response or self.get_response(request) File "/usr/lib/python3/dist-packages/sentry_sdk/integrations/django/middleware.py", line 92, in +sentry_wrapped_method return old_method(*args, **kwargs) File "/usr/lib/python3/dist-packages/sentry_sdk/integrations/django/middleware.py", line 131, in __call__ return f(*args, **kwargs) File "/usr/lib/python3/dist-packages/django/core/handlers/exception.py", line 34, in inner response = get_response(request) File "/usr/lib/python3/dist-packages/django/utils/deprecation.py", line 94, in __call__ response = response or self.get_response(request) File "/usr/lib/python3/dist-packages/sentry_sdk/integrations/django/middleware.py", line 92, in +sentry_wrapped_method return old_method(*args, **kwargs) File "/usr/lib/python3/dist-packages/sentry_sdk/integrations/django/middleware.py", line 131, in __call__ return f(*args, **kwargs) File "/usr/lib/python3/dist-packages/django/core/handlers/exception.py", line 34, in inner response = get_response(request) File "/usr/lib/python3/dist-packages/django/utils/deprecation.py", line 94, in __call__ response = response or self.get_response(request) File "/usr/lib/python3/dist-packages/sentry_sdk/integrations/django/middleware.py", line 92, in +sentry_wrapped_method return old_method(*args, **kwargs) File "/usr/lib/python3/dist-packages/sentry_sdk/integrations/django/middleware.py", line 131, in __call__ return f(*args, **kwargs) File "/usr/lib/python3/dist-packages/django/core/handlers/exception.py", line 34, in inner response = get_response(request) File "/usr/lib/python3/dist-packages/django/core/handlers/base.py", line 75, in get_response response = self._middleware_chain(request) File "/usr/lib/python3/dist-packages/sentry_sdk/integrations/django/__init__.py", line 140, in +sentry_patched_get_response return old_get_response(self, request) File "/usr/lib/python3/dist-packages/django/core/handlers/wsgi.py", line 141, in __call__ response = self.get_response(request) File "/usr/lib/python3/dist-packages/sentry_sdk/integrations/wsgi.py", line 113, in __call__ rv = self.app( File "/usr/lib/python3/dist-packages/sentry_sdk/integrations/django/__init__.py", line 108, in +sentry_patched_wsgi_handler return SentryWsgiMiddleware(bound_old_app)(environ, start_response) Form: _ajax_form_token 'XIzFYTlZcDp-M3OSLnkfBw' f00 '' f501$element0$fbf38b483e0-39ae-4657-a858-e74120dd2f2a$file '' f501$element0$fbf38b483e0-39ae-4657-a858-e74120dd2f2a$token '' f502$element0$fbf38b483e0-39ae-4657-a858-e74120dd2f2a$file '' f502$element0$fbf38b483e0-39ae-4657-a858-e74120dd2f2a$token '' f546 '' f548 '07DERO-1' f551$element0$fbfb2a4f64b-2d5a-4b5d-a039-848a2519ab20 '2435' f551$element1$fbfb2a4f64b-2d5a-4b5d-a039-848a2519ab20 '2435' magictoken 'zdZ_1qH6RE0' page '5' page_id '416' previous 'Précédent' step '0' Cookies: a2-opened-session-59150e '98d570f7cbd54afbab6e48a2d7e77956' sessionid-wcs-bad34e 'XakyQljGdz_vEhPOHyIHog' Environment: CONTENT_LENGTH '2224' CONTENT_TYPE 'multipart/form-data; boundary=---------------------------182828711325786232522680271468' HTTP_ACCEPT 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8' HTTP_ACCEPT_ENCODING 'gzip, deflate, br' HTTP_ACCEPT_LANGUAGE 'fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3' HTTP_CONNECTION 'close' HTTP_COOKIE 'a2-opened-session-59150e=98d570f7cbd54afbab6e48a2d7e77956; +sessionid-wcs-bad34e=XakyQljGdz_vEhPOHyIHog' HTTP_DNT '1' HTTP_HOST 'demarches-parsifal.test.entrouvert.org' HTTP_ORIGIN 'https://demarches-parsifal.test.entrouvert.org' HTTP_REFERER 'https://demarches-parsifal.test.entrouvert.org/parsifal-en-cours/inscription-scolaire/' HTTP_SEC_FETCH_DEST 'document' HTTP_SEC_FETCH_MODE 'navigate' HTTP_SEC_FETCH_SITE 'same-origin' HTTP_SEC_FETCH_USER '?1' HTTP_UPGRADE_INSECURE_REQUESTS '1' HTTP_USER_AGENT 'Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Firefox/102.0' HTTP_X_FORWARDED_FOR '78.193.132.195, 78.193.132.195' HTTP_X_FORWARDED_PROTO 'https' HTTP_X_FORWARDED_PROTOCOL 'ssl' HTTP_X_FORWARDED_SSL 'on' HTTP_X_PUBLIK_CLUSTER_BACKEND 'wcs-balancer' HTTP_X_REAL_IP '78.193.132.195' PATH_INFO '/parsifal-en-cours/inscription-scolaire/' QUERY_STRING '' REMOTE_ADDR '78.193.132.195' REMOTE_USER '159' REQUEST_METHOD 'POST' REQUEST_URI '/parsifal-en-cours/inscription-scolaire/' SCRIPT_NAME '' SERVER_NAME 'wcs' SERVER_PORT '9920' SERVER_PROTOCOL 'HTTP/1.0' uwsgi.node b'wcs' uwsgi.version b'2.0.19.1-debian' wsgi.errors <_io.TextIOWrapper name=2 mode='w' encoding='UTF-8'> wsgi.file_wrapper <built-in function uwsgi_sendfile> wsgi.input <uwsgi._Input object at 0x7f66cdc32cb0> wsgi.multiprocess True wsgi.multithread False wsgi.run_once False wsgi.url_scheme 'https' wsgi.version (1, 0)
Reproductible en cliquant sur la définition de la source de donnée :
https://passerelle-parsifal.test.entrouvert.org/toulouse-maelis/test/read-schools-for-address-and-level?year=&id_street=&num=
{ "data" : null, "err" : "Site-readSchoolForAdressAndLevel-soap:Server", "err_class" : "passerelle.utils.jsonresponse.APIError", "err_desc" : "E19 : La voie est obligatoire" }
Fichiers
Demandes liées
Révisions associées
toulouse-maelis: add wrapping of zeep errors inside APIError (#73411)
toulouse-maelis: manage XML soap fault detail content (#73411)
Revert "toulouse-maelis: manage XML soap fault detail content (#73411)"
This reverts commit 932907630bf8d57cc2b6edfdeaf0c9ee19fac6ce.
Revert "toulouse-maelis: add wrapping of zeep errors inside APIError (#73411)"
This reverts commit 47e0b644a55fb458178e92a0b3333917b7bfd8d6.
Revert "toulouse-maelis: reproduce wcs trace on SoapError (#73411)"
This reverts commit d1a4921ea7f1a09d2ccfe7d4c99be721dc92ce00.
toulouse-maelis: add wrapping of zeep errors inside APIError (#73411)
toulouse-maelis: update soap error in functests (#73411)
Historique
Mis à jour par Nicolas Roche il y a plus d'un an
En local, je déduis que c'est la SOAPError qui n'est pas interceptée
POST https://demo-toulouse.sigec.fr/maelisws-toulouse-recette/services/SiteService (=> 500)
Mis à jour par Nicolas Roche il y a plus d'un an
- Lié à Development #65763: soap: activer api_error=True sur tous les utilisateurs de soap_client() ajouté
Mis à jour par Nicolas Roche il y a plus d'un an
- Fichier 0003-toulouse-maelis-manage-XML-soap-fault-detail-content.patch 0003-toulouse-maelis-manage-XML-soap-fault-detail-content.patch ajouté
- Fichier 0002-toulouse-maelis-add-wrapping-of-zeep-errors-inside-A.patch 0002-toulouse-maelis-add-wrapping-of-zeep-errors-inside-A.patch ajouté
- Fichier 0001-toulouse-maelis-reproduce-wcs-trace-on-SoapError-734.patch 0001-toulouse-maelis-reproduce-wcs-trace-on-SoapError-734.patch ajouté
- Statut changé de Nouveau à Solution proposée
- Patch proposed changé de Non à Oui
0001: J'ai isolé l'erreur.
La correction est donnée dans https://dev.entrouvert.org/issues/65763
Je ne l'ai d'abord pas compris, ce qui a donné suite à beaucoup de tickets pour valider les paramètres issus des référentiels, dont on aurait pu se passer, mais qui a quand même permis de clarifier certains messages d'erreurs).
En l'activant (0002), on fait crasher l'encodeur json sur du contenu XML qui apparaît dans un champ "detail" de l'exception.
Ce que répare 0003, en prenant en compte le nouveau champ "detail".
Mis à jour par Robot Gitea il y a plus d'un an
- Statut changé de Solution proposée à En cours
Nicolas Roche (nroche) a lié une pull request sur Gitea concernant cette demande :
- URL : https://gitea.entrouvert.org/entrouvert/passerelle/pulls/37
- Titre : soap: activer api_error=True sur Parsifal (#73411)
- Modifications : https://gitea.entrouvert.org/entrouvert/passerelle/pulls/37/files
Mis à jour par Benjamin Dauvergne il y a plus d'un an
- Statut changé de En cours à Solution proposée
Mis à jour par Robot Gitea il y a plus d'un an
Nicolas Roche (nroche) a ouvert une pull request sur Gitea concernant cette demande :
- URL : https://gitea.entrouvert.org/entrouvert/passerelle/pulls/45
- Titre : toulouse-maelis: update soap error in functests (#73567)
- Modifications : https://gitea.entrouvert.org/entrouvert/passerelle/pulls/45/files
Mis à jour par Nicolas Roche il y a plus d'un an
- Lié à Bug #73567: toulouse-maelis: mise à jour des tests fonctionnels ajouté
Mis à jour par Nicolas Roche il y a plus d'un an
Je ne comprends pas pourquoi la PR 45 est arrivée ici (en plus que dans #73567).
Peut-être parce que j'ai fait référence à ce ticket dans le message de la PR ?
Mis à jour par Benjamin Dauvergne il y a plus d'un an
La PR 45 est référencée parce que tu références ce ticket dans un commentaire. Je préférerais que tu revert et qu'on corrige cette histoire de dict modifié.
Mis à jour par Robot Gitea il y a plus d'un an
- Statut changé de Solution proposée à Solution validée
Benjamin Dauvergne (bdauvergne) a approuvé une pull request sur Gitea concernant cette demande :
Mis à jour par Benjamin Dauvergne il y a plus d'un an
- Statut changé de Solution validée à Solution proposée
Mis à jour par Nicolas Roche il y a plus d'un an
- Statut changé de Solution proposée à En cours
3 premier patchs poussés par erreur et revertés :
commit 6bb7231a7f363ef16c5c0923982dea5a3484f073 (HEAD -> main) Author: Nicolas ROCHE <nroche@entrouvert.com> Date: Wed Jan 18 17:45:29 2023 +0100 Revert "toulouse-maelis: reproduce wcs trace on SoapError (#73411)" This reverts commit d1a4921ea7f1a09d2ccfe7d4c99be721dc92ce00. commit 9cd4059284f15f40728c562cda4093f55295b752 Author: Nicolas ROCHE <nroche@entrouvert.com> Date: Wed Jan 18 17:45:19 2023 +0100 Revert "toulouse-maelis: add wrapping of zeep errors inside APIError (#73411)" This reverts commit 47e0b644a55fb458178e92a0b3333917b7bfd8d6. commit 250100fb83fae42eb47769a0758de39582eb909e Author: Nicolas ROCHE <nroche@entrouvert.com> Date: Wed Jan 18 17:44:52 2023 +0100 Revert "toulouse-maelis: manage XML soap fault detail content (#73411)" This reverts commit 932907630bf8d57cc2b6edfdeaf0c9ee19fac6ce.
Mis à jour par Benjamin Dauvergne il y a environ un an
Il faudrait refaire une PR (en rebasant la branche) là elle n'est plus lisible.
Mis à jour par Robot Gitea il y a environ un an
Nicolas Roche (nroche) a ouvert une pull request sur Gitea concernant cette demande :
- URL : https://gitea.entrouvert.org/entrouvert/passerelle/pulls/96
- Titre : soap: activer api_error=True sur Parsifal (#73411)
- Modifications : https://gitea.entrouvert.org/entrouvert/passerelle/pulls/96/files
Mis à jour par Robot Gitea il y a environ un an
- Statut changé de Solution proposée à Solution validée
Serghei Mihai (smihai) a approuvé une pull request sur Gitea concernant cette demande :
Mis à jour par Robot Gitea il y a environ un an
- Statut changé de Solution validée à Résolu (à déployer)
Nicolas Roche (nroche) a mergé une pull request sur Gitea concernant cette demande :
- URL : https://gitea.entrouvert.org/entrouvert/passerelle/pulls/96
- Titre : soap: activer api_error=True sur Parsifal (#73411)
- Modifications : https://gitea.entrouvert.org/entrouvert/passerelle/pulls/96/files
Mis à jour par Transition automatique il y a environ un an
- Statut changé de Résolu (à déployer) à Solution déployée
toulouse-maelis: reproduce wcs trace on SoapError (#73411)