Project

General

Profile

Development #57790

appels http payfip pour le badge "à payer"

Added by Frédéric Péters 5 days ago. Updated 2 days ago.

Status:
Solution validée
Priority:
Normal
Target version:
-
Start date:
12 Oct 2021
Due date:
% Done:

0%

Estimated time:
Patch proposed:
Yes
Planning:
No

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


Files


Related issues

Related to EOPayment - Development #57838: Encapsuler les erreurs de transportSolution validée13 Oct 2021

Actions

History

#1

Updated by Benjamin Dauvergne 4 days ago

#2

Updated by Benjamin Dauvergne 4 days ago

  • Assignee set to Benjamin Dauvergne
#3

Updated by Benjamin Dauvergne 4 days ago

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

Updated by Benjamin Dauvergne 4 days ago

  • Status changed from Solution proposée to Solution validée
#5

Updated by Benjamin Dauvergne 4 days ago

  • Status changed from Solution validée to Solution proposée
#7

Updated by Frédéric Péters 2 days ago

  • Status changed from Solution proposée to Solution validée

Also available in: Atom PDF