diff --git a/apimail/api/serializers.py b/apimail/api/serializers.py index ccb347fb8ac9e3da5a69765474e182dcdb01920f..7f644606ea08e7e5166e64b48337e33c7dcd7f30 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 7b0b5f1dd42a3760d5a3ce179d7107b052bebb07..aeaa48c203337a330551f18f205c655483affc25 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 63e1eac127c75cbb92b66ab8bb90b9d6d0c16507..3f6d006567de0151b98a711826cd51675b3b39b0 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 0000000000000000000000000000000000000000..b1819eb09c90d1858703288e1d8261bdcd6c206f --- /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 183d54009496fd5b7441b04a8ff5e2ae10e9b641..c830e26aa4166636820e82ed613c830d53dc89c5 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 1f5e01b9a7efc9db0497d8a11f114a5f76d8923b..d9ccade77780f552056f74269bd6f8b92dce8af3 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})