From bd0c52a2a6f99e76787126826f29aa78f967656e 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 ddd6eaf..9f203ce 100644 --- a/django_mercadopago/models.py +++ b/django_mercadopago/models.py @@ -1,3 +1,4 @@ +import json import logging import requests @@ -226,7 +227,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] ) @@ -323,6 +324,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': @@ -473,7 +478,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(