diff options
Diffstat (limited to 'api/serializers.py')
-rw-r--r-- | api/serializers.py | 52 |
1 files changed, 44 insertions, 8 deletions
diff --git a/api/serializers.py b/api/serializers.py index f8d15bbf..612ce5b4 100644 --- a/api/serializers.py +++ b/api/serializers.py @@ -1,12 +1,12 @@ -from rest_framework.serializers import ModelSerializer, PrimaryKeyRelatedField +from rest_framework.serializers import ModelSerializer, PrimaryKeyRelatedField, ValidationError from rest_framework_bulk import BulkSerializerMixin from .models import ( - DocumentationLink, - Member, OffTopicChannelName, + DocumentationLink, Infraction, + OffTopicChannelName, Role, SnakeFact, SnakeIdiom, SnakeName, - SpecialSnake, Tag + SpecialSnake, Tag, User ) @@ -16,6 +16,42 @@ class DocumentationLinkSerializer(ModelSerializer): fields = ('package', 'base_url', 'inventory_url') +class InfractionSerializer(ModelSerializer): + class Meta: + model = Infraction + fields = ( + 'id', 'inserted_at', 'expires_at', 'active', 'user', 'actor', 'type', 'reason', 'hidden' + ) + + def validate(self, attrs): + infr_type = attrs.get('type') + + 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.']}) + + hidden = attrs.get('hidden') + if hidden and infr_type in ('superstar',): + raise ValidationError({'hidden': [f'{infr_type} infractions cannot be hidden.']}) + + return attrs + + +class ExpandedInfractionSerializer(InfractionSerializer): + def to_representation(self, instance): + ret = super().to_representation(instance) + + user = User.objects.get(id=ret['user']) + user_data = UserSerializer(user).data + ret['user'] = user_data + + actor = User.objects.get(id=ret['actor']) + actor_data = UserSerializer(actor).data + ret['actor'] = actor_data + + return ret + + class OffTopicChannelNameSerializer(ModelSerializer): class Meta: model = OffTopicChannelName @@ -61,10 +97,10 @@ class TagSerializer(ModelSerializer): fields = ('title', 'embed') -class MemberSerializer(BulkSerializerMixin, ModelSerializer): - roles = PrimaryKeyRelatedField(many=True, queryset=Role.objects.all()) +class UserSerializer(BulkSerializerMixin, ModelSerializer): + roles = PrimaryKeyRelatedField(many=True, queryset=Role.objects.all(), required=False) class Meta: - model = Member - fields = ('id', 'avatar_hash', 'name', 'discriminator', 'roles') + model = User + fields = ('id', 'avatar_hash', 'name', 'discriminator', 'roles', 'in_guild') depth = 1 |