Skip to content
Snippets Groups Projects
serializers.py 2.36 KiB
Newer Older
  • Learn to ignore specific revisions
  • from funkwhale_api import plugins
    
    from funkwhale_api.activity import serializers as activity_serializers
    
    from funkwhale_api.common import utils
    
    Eliot Berriot's avatar
    Eliot Berriot committed
    from funkwhale_api.federation import serializers as federation_serializers
    
    from funkwhale_api.music import models as music_models
    
    from funkwhale_api.music.serializers import TrackActivitySerializer, TrackSerializer
    from funkwhale_api.users.serializers import UserActivitySerializer, UserBasicSerializer
    
    class ListeningActivitySerializer(activity_serializers.ModelSerializer):
        type = serializers.SerializerMethodField()
    
    Eliot Berriot's avatar
    Eliot Berriot committed
        object = TrackActivitySerializer(source="track")
        actor = UserActivitySerializer(source="user")
        published = serializers.DateTimeField(source="creation_date")
    
    
        class Meta:
            model = models.Listening
    
    Eliot Berriot's avatar
    Eliot Berriot committed
            fields = ["id", "local_id", "object", "type", "actor", "published"]
    
    
        def get_actor(self, obj):
            return UserActivitySerializer(obj.user).data
    
        def get_type(self, obj):
    
    Eliot Berriot's avatar
    Eliot Berriot committed
            return "Listen"
    
    class ListeningSerializer(serializers.ModelSerializer):
    
        track = TrackSerializer(read_only=True)
        user = UserBasicSerializer(read_only=True)
    
    Eliot Berriot's avatar
    Eliot Berriot committed
        actor = serializers.SerializerMethodField()
    
    
        class Meta:
            model = models.Listening
    
    Eliot Berriot's avatar
    Eliot Berriot committed
            fields = ("id", "user", "track", "creation_date", "actor")
    
    
        def create(self, validated_data):
            validated_data["user"] = self.context["user"]
    
            return super().create(validated_data)
    
    
    Eliot Berriot's avatar
    Eliot Berriot committed
        def get_actor(self, obj):
            actor = obj.user.actor
            if actor:
                return federation_serializers.APIActorSerializer(actor).data
    
    
    
    class ListeningWriteSerializer(serializers.ModelSerializer):
    
    Eliot Berriot's avatar
    Eliot Berriot committed
            fields = ("id", "user", "track", "creation_date")
    
    Eliot Berriot's avatar
    Eliot Berriot committed
            validated_data["user"] = self.context["user"]
    
            instance = super().create(validated_data)
            plugins_conf = getattr(self.context["request"], "plugins_conf", None)
            utils.on_commit(
                plugins.hooks.dispatch,
                "history.listening.created",
                listening=instance,
                plugins_conf=plugins_conf,
            )
            return instance
    
    
    
    class NowSerializer(serializers.Serializer):
        track = serializers.PrimaryKeyRelatedField(
            queryset=music_models.Track.objects.all()
        )