2018-03-07 21:34:16 +00:00
|
|
|
from django_filters import rest_framework as filters
|
2017-12-12 21:04:39 +00:00
|
|
|
|
2018-04-22 13:11:01 +00:00
|
|
|
from funkwhale_api.common import fields
|
2018-09-06 18:35:02 +00:00
|
|
|
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
|
2018-09-06 18:35:02 +00:00
|
|
|
from . import utils
|
2017-12-12 21:04:39 +00:00
|
|
|
|
|
|
|
|
2018-07-09 20:47:55 +00:00
|
|
|
class ArtistFilter(filters.FilterSet):
|
2018-06-09 13:36:16 +00:00
|
|
|
q = fields.SearchFilter(search_fields=["name"])
|
2019-01-11 11:03:06 +00:00
|
|
|
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"],
|
2018-09-06 18:35:02 +00:00
|
|
|
"playable": "exact",
|
2017-12-12 21:04:39 +00:00
|
|
|
}
|
2018-03-07 21:34:16 +00:00
|
|
|
|
2018-09-06 18:35:02 +00:00
|
|
|
def filter_playable(self, queryset, name, value):
|
|
|
|
actor = utils.get_actor_from_request(self.request)
|
|
|
|
return queryset.playable_by(actor, value)
|
2018-07-09 20:47:55 +00:00
|
|
|
|
2018-03-07 21:34:16 +00:00
|
|
|
|
2018-05-22 20:22:53 +00:00
|
|
|
class TrackFilter(filters.FilterSet):
|
2018-06-09 13:36:16 +00:00
|
|
|
q = fields.SearchFilter(search_fields=["title", "album__title", "artist__name"])
|
2019-01-11 11:03:06 +00:00
|
|
|
playable = filters.BooleanFilter(field_name="_", method="filter_playable")
|
2018-05-22 20:22:53 +00:00
|
|
|
|
|
|
|
class Meta:
|
|
|
|
model = models.Track
|
|
|
|
fields = {
|
2018-06-09 13:36:16 +00:00
|
|
|
"title": ["exact", "iexact", "startswith", "icontains"],
|
2018-09-06 18:35:02 +00:00
|
|
|
"playable": ["exact"],
|
2018-06-09 13:36:16 +00:00
|
|
|
"artist": ["exact"],
|
|
|
|
"album": ["exact"],
|
2018-12-04 14:13:37 +00:00
|
|
|
"license": ["exact"],
|
2018-05-22 20:22:53 +00:00
|
|
|
}
|
|
|
|
|
2018-09-06 18:35:02 +00:00
|
|
|
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):
|
2018-09-06 18:35:02 +00:00
|
|
|
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")
|
2019-01-11 11:03:06 +00:00
|
|
|
playable = filters.BooleanFilter(field_name="_", method="filter_playable")
|
2018-09-06 18:35:02 +00:00
|
|
|
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"},
|
|
|
|
},
|
|
|
|
)
|
|
|
|
)
|
2018-04-22 13:11:01 +00:00
|
|
|
|
|
|
|
class Meta:
|
2018-09-22 12:29:30 +00:00
|
|
|
model = models.Upload
|
2018-09-06 18:35:02 +00:00
|
|
|
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)
|
2018-04-22 13:11:01 +00:00
|
|
|
|
|
|
|
|
2018-07-09 20:47:55 +00:00
|
|
|
class AlbumFilter(filters.FilterSet):
|
2019-01-11 11:03:06 +00:00
|
|
|
playable = filters.BooleanFilter(field_name="_", method="filter_playable")
|
2019-02-13 07:46:38 +00:00
|
|
|
q = fields.SearchFilter(search_fields=["title", "artist__name"])
|
2018-03-07 21:34:16 +00:00
|
|
|
|
|
|
|
class Meta:
|
|
|
|
model = models.Album
|
2018-09-06 18:35:02 +00:00
|
|
|
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)
|