From 9d5b05ca534c602c5ba447ffa648fe5423e9b1c3 Mon Sep 17 00:00:00 2001
From: "J.-S. Caux" <J.S.Caux@uva.nl>
Date: Sun, 25 Oct 2020 09:53:52 +0100
Subject: [PATCH] Turn apimail.serializers into package

---
 apimail/api/serializers/__init__.py           | 18 +++++
 apimail/api/serializers/account.py            | 23 ++++++
 apimail/api/serializers/attachment.py         | 15 ++++
 .../composed_message.py}                      | 74 ++-----------------
 apimail/api/serializers/event.py              | 13 ++++
 apimail/api/serializers/stored_message.py     | 28 +++++++
 apimail/api/serializers/tag.py                | 17 +++++
 7 files changed, 121 insertions(+), 67 deletions(-)
 create mode 100644 apimail/api/serializers/__init__.py
 create mode 100644 apimail/api/serializers/account.py
 create mode 100644 apimail/api/serializers/attachment.py
 rename apimail/api/{serializers.py => serializers/composed_message.py} (63%)
 create mode 100644 apimail/api/serializers/event.py
 create mode 100644 apimail/api/serializers/stored_message.py
 create mode 100644 apimail/api/serializers/tag.py

diff --git a/apimail/api/serializers/__init__.py b/apimail/api/serializers/__init__.py
new file mode 100644
index 000000000..391f37d44
--- /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 000000000..00afcb6f0
--- /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 000000000..ece11c5a3
--- /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 2bdfd8693..705b46219 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 000000000..0423a287c
--- /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 000000000..830c191c3
--- /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 000000000..ef29f390a
--- /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)
-- 
GitLab