diff --git a/apimail/api/serializers/__init__.py b/apimail/api/serializers/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..391f37d44581d74b3b352422f1299bffdc05869e --- /dev/null +++ b/apimail/api/serializers/__init__.py @@ -0,0 +1,18 @@ +__copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)" +__license__ = "AGPL v3" + + +from .account import EmailAccountSerializer, EmailAccountAccessSerializer + +from .attachment import AttachmentFileSerializer + +from .event import EventSerializer + +from .tag import UserTagSerializer + +from .composed_message import ( + ComposedMessageAPIResponseSerializer, + ComposedMessageSerializer, +) + +from .stored_message import StoredMessageSerializer diff --git a/apimail/api/serializers/account.py b/apimail/api/serializers/account.py new file mode 100644 index 0000000000000000000000000000000000000000..00afcb6f07a776bb5fd2420e0b19809d2e772019 --- /dev/null +++ b/apimail/api/serializers/account.py @@ -0,0 +1,23 @@ +__copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)" +__license__ = "AGPL v3" + + +from rest_framework import serializers + +from ...models import EmailAccount, EmailAccountAccess + + +class EmailAccountSerializer(serializers.ModelSerializer): + class Meta: + model = EmailAccount + fields = ['pk', 'name', 'email', 'description'] + + +class EmailAccountAccessSerializer(serializers.ModelSerializer): + """For request.user, return list of email account accesses.""" + account = EmailAccountSerializer() + rights = serializers.CharField(source='get_rights_display') + + class Meta: + model = EmailAccountAccess + fields = ['account', 'rights', 'date_from', 'date_until'] diff --git a/apimail/api/serializers/attachment.py b/apimail/api/serializers/attachment.py new file mode 100644 index 0000000000000000000000000000000000000000..ece11c5a34ba00bc9bc5c7277ab7353ac3b398e1 --- /dev/null +++ b/apimail/api/serializers/attachment.py @@ -0,0 +1,15 @@ +__copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)" +__license__ = "AGPL v3" + + +from rest_framework import serializers + +from ...models import AttachmentFile + + +class AttachmentFileSerializer(serializers.ModelSerializer): + link = serializers.CharField(source='get_absolute_url', read_only=True) + + class Meta: + model = AttachmentFile + fields = ['uuid', 'data', 'file', 'link'] diff --git a/apimail/api/serializers.py b/apimail/api/serializers/composed_message.py similarity index 63% rename from apimail/api/serializers.py rename to apimail/api/serializers/composed_message.py index 2bdfd86930940d087ea76c114cd26dd264dde244..705b4621932473ee0692668e81962fe7517ecf47 100644 --- a/apimail/api/serializers.py +++ b/apimail/api/serializers/composed_message.py @@ -2,41 +2,17 @@ __copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)" __license__ = "AGPL v3" -from django.urls import reverse from rest_framework import serializers from rest_framework.exceptions import NotFound -from ..models import ( - AttachmentFile, - EmailAccount, EmailAccountAccess, +from ...models import ( ComposedMessage, ComposedMessageAPIResponse, - Event, - StoredMessage, - UserTag) - - -class EmailAccountSerializer(serializers.ModelSerializer): - class Meta: - model = EmailAccount - fields = ['pk', 'name', 'email', 'description'] - - -class EmailAccountAccessSerializer(serializers.ModelSerializer): - """For request.user, return list of email account accesses.""" - account = EmailAccountSerializer() - rights = serializers.CharField(source='get_rights_display') - - class Meta: - model = EmailAccountAccess - fields = ['account', 'rights', 'date_from', 'date_until'] - - -class AttachmentFileSerializer(serializers.ModelSerializer): - link = serializers.CharField(source='get_absolute_url', read_only=True) - - class Meta: - model = AttachmentFile - fields = ['uuid', 'data', 'file', 'link'] + AttachmentFile, +) +from ..serializers import ( + ComposedMessageAPIResponseSerializer, + AttachmentFileSerializer +) class ComposedMessageAPIResponseSerializer(serializers.ModelSerializer): @@ -110,39 +86,3 @@ class ComposedMessageSerializer(serializers.ModelSerializer): 'The attachment file with uuid %s was not found. ' 'Your message was saved as a draft (not sent).' % att_uuid)) return cm - - -class EventSerializer(serializers.ModelSerializer): - class Meta: - model = Event - fields = ['uuid', 'data',] - - -class UserTagSerializer(serializers.ModelSerializer): - class Meta: - model = UserTag - fields = ['pk', 'user', 'label', 'unicode_symbol', 'variant'] - - def get_queryset(self): - user = self.context['request'].user - return UserTag.objects.filter(user=user) - - -class StoredMessageSerializer(serializers.ModelSerializer): - attachment_files = AttachmentFileSerializer(many=True) - event_set = EventSerializer(many=True) - read = serializers.SerializerMethodField() - tags = serializers.SerializerMethodField() - - def get_read(self, obj): - return self.context['request'].user in obj.read_by.all() - - def get_tags(self, obj): - return UserTagSerializer( - obj.tags.filter(user=self.context['request'].user), - many=True - ).data - - class Meta: - model = StoredMessage - fields = ['uuid', 'data', 'datetimestamp', 'attachment_files', 'event_set', 'read', 'tags'] diff --git a/apimail/api/serializers/event.py b/apimail/api/serializers/event.py new file mode 100644 index 0000000000000000000000000000000000000000..0423a287c6a47e650a5e972d92fbced1d51258b9 --- /dev/null +++ b/apimail/api/serializers/event.py @@ -0,0 +1,13 @@ +__copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)" +__license__ = "AGPL v3" + + +from rest_framework import serializers + +from ...models import Event + + +class EventSerializer(serializers.ModelSerializer): + class Meta: + model = Event + fields = ['uuid', 'data',] diff --git a/apimail/api/serializers/stored_message.py b/apimail/api/serializers/stored_message.py new file mode 100644 index 0000000000000000000000000000000000000000..830c191c38fa255c2e89f605d2562d62e52f9c2d --- /dev/null +++ b/apimail/api/serializers/stored_message.py @@ -0,0 +1,28 @@ +__copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)" +__license__ = "AGPL v3" + + +from rest_framework import serializers + +from ...models import StoredMessage +from ..serializers import EventSerializer, AttachmentFileSerializer, UserTagSerializer + + +class StoredMessageSerializer(serializers.ModelSerializer): + attachment_files = AttachmentFileSerializer(many=True) + event_set = EventSerializer(many=True) + read = serializers.SerializerMethodField() + tags = serializers.SerializerMethodField() + + def get_read(self, obj): + return self.context['request'].user in obj.read_by.all() + + def get_tags(self, obj): + return UserTagSerializer( + obj.tags.filter(user=self.context['request'].user), + many=True + ).data + + class Meta: + model = StoredMessage + fields = ['uuid', 'data', 'datetimestamp', 'attachment_files', 'event_set', 'read', 'tags'] diff --git a/apimail/api/serializers/tag.py b/apimail/api/serializers/tag.py new file mode 100644 index 0000000000000000000000000000000000000000..ef29f390ae0aa515b81c5befca7d94bde400a0a5 --- /dev/null +++ b/apimail/api/serializers/tag.py @@ -0,0 +1,17 @@ +__copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)" +__license__ = "AGPL v3" + + +from rest_framework import serializers + +from ...models import UserTag + + +class UserTagSerializer(serializers.ModelSerializer): + class Meta: + model = UserTag + fields = ['pk', 'user', 'label', 'unicode_symbol', 'variant'] + + def get_queryset(self): + user = self.context['request'].user + return UserTag.objects.filter(user=user)