Development #57790
appels http payfip pour le badge "à payer"
0%
Description
Vu via cette erreur,
File "combo/public/views.py", line 657, in menu_badges badge = cell.get_badge(context) File "combo/apps/lingo/models.py", line 1080, in get_badge items = BasketItem.get_items_to_be_paid(context['request'].user) File "combo/apps/lingo/models.py", line 647, in get_items_to_be_paid transaction.poll_backend() File "combo/apps/lingo/models.py", line 1019, in poll_backend response = self.eopayment.payment_status(self.order_id, transaction_date=self.start_date) File "__init__.py", line 245, in payment_status return self.backend.payment_status(transaction_id=transaction_id, **kwargs) File "eopayment/payfip_ws.py", line 290, in payment_status response = self.payfip.get_info_paiement(idop) File "eopayment/payfip_ws.py", line 160, in get_info_paiement idOp=idop) File "eopayment/payfip_ws.py", line 130, in _perform return getattr(self.client.service, operation)(RequestType(**kwargs)) File "zeep/proxy.py", line 42, in __call__ self._op_name, args, kwargs) File "zeep/wsdl/bindings/soap.py", line 124, in send options['address'], envelope, http_headers) File "zeep/transports.py", line 95, in post_xml return self.post(address, message, headers) File "zeep/transports.py", line 67, in post timeout=self.operation_timeout) File "requests/sessions.py", line 581, in post return self.request('POST', url, data=data, json=json, **kwargs) File "requests/sessions.py", line 533, in request resp = self.send(prep, **send_kwargs) File "requests/sessions.py", line 646, in send r = adapter.send(request, **kwargs) File "requests/adapters.py", line 516, in send raise ConnectionError(e, request=request)
On ne devrait pas se trouver à faire cet appel pour l'affichage du badge.
Peut-être pour d'autres situations non plus, il faut faire le tour des appels à get_items_to_be_paid et voir.
Aussi ça le fait dans render() et ça a lieu dans l'affichage de la cellule panier qui est fait de manière synchrone (parce qu'on s'attend juste à devoir consulter la db).
Je dirais :
- is_relevant, appelé dans l'affichage synchrone, ne pas faire le polling
- get_badge, appel accessoire, ne pas faire le polling
- render, lever l'exception NothingInCache pour faire un rendu asynchrone de la cellule si jamais il y aurait un polling appelé; sur cette partie quelque chose de cet ordre peut-être :
@@ -253,7 +253,7 @@ class PaymentBackend(models.Model): def can_poll_backend(self): return self.eopayment.has_payment_status - def poll_backend(self, min_age=None, max_age=None): + def poll_backend(self, min_age=None, max_age=None, context=None): if not self.can_poll_backend(): return current_time = now() @@ -277,6 +277,8 @@ class PaymentBackend(models.Model): if not transaction: break last_pk = transaction.pk + if context and not context.get('synchronous'): + raise NothingInCacheException() transaction.poll_backend(ignore_errors=False)
(et passer le context)e
Fichiers
Demandes liées
Révisions associées
Historique
Mis à jour par Benjamin Dauvergne il y a plus de 2 ans
- Lié à Development #57838: Encapsuler les erreurs de transport ajouté
Mis à jour par Benjamin Dauvergne il y a plus de 2 ans
- Fichier 0001-lingo-poll-backend-during-asynchronous-rendering-577.patch 0001-lingo-poll-backend-during-asynchronous-rendering-577.patch ajouté
- Tracker changé de Bug à Development
- Statut changé de Nouveau à Solution proposée
- Patch proposed changé de Non à Oui
Le poll backend pointé n'était pas le bon (c'est celui qui est appelé en cron), mais ça va j'ai retrouvé mes petits, il y avait aussi LingoRecentTransactionsCell.get_transaction_queryset() à traiter de la même manière. Au niveau des tests ça m'a obligé à rajouter la fixture "synchronous_cells" dans certains tests pour ne pas avoir le rendu asynchrone.
Mis à jour par Benjamin Dauvergne il y a plus de 2 ans
- Statut changé de Solution proposée à Solution validée
Mis à jour par Benjamin Dauvergne il y a plus de 2 ans
- Statut changé de Solution validée à Solution proposée
Mis à jour par Benjamin Dauvergne il y a plus de 2 ans
- Fichier 0001-lingo-poll-backend-during-asynchronous-rendering-577.patch 0001-lingo-poll-backend-during-asynchronous-rendering-577.patch ajouté
Avec des tests plus évidents.
Mis à jour par Frédéric Péters il y a plus de 2 ans
- Statut changé de Solution proposée à Solution validée
Mis à jour par Benjamin Dauvergne il y a plus de 2 ans
- Statut changé de Solution validée à Résolu (à déployer)
commit f92b855774970b8590eca6904f2ac20b6335cdd6 Author: Benjamin Dauvergne <bdauvergne@entrouvert.com> Date: Wed Oct 13 19:34:59 2021 +0200 lingo: poll backend during asynchronous rendering (#57790)
Mis à jour par Frédéric Péters il y a plus de 2 ans
- Statut changé de Résolu (à déployer) à Solution déployée
lingo: poll backend during asynchronous rendering (#57790)