funkwhale/api/funkwhale_api/music/filters.py

106 wiersze
3.8 KiB
Python
Czysty Zwykły widok Historia

from django_filters import rest_framework as filters
2017-12-12 21:04:39 +00:00
from funkwhale_api.common import fields
from funkwhale_api.common import filters as common_filters
from funkwhale_api.common import search
2019-02-14 09:49:06 +00:00
from funkwhale_api.moderation import filters as moderation_filters
2018-06-10 08:55:16 +00:00
2017-12-12 21:04:39 +00:00
from . import models
from . import utils
2017-12-12 21:04:39 +00:00
2019-02-14 09:49:06 +00:00
class ArtistFilter(moderation_filters.HiddenContentFilterSet):
2018-06-09 13:36:16 +00:00
q = fields.SearchFilter(search_fields=["name"])
playable = filters.BooleanFilter(field_name="_", method="filter_playable")
2017-12-12 21:04:39 +00:00
class Meta:
model = models.Artist
fields = {
2018-06-09 13:36:16 +00:00
"name": ["exact", "iexact", "startswith", "icontains"],
"playable": "exact",
2017-12-12 21:04:39 +00:00
}
2019-02-14 09:49:06 +00:00
hidden_content_fields_mapping = moderation_filters.USER_FILTER_CONFIG["ARTIST"]
def filter_playable(self, queryset, name, value):
actor = utils.get_actor_from_request(self.request)
return queryset.playable_by(actor, value)
2019-02-14 09:49:06 +00:00
class TrackFilter(moderation_filters.HiddenContentFilterSet):
2018-06-09 13:36:16 +00:00
q = fields.SearchFilter(search_fields=["title", "album__title", "artist__name"])
playable = filters.BooleanFilter(field_name="_", method="filter_playable")
id = common_filters.MultipleQueryFilter(coerce=int)
class Meta:
model = models.Track
fields = {
2018-06-09 13:36:16 +00:00
"title": ["exact", "iexact", "startswith", "icontains"],
"playable": ["exact"],
"id": ["exact"],
2018-06-09 13:36:16 +00:00
"artist": ["exact"],
"album": ["exact"],
2018-12-04 14:13:37 +00:00
"license": ["exact"],
}
2019-02-14 09:49:06 +00:00
hidden_content_fields_mapping = moderation_filters.USER_FILTER_CONFIG["TRACK"]
def filter_playable(self, queryset, name, value):
actor = utils.get_actor_from_request(self.request)
return queryset.playable_by(actor, value)
2018-09-22 12:29:30 +00:00
class UploadFilter(filters.FilterSet):
library = filters.CharFilter("library__uuid")
track = filters.UUIDFilter("track__uuid")
track_artist = filters.UUIDFilter("track__artist__uuid")
album_artist = filters.UUIDFilter("track__album__artist__uuid")
library = filters.UUIDFilter("library__uuid")
playable = filters.BooleanFilter(field_name="_", method="filter_playable")
q = fields.SmartSearchFilter(
config=search.SearchConfig(
search_fields={
"track_artist": {"to": "track__artist__name"},
"album_artist": {"to": "track__album__artist__name"},
"album": {"to": "track__album__title"},
"title": {"to": "track__title"},
},
filter_fields={
"artist": {"to": "track__artist__name__iexact"},
"mimetype": {"to": "mimetype"},
"album": {"to": "track__album__title__iexact"},
"title": {"to": "track__title__iexact"},
"status": {"to": "import_status"},
},
)
)
class Meta:
2018-09-22 12:29:30 +00:00
model = models.Upload
fields = [
"playable",
"import_status",
"mimetype",
"track",
"track_artist",
"album_artist",
"library",
"import_reference",
]
def filter_playable(self, queryset, name, value):
actor = utils.get_actor_from_request(self.request)
return queryset.playable_by(actor, value)
2019-02-14 09:49:06 +00:00
class AlbumFilter(moderation_filters.HiddenContentFilterSet):
playable = filters.BooleanFilter(field_name="_", method="filter_playable")
2019-02-13 07:46:38 +00:00
q = fields.SearchFilter(search_fields=["title", "artist__name"])
class Meta:
model = models.Album
fields = ["playable", "q", "artist"]
2019-02-14 09:49:06 +00:00
hidden_content_fields_mapping = moderation_filters.USER_FILTER_CONFIG["ALBUM"]
def filter_playable(self, queryset, name, value):
actor = utils.get_actor_from_request(self.request)
return queryset.playable_by(actor, value)