コード例 #1
0
class ManageUploadFilterSet(filters.FilterSet):
    q = fields.SearchFilter(search_fields=[
        "track__title",
        "track__album__title",
        "track__artist__name",
        "source",
    ])

    class Meta:
        model = music_models.Upload
        fields = ["q", "track__album", "track__artist", "track"]
コード例 #2
0
ファイル: filters.py プロジェクト: sbignell/funkwhale
class AlbumFilter(filters.FilterSet):
    playable = filters.BooleanFilter(name="_", method="filter_playable")
    q = fields.SearchFilter(search_fields=["title", "artist__name" "source"])

    class Meta:
        model = models.Album
        fields = ["playable", "q", "artist"]

    def filter_playable(self, queryset, name, value):
        actor = utils.get_actor_from_request(self.request)
        return queryset.playable_by(actor, value)
コード例 #3
0
ファイル: filters.py プロジェクト: mayhem/funkwhale
class LibraryFilter(filters.FilterSet):
    q = fields.SearchFilter(search_fields=["name"], )
    scope = common_filters.ActorScopeFilter(
        actor_field="actor",
        distinct=True,
        library_field="pk",
    )

    class Meta:
        model = models.Library
        fields = ["privacy_level"]
コード例 #4
0
class TrackFavoriteFilter(moderation_filters.HiddenContentFilterSet):
    q = fields.SearchFilter(
        search_fields=["track__title", "track__artist__name", "track__album__title"]
    )
    scope = common_filters.ActorScopeFilter(actor_field="user__actor", distinct=True)

    class Meta:
        model = models.TrackFavorite
        fields = ["user", "q", "scope"]
        hidden_content_fields_mapping = moderation_filters.USER_FILTER_CONFIG[
            "TRACK_FAVORITE"
        ]
コード例 #5
0
class ManageInvitationFilterSet(filters.FilterSet):
    q = fields.SearchFilter(search_fields=["owner__username", "code", "owner__email"])
    is_open = filters.BooleanFilter(method="filter_is_open")

    class Meta:
        model = users_models.Invitation
        fields = ["q", "is_open"]

    def filter_is_open(self, queryset, field_name, value):
        if value is None:
            return queryset
        return queryset.open(value)
コード例 #6
0
ファイル: filters.py プロジェクト: mayhem/funkwhale
class TagFilter(filters.FilterSet):
    q = fields.SearchFilter(search_fields=["name"])
    ordering = django_filters.OrderingFilter(
        fields=(
            ("name", "name"),
            ("creation_date", "creation_date"),
            ("__size", "length"),
        )
    )

    class Meta:
        model = models.Tag
        fields = {"name": ["exact", "startswith"]}
コード例 #7
0
ファイル: filters.py プロジェクト: sbignell/funkwhale
class ArtistFilter(filters.FilterSet):
    q = fields.SearchFilter(search_fields=["name"])
    playable = filters.BooleanFilter(name="_", method="filter_playable")

    class Meta:
        model = models.Artist
        fields = {
            "name": ["exact", "iexact", "startswith", "icontains"],
            "playable": "exact",
        }

    def filter_playable(self, queryset, name, value):
        actor = utils.get_actor_from_request(self.request)
        return queryset.playable_by(actor, value)
コード例 #8
0
class ChannelFilter(moderation_filters.HiddenContentFilterSet):
    q = fields.SearchFilter(search_fields=[
        "artist__name", "actor__summary", "actor__preferred_username"
    ])
    tag = TAG_FILTER
    scope = common_filters.ActorScopeFilter(actor_field="attributed_to",
                                            distinct=True)
    subscribed = django_filters.BooleanFilter(field_name="_",
                                              method="filter_subscribed")
    external = django_filters.BooleanFilter(field_name="_",
                                            method="filter_external")
    ordering = django_filters.OrderingFilter(
        # tuple-mapping retains order
        fields=(
            ("creation_date", "creation_date"),
            ("artist__modification_date", "modification_date"),
            ("?", "random"),
        ))

    class Meta:
        model = models.Channel
        fields = []
        hidden_content_fields_mapping = moderation_filters.USER_FILTER_CONFIG[
            "CHANNEL"]

    def filter_subscribed(self, queryset, name, value):
        if not self.request.user.is_authenticated:
            return queryset.none()

        emitted_follows = self.request.user.actor.emitted_follows.exclude(
            target__channel__isnull=True)

        query = Q(actor__in=emitted_follows.values_list("target", flat=True))

        if value is True:
            return queryset.filter(query)
        else:
            return queryset.exclude(query)

    def filter_external(self, queryset, name, value):
        query = Q(
            attributed_to=actors.get_service_actor(),
            actor__preferred_username__startswith="rssfeed-",
        )
        if value is True:
            queryset = queryset.filter(query)
        if value is False:
            queryset = queryset.exclude(query)

        return queryset
コード例 #9
0
class ManageUserFilterSet(filters.FilterSet):
    q = fields.SearchFilter(search_fields=["username", "email", "name"])

    class Meta:
        model = users_models.User
        fields = [
            "q",
            "is_active",
            "privacy_level",
            "is_staff",
            "is_superuser",
            "permission_upload",
            "permission_library",
            "permission_settings",
            "permission_federation",
        ]
コード例 #10
0
ファイル: filters.py プロジェクト: mayhem/funkwhale
class ArtistFilter(
        RelatedFilterSet,
        LibraryFilterSet,
        audio_filters.IncludeChannelsFilterSet,
        moderation_filters.HiddenContentFilterSet,
):

    q = fields.SearchFilter(search_fields=["name"],
                            fts_search_fields=["body_text"])
    playable = filters.BooleanFilter(field_name="_", method="filter_playable")
    has_albums = filters.BooleanFilter(field_name="_",
                                       method="filter_has_albums")
    tag = TAG_FILTER
    scope = common_filters.ActorScopeFilter(
        actor_field="tracks__uploads__library__actor",
        distinct=True,
        library_field="tracks__uploads__library",
    )
    ordering = django_filters.OrderingFilter(fields=(
        ("id", "id"),
        ("name", "name"),
        ("creation_date", "creation_date"),
        ("modification_date", "modification_date"),
        ("?", "random"),
        ("tag_matches", "related"),
    ))

    class Meta:
        model = models.Artist
        fields = {
            "name": ["exact", "iexact", "startswith", "icontains"],
            "mbid": ["exact"],
        }
        hidden_content_fields_mapping = moderation_filters.USER_FILTER_CONFIG[
            "ARTIST"]
        include_channels_field = "channel"
        library_filter_field = "track__artist"

    def filter_playable(self, queryset, name, value):
        actor = utils.get_actor_from_request(self.request)
        return queryset.playable_by(actor, value).distinct()

    def filter_has_albums(self, queryset, name, value):
        if value is True:
            return queryset.filter(albums__isnull=False)
        else:
            return queryset.filter(albums__isnull=True)
コード例 #11
0
class FollowFilter(django_filters.FilterSet):
    pending = django_filters.CharFilter(method="filter_pending")
    ordering = django_filters.OrderingFilter(
        # tuple-mapping retains order
        fields=(
            ("creation_date", "creation_date"),
            ("modification_date", "modification_date"),
        ))
    q = fields.SearchFilter(
        search_fields=["actor__domain", "actor__preferred_username"])

    class Meta:
        model = models.Follow
        fields = ["approved", "pending", "q"]

    def filter_pending(self, queryset, field_name, value):
        if value.lower() in ["true", "1", "yes"]:
            queryset = queryset.filter(approved__isnull=True)
        return queryset
コード例 #12
0
ファイル: filters.py プロジェクト: mayhem/funkwhale
class AlbumFilter(
        RelatedFilterSet,
        ChannelFilterSet,
        LibraryFilterSet,
        audio_filters.IncludeChannelsFilterSet,
        moderation_filters.HiddenContentFilterSet,
):
    playable = filters.BooleanFilter(field_name="_", method="filter_playable")
    q = fields.SearchFilter(
        search_fields=["title", "artist__name"],
        fts_search_fields=["body_text", "artist__body_text"],
    )
    tag = TAG_FILTER
    scope = common_filters.ActorScopeFilter(
        actor_field="tracks__uploads__library__actor",
        distinct=True,
        library_field="tracks__uploads__library",
    )

    ordering = django_filters.OrderingFilter(fields=(
        ("creation_date", "creation_date"),
        ("release_date", "release_date"),
        ("title", "title"),
        ("artist__modification_date", "artist__modification_date"),
        ("?", "random"),
        ("tag_matches", "related"),
    ))

    class Meta:
        model = models.Album
        fields = ["artist", "mbid"]
        hidden_content_fields_mapping = moderation_filters.USER_FILTER_CONFIG[
            "ALBUM"]
        include_channels_field = "artist__channel"
        channel_filter_field = "track__album"
        library_filter_field = "track__album"

    def filter_playable(self, queryset, name, value):
        actor = utils.get_actor_from_request(self.request)
        return queryset.playable_by(actor, value)
コード例 #13
0
ファイル: filters.py プロジェクト: mayhem/funkwhale
class ManageInstancePolicyFilterSet(filters.FilterSet):
    q = fields.SearchFilter(
        search_fields=[
            "summary",
            "target_domain__name",
            "target_actor__username",
            "target_actor__domain__name",
        ]
    )

    target_domain = filters.CharFilter("target_domain__name")
    target_account_domain = filters.CharFilter("target_actor__domain__name")
    target_account_username = filters.CharFilter("target_actor__preferred_username")

    class Meta:
        model = moderation_models.InstancePolicy
        fields = [
            "block_all",
            "silence_activity",
            "silence_notifications",
            "reject_media",
        ]
コード例 #14
0
ファイル: filters.py プロジェクト: BeaverTek/funkwhale
class TrackFilter(
    ChannelFilterSet,
    LibraryFilterSet,
    audio_filters.IncludeChannelsFilterSet,
    moderation_filters.HiddenContentFilterSet,
):
    q = fields.SearchFilter(
        search_fields=["title", "album__title", "artist__name"],
        fts_search_fields=["body_text", "artist__body_text", "album__body_text"],
    )
    playable = filters.BooleanFilter(field_name="_", method="filter_playable")
    tag = TAG_FILTER
    id = common_filters.MultipleQueryFilter(coerce=int)
    scope = common_filters.ActorScopeFilter(
        actor_field="uploads__library__actor", distinct=True
    )

    class Meta:
        model = models.Track
        fields = {
            "title": ["exact", "iexact", "startswith", "icontains"],
            "playable": ["exact"],
            "id": ["exact"],
            "artist": ["exact"],
            "album": ["exact"],
            "license": ["exact"],
            "scope": ["exact"],
            "mbid": ["exact"],
        }
        hidden_content_fields_mapping = moderation_filters.USER_FILTER_CONFIG["TRACK"]
        include_channels_field = "artist__channel"
        channel_filter_field = "track"
        library_filter_field = "track"

    def filter_playable(self, queryset, name, value):
        actor = utils.get_actor_from_request(self.request)
        return queryset.playable_by(actor, value).distinct()
コード例 #15
0
class ManageTagFilterSet(filters.FilterSet):
    q = fields.SearchFilter(search_fields=["name"])

    class Meta:
        model = tags_models.Tag
        fields = ["q"]