funkwhale/api/funkwhale_api/music/filters.py

99 wiersze
3.2 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 search
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
class ArtistFilter(filters.FilterSet):
2018-06-09 13:36:16 +00:00
q = fields.SearchFilter(search_fields=["name"])
playable = filters.BooleanFilter(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
}
def filter_playable(self, queryset, name, value):
actor = utils.get_actor_from_request(self.request)
return queryset.playable_by(actor, value)
class TrackFilter(filters.FilterSet):
2018-06-09 13:36:16 +00:00
q = fields.SearchFilter(search_fields=["title", "album__title", "artist__name"])
playable = filters.BooleanFilter(name="_", method="filter_playable")
class Meta:
model = models.Track
fields = {
2018-06-09 13:36:16 +00:00
"title": ["exact", "iexact", "startswith", "icontains"],
"playable": ["exact"],
2018-06-09 13:36:16 +00:00
"artist": ["exact"],
"album": ["exact"],
2018-12-04 14:13:37 +00:00
"license": ["exact"],
}
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(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)
class AlbumFilter(filters.FilterSet):
playable = filters.BooleanFilter(name="_", method="filter_playable")
2018-06-09 13:36:16 +00:00
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)