SciPost Code Repository

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

Improve apimail models and serializers

parent 88f9ec3c
No related branches found
No related tags found
No related merge requests found
...@@ -16,4 +16,4 @@ class EventSerializer(serializers.ModelSerializer): ...@@ -16,4 +16,4 @@ class EventSerializer(serializers.ModelSerializer):
class StoredMessageSerializer(serializers.ModelSerializer): class StoredMessageSerializer(serializers.ModelSerializer):
class Meta: class Meta:
model = StoredMessage model = StoredMessage
fields = ['uuid', 'data',] fields = ['uuid', 'data', 'datetimestamp']
...@@ -2,6 +2,7 @@ __copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)" ...@@ -2,6 +2,7 @@ __copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)"
__license__ = "AGPL v3" __license__ = "AGPL v3"
from email.utils import parsedate_to_datetime
from tempfile import TemporaryFile from tempfile import TemporaryFile
import requests import requests
...@@ -34,7 +35,9 @@ class Command(BaseCommand): ...@@ -34,7 +35,9 @@ class Command(BaseCommand):
if not StoredMessage.objects.filter( if not StoredMessage.objects.filter(
data__contains={'message-id': orphan.data['message']['headers']['message-id']} data__contains={'message-id': orphan.data['message']['headers']['message-id']}
).exists(): ).exists():
sm = StoredMessage.objects.create(data=response) sm = StoredMessage.objects.create(
data=response,
datetimestamp=parsedate_to_datetime(response['Date']))
orphan.stored_message = sm orphan.stored_message = sm
orphan.save() orphan.save()
# Now deal with attachments # Now deal with attachments
......
...@@ -9,17 +9,17 @@ class StoredMessageQuerySet(models.QuerySet): ...@@ -9,17 +9,17 @@ class StoredMessageQuerySet(models.QuerySet):
""" """
All StoredMessage querysets are always filtered for the user. 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. 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() return self.none()
elif request.user.is_superuser or request.user.is_admin: elif user.is_superuser or user.is_admin:
return self return self
emails = [request.user.email,] if request.user.email else [] emails = [user.email,] if user.email else []
if request.user.contributor: if user.contributor:
for pe in request.user.contributor.profile.emails.all(): for pe in user.contributor.profile.emails.all():
emails.append(pe.email) emails.append(pe.email)
return self.filter_for_emails(emails=emails) return self.filter_for_emails(emails=emails)
......
# 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),
),
]
...@@ -38,5 +38,8 @@ class Event(models.Model): ...@@ -38,5 +38,8 @@ class Event(models.Model):
on_delete=models.CASCADE on_delete=models.CASCADE
) )
class Meta:
ordering = ['-data__timestamp',]
def get_absolute_url(self): def get_absolute_url(self):
return reverse('apimail:event_detail', kwargs={'uuid': self.uuid}) return reverse('apimail:event_detail', kwargs={'uuid': self.uuid})
...@@ -7,6 +7,7 @@ import uuid as uuid_lib ...@@ -7,6 +7,7 @@ import uuid as uuid_lib
from django.contrib.postgres.fields import JSONField from django.contrib.postgres.fields import JSONField
from django.db import models from django.db import models
from django.urls import reverse from django.urls import reverse
from django.utils import timezone
from scipost.storage import SecureFileStorage from scipost.storage import SecureFileStorage
...@@ -23,11 +24,12 @@ class StoredMessage(models.Model): ...@@ -23,11 +24,12 @@ class StoredMessage(models.Model):
default=uuid_lib.uuid4, default=uuid_lib.uuid4,
editable=False) editable=False)
data = JSONField(default=dict) data = JSONField(default=dict)
datetimestamp = models.DateTimeField(default=timezone.now)
objects = StoredMessageQuerySet.as_manager() objects = StoredMessageQuerySet.as_manager()
class Meta: class Meta:
ordering = ['-data__Date',] ordering = ['-datetimestamp',]
def get_absolute_url(self): def get_absolute_url(self):
return reverse('apimail:stored_message_detail', kwargs={'uuid': self.uuid}) return reverse('apimail:stored_message_detail', kwargs={'uuid': self.uuid})
......
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