From c129b3aa31867d876431e88bdf04e37a176b3d65 Mon Sep 17 00:00:00 2001 From: Hugo Osvaldo Barrera Date: Tue, 5 Feb 2019 13:52:48 -0300 Subject: [PATCH] Improve some error handling --- django_mercadopago/models.py | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/django_mercadopago/models.py b/django_mercadopago/models.py index 509163b..80b69e5 100644 --- a/django_mercadopago/models.py +++ b/django_mercadopago/models.py @@ -1,3 +1,4 @@ +import json import logging import requests @@ -273,7 +274,7 @@ def poll_status(self): response = response.json() if response['results']: - logger.info('Polled for %s. Creating Payment', self.pk) + logger.info('Polled for %s. Found a Payment.', self.pk) return Payment.objects.create_or_update_from_raw_data( response['results'][-1] ) @@ -327,6 +328,10 @@ def create_or_update_from_raw_data(self, raw_data): mp_id=raw_data['id'], defaults=payment_data, ) + if created: + logger.info('New payment created.') + else: + logger.info('Payment already registered locally, nothing created.') if payment.status == 'approved' and \ payment.status_detail == 'accredited': @@ -477,7 +482,14 @@ def process(self): return mercadopago_service = self.owner.service - raw_data = mercadopago_service.get_payment_info(self.resource_id) + try: + raw_data = mercadopago_service.get_payment_info(self.resource_id) + except json.JSONDecodeError: + # XXX: Actually, we need to write our own client that returns the + # real error (at least status code). + self.status = Notification.STATUS_ERROR + self.save() + return if raw_data['status'] != 200: logger.warning(