From 88d024f81140b8d70a4359b21413ff98db23aa98 Mon Sep 17 00:00:00 2001 From: "J.-S. Caux" <J.S.Caux@uva.nl> Date: Thu, 14 Nov 2019 21:26:23 +0100 Subject: [PATCH] Improve apimail models and serializers --- apimail/api/serializers.py | 2 +- .../commands/mailgun_get_stored_messages.py | 5 +++- apimail/managers.py | 12 ++++----- apimail/migrations/0004_auto_20191114_2115.py | 27 +++++++++++++++++++ apimail/models/event.py | 3 +++ apimail/models/stored_message.py | 4 ++- 6 files changed, 44 insertions(+), 9 deletions(-) create mode 100644 apimail/migrations/0004_auto_20191114_2115.py diff --git a/apimail/api/serializers.py b/apimail/api/serializers.py index ccb347fb8..7f644606e 100644 --- a/apimail/api/serializers.py +++ b/apimail/api/serializers.py @@ -16,4 +16,4 @@ class EventSerializer(serializers.ModelSerializer): class StoredMessageSerializer(serializers.ModelSerializer): class Meta: model = StoredMessage - fields = ['uuid', 'data',] + fields = ['uuid', 'data', 'datetimestamp'] diff --git a/apimail/management/commands/mailgun_get_stored_messages.py b/apimail/management/commands/mailgun_get_stored_messages.py index 7b0b5f1dd..aeaa48c20 100644 --- a/apimail/management/commands/mailgun_get_stored_messages.py +++ b/apimail/management/commands/mailgun_get_stored_messages.py @@ -2,6 +2,7 @@ __copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)" __license__ = "AGPL v3" +from email.utils import parsedate_to_datetime from tempfile import TemporaryFile import requests @@ -34,7 +35,9 @@ class Command(BaseCommand): if not StoredMessage.objects.filter( data__contains={'message-id': orphan.data['message']['headers']['message-id']} ).exists(): - sm = StoredMessage.objects.create(data=response) + sm = StoredMessage.objects.create( + data=response, + datetimestamp=parsedate_to_datetime(response['Date'])) orphan.stored_message = sm orphan.save() # Now deal with attachments diff --git a/apimail/managers.py b/apimail/managers.py index 63e1eac12..3f6d00656 100644 --- a/apimail/managers.py +++ b/apimail/managers.py @@ -9,17 +9,17 @@ class StoredMessageQuerySet(models.QuerySet): """ All StoredMessage querysets are always filtered for the user. """ - def filter_for_user(self, request): + def filter_for_user(self, user): """ Either su or staff, or user's email addresses overlap with sender/recipients. """ - if not request.user.is_authenticated: + if not user.is_authenticated: return self.none() - elif request.user.is_superuser or request.user.is_admin: + elif user.is_superuser or user.is_admin: return self - emails = [request.user.email,] if request.user.email else [] - if request.user.contributor: - for pe in request.user.contributor.profile.emails.all(): + emails = [user.email,] if user.email else [] + if user.contributor: + for pe in user.contributor.profile.emails.all(): emails.append(pe.email) return self.filter_for_emails(emails=emails) diff --git a/apimail/migrations/0004_auto_20191114_2115.py b/apimail/migrations/0004_auto_20191114_2115.py new file mode 100644 index 000000000..b1819eb09 --- /dev/null +++ b/apimail/migrations/0004_auto_20191114_2115.py @@ -0,0 +1,27 @@ +# Generated by Django 2.1.8 on 2019-11-14 20:15 + +from django.db import migrations, models +import django.utils.timezone + + +class Migration(migrations.Migration): + + dependencies = [ + ('apimail', '0003_auto_20191113_2226'), + ] + + operations = [ + migrations.AlterModelOptions( + name='event', + options={'ordering': ['-data__timestamp']}, + ), + migrations.AlterModelOptions( + name='storedmessage', + options={'ordering': ['-datetimestamp']}, + ), + migrations.AddField( + model_name='storedmessage', + name='datetimestamp', + field=models.DateTimeField(default=django.utils.timezone.now), + ), + ] diff --git a/apimail/models/event.py b/apimail/models/event.py index 183d54009..c830e26aa 100644 --- a/apimail/models/event.py +++ b/apimail/models/event.py @@ -38,5 +38,8 @@ class Event(models.Model): on_delete=models.CASCADE ) + class Meta: + ordering = ['-data__timestamp',] + def get_absolute_url(self): return reverse('apimail:event_detail', kwargs={'uuid': self.uuid}) diff --git a/apimail/models/stored_message.py b/apimail/models/stored_message.py index 1f5e01b9a..d9ccade77 100644 --- a/apimail/models/stored_message.py +++ b/apimail/models/stored_message.py @@ -7,6 +7,7 @@ import uuid as uuid_lib from django.contrib.postgres.fields import JSONField from django.db import models from django.urls import reverse +from django.utils import timezone from scipost.storage import SecureFileStorage @@ -23,11 +24,12 @@ class StoredMessage(models.Model): default=uuid_lib.uuid4, editable=False) data = JSONField(default=dict) + datetimestamp = models.DateTimeField(default=timezone.now) objects = StoredMessageQuerySet.as_manager() class Meta: - ordering = ['-data__Date',] + ordering = ['-datetimestamp',] def get_absolute_url(self): return reverse('apimail:stored_message_detail', kwargs={'uuid': self.uuid}) -- GitLab