Projet

Général

Profil

Development #57790

appels http payfip pour le badge "à payer"

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

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
12 octobre 2021
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

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

Lié à EOPayment - Development #57838: Encapsuler les erreurs de transportFermé13 octobre 2021

Actions

Révisions associées

Révision f92b8557 (diff)
Ajouté par Benjamin Dauvergne il y a plus de 2 ans

lingo: poll backend during asynchronous rendering (#57790)

Historique

#1

Mis à jour par Benjamin Dauvergne il y a plus de 2 ans

#2

Mis à jour par Benjamin Dauvergne il y a plus de 2 ans

  • Assigné à mis à Benjamin Dauvergne
#3

Mis à jour par Benjamin Dauvergne il y a plus de 2 ans

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.

#4

Mis à jour par Benjamin Dauvergne il y a plus de 2 ans

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

Mis à jour par Benjamin Dauvergne il y a plus de 2 ans

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

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

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

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)
#9

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

Formats disponibles : Atom PDF