SciPost Code Repository

Skip to content
Snippets Groups Projects
Commit 8b56d471 authored by Jean-Sébastien Caux's avatar Jean-Sébastien Caux
Browse files

Make mailgun_get_events more robust

parent 7dedfcfc
No related branches found
No related tags found
No related merge requests found
...@@ -25,15 +25,19 @@ def get_and_save_events(url=None, domain_name=None): ...@@ -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, url if url else "https://api.eu.mailgun.net/v3/%s/events" % domain_name,
auth=("api", settings.MAILGUN_API_KEY) auth=("api", settings.MAILGUN_API_KEY)
).json() ).json()
events = response['items'] try:
for item in events: events = response['items']
if not Event.objects.filter(data__timestamp=item['timestamp'], for item in events:
data__id=item['id']).exists(): if not Event.objects.filter(data__timestamp=item['timestamp'],
Event.objects.create(data=item) data__id=item['id']).exists():
info = {'nitems': len(events)} Event.objects.create(data=item)
if 'paging' in response: info = {'nitems': len(events)}
info['paging'] = response['paging'] if 'paging' in response:
return info 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): class Command(BaseCommand):
...@@ -45,7 +49,7 @@ class Command(BaseCommand): ...@@ -45,7 +49,7 @@ class Command(BaseCommand):
def handle(self, *args, **kwargs): def handle(self, *args, **kwargs):
for domain in Domain.objects.active(): 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 ctr = 1 # Safety: ensure no runaway requests
while ctr < 100 and info['nitems'] > 0: while ctr < 100 and info['nitems'] > 0:
info = get_and_save_events(url=info['paging']['next']) info = get_and_save_events(url=info['paging']['next'])
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment