diff options
| author | 2019-01-01 21:15:29 +0100 | |
|---|---|---|
| committer | 2019-01-01 21:15:29 +0100 | |
| commit | a6e81b6757b43c68ee749006086035c3e8033f15 (patch) | |
| tree | b9fbfe6a0daac1884c83ad60476cc34a7b5d7971 /api/serializers.py | |
| parent | apply stash (diff) | |
| parent | Merge pull request #156 from python-discord/django-beautify (diff) | |
Merge branch 'django' into django+add-role-viewset
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 | 
