aboutsummaryrefslogtreecommitdiffstats
path: root/pydis_site/apps/api/serializers.py
diff options
context:
space:
mode:
authorGravatar Joseph <[email protected]>2020-02-02 22:03:00 +0000
committerGravatar GitHub <[email protected]>2020-02-02 22:03:00 +0000
commitfa7c2aa1cef7e18face5d531fcc51a5f39bf2e3e (patch)
treee7a6417bfe02c2d6f15789f098de422fd6f70dde /pydis_site/apps/api/serializers.py
parentMake newlines visible in deleted messages (diff)
parentCreate CODEOWNERS (diff)
Merge branch 'master' into deleted-messages-visible-line-endings
Diffstat (limited to 'pydis_site/apps/api/serializers.py')
-rw-r--r--pydis_site/apps/api/serializers.py27
1 files changed, 25 insertions, 2 deletions
diff --git a/pydis_site/apps/api/serializers.py b/pydis_site/apps/api/serializers.py
index 8a605612..0d1a4684 100644
--- a/pydis_site/apps/api/serializers.py
+++ b/pydis_site/apps/api/serializers.py
@@ -1,6 +1,6 @@
"""Converters from Django models to data interchange formats and back."""
-
from rest_framework.serializers import ModelSerializer, PrimaryKeyRelatedField, ValidationError
+from rest_framework.validators import UniqueTogetherValidator
from rest_framework_bulk import BulkSerializerMixin
from .models import (
@@ -8,6 +8,7 @@ from .models import (
DocumentationLink, Infraction,
LogEntry, MessageDeletionContext,
Nomination, OffTopicChannelName,
+ OffensiveMessage,
Reminder, Role,
Tag, User
)
@@ -49,7 +50,8 @@ class DeletedMessageSerializer(ModelSerializer):
fields = (
'id', 'author',
'channel_id', 'content',
- 'embeds', 'deletion_context'
+ 'embeds', 'deletion_context',
+ 'attachments'
)
@@ -105,11 +107,22 @@ class InfractionSerializer(ModelSerializer):
fields = (
'id', 'inserted_at', 'expires_at', 'active', 'user', 'actor', 'type', 'reason', 'hidden'
)
+ validators = [
+ UniqueTogetherValidator(
+ queryset=Infraction.objects.filter(active=True),
+ fields=['user', 'type'],
+ message='This user already has an active infraction of this type.',
+ )
+ ]
def validate(self, attrs: dict) -> dict:
"""Validate data constraints for the given data and abort if it is invalid."""
infr_type = attrs.get('type')
+ active = attrs.get('active')
+ if active and infr_type in ('note', 'warning', 'kick'):
+ raise ValidationError({'active': [f'{infr_type} infractions cannot be active.']})
+
expires_at = attrs.get('expires_at')
if expires_at and infr_type in ('kick', 'warning'):
raise ValidationError({'expires_at': [f'{infr_type} infractions cannot expire.']})
@@ -236,3 +249,13 @@ class NominationSerializer(ModelSerializer):
fields = (
'id', 'active', 'actor', 'reason', 'user',
'inserted_at', 'end_reason', 'ended_at')
+
+
+class OffensiveMessageSerializer(ModelSerializer):
+ """A class providing (de-)serialization of `OffensiveMessage` instances."""
+
+ class Meta:
+ """Metadata defined for the Django REST Framework."""
+
+ model = OffensiveMessage
+ fields = ('id', 'channel_id', 'delete_date')