From 8b56d471e9bf18785bd9215300f37fce23982e1c Mon Sep 17 00:00:00 2001
From: "J.-S. Caux" <J.S.Caux@uva.nl>
Date: Sat, 17 Oct 2020 11:37:36 +0200
Subject: [PATCH] Make mailgun_get_events more robust

---
 .../management/commands/mailgun_get_events.py | 24 +++++++++++--------
 1 file changed, 14 insertions(+), 10 deletions(-)

diff --git a/apimail/management/commands/mailgun_get_events.py b/apimail/management/commands/mailgun_get_events.py
index 5a96c6611..1b9a37e7c 100644
--- a/apimail/management/commands/mailgun_get_events.py
+++ b/apimail/management/commands/mailgun_get_events.py
@@ -25,15 +25,19 @@ def get_and_save_events(url=None, domain_name=None):
         url if url else "https://api.eu.mailgun.net/v3/%s/events" % domain_name,
         auth=("api", settings.MAILGUN_API_KEY)
     ).json()
-    events = response['items']
-    for item in events:
-        if not Event.objects.filter(data__timestamp=item['timestamp'],
-                                    data__id=item['id']).exists():
-            Event.objects.create(data=item)
-    info = {'nitems': len(events)}
-    if 'paging' in response:
-        info['paging'] = response['paging']
-    return info
+    try:
+        events = response['items']
+        for item in events:
+            if not Event.objects.filter(data__timestamp=item['timestamp'],
+                                        data__id=item['id']).exists():
+                Event.objects.create(data=item)
+        info = {'nitems': len(events)}
+        if 'paging' in response:
+            info['paging'] = response['paging']
+        return info
+    except KeyError:
+        print('No items found for domain %s\nresponse: %s' % (domain_name, response))
+    return {'nitems': 0}
 
 
 class Command(BaseCommand):
@@ -45,7 +49,7 @@ class Command(BaseCommand):
 
     def handle(self, *args, **kwargs):
         for domain in Domain.objects.active():
-            info = get_and_save_events(domain.name)
+            info = get_and_save_events(domain_name=domain.name)
             ctr = 1 # Safety: ensure no runaway requests
             while ctr < 100 and info['nitems'] > 0:
                 info = get_and_save_events(url=info['paging']['next'])
-- 
GitLab