Skip to content
Snippets Groups Projects
api_serializers.py 1.76 KiB
Newer Older
  • Learn to ignore specific revisions
  • from rest_framework import serializers
    
    from funkwhale_api.common import serializers as common_serializers
    from funkwhale_api.music import models as music_models
    
    from . import serializers as federation_serializers
    from . import models
    
    
    class NestedLibraryFollowSerializer(serializers.ModelSerializer):
        class Meta:
            model = models.LibraryFollow
            fields = ["creation_date", "uuid", "fid", "approved", "modification_date"]
    
    
    class LibrarySerializer(serializers.ModelSerializer):
        actor = federation_serializers.APIActorSerializer()
        files_count = serializers.SerializerMethodField()
        follow = serializers.SerializerMethodField()
    
        class Meta:
            model = music_models.Library
            fields = [
                "fid",
                "uuid",
                "actor",
                "name",
                "description",
                "creation_date",
                "files_count",
                "privacy_level",
                "follow",
            ]
    
        def get_files_count(self, o):
            return max(getattr(o, "_files_count", 0), o.files_count)
    
        def get_follow(self, o):
            try:
                return NestedLibraryFollowSerializer(o._follows[0]).data
            except (AttributeError, IndexError):
                return None
    
    
    class LibraryFollowSerializer(serializers.ModelSerializer):
        target = common_serializers.RelatedField("uuid", LibrarySerializer(), required=True)
    
        class Meta:
            model = models.LibraryFollow
            fields = ["creation_date", "uuid", "target", "approved"]
            read_only_fields = ["uuid", "approved", "creation_date"]
    
        def validate_target(self, v):
            actor = self.context["actor"]
            if v.received_follows.filter(actor=actor).exists():
                raise serializers.ValidationError("You are already following this library")
            return v