Library list endpoint
This commit is contained in:
parent
e82a53da35
commit
fe7ca088c5
|
@ -3,6 +3,20 @@ import django_filters
|
||||||
from . import models
|
from . import models
|
||||||
|
|
||||||
|
|
||||||
|
class LibraryFilter(django_filters.FilterSet):
|
||||||
|
approved = django_filters.BooleanFilter('following__approved')
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = models.Library
|
||||||
|
fields = {
|
||||||
|
'approved': ['exact'],
|
||||||
|
'federation_enabled': ['exact'],
|
||||||
|
'download_files': ['exact'],
|
||||||
|
'autoimport': ['exact'],
|
||||||
|
'tracks_count': ['exact'],
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
class FollowFilter(django_filters.FilterSet):
|
class FollowFilter(django_filters.FilterSet):
|
||||||
ordering = django_filters.OrderingFilter(
|
ordering = django_filters.OrderingFilter(
|
||||||
# tuple-mapping retains order
|
# tuple-mapping retains order
|
||||||
|
|
|
@ -137,6 +137,26 @@ class LibraryActorSerializer(ActorSerializer):
|
||||||
return validated_data
|
return validated_data
|
||||||
|
|
||||||
|
|
||||||
|
class APILibrarySerializer(serializers.ModelSerializer):
|
||||||
|
actor = APIActorSerializer
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = models.Library
|
||||||
|
fields = [
|
||||||
|
'actor',
|
||||||
|
'autoimport',
|
||||||
|
'federation_enabled',
|
||||||
|
'download_files',
|
||||||
|
'tracks_count',
|
||||||
|
'url',
|
||||||
|
'uuid',
|
||||||
|
'creation_date',
|
||||||
|
'follow',
|
||||||
|
'fetched_date',
|
||||||
|
'modification_date',
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
class APILibraryCreateSerializer(serializers.ModelSerializer):
|
class APILibraryCreateSerializer(serializers.ModelSerializer):
|
||||||
actor = serializers.URLField()
|
actor = serializers.URLField()
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,7 @@ from django.db import transaction
|
||||||
from django.http import HttpResponse
|
from django.http import HttpResponse
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
|
|
||||||
|
from rest_framework import mixins
|
||||||
from rest_framework import permissions as rest_permissions
|
from rest_framework import permissions as rest_permissions
|
||||||
from rest_framework import response
|
from rest_framework import response
|
||||||
from rest_framework import views
|
from rest_framework import views
|
||||||
|
@ -164,9 +165,22 @@ class MusicFilesViewSet(FederationMixin, viewsets.GenericViewSet):
|
||||||
return response.Response(data)
|
return response.Response(data)
|
||||||
|
|
||||||
|
|
||||||
class LibraryViewSet(viewsets.GenericViewSet):
|
class LibraryViewSet(
|
||||||
|
mixins.ListModelMixin,
|
||||||
|
viewsets.GenericViewSet):
|
||||||
permission_classes = [rest_permissions.DjangoModelPermissions]
|
permission_classes = [rest_permissions.DjangoModelPermissions]
|
||||||
queryset = models.Library.objects.all()
|
queryset = models.Library.objects.all().select_related(
|
||||||
|
'actor',
|
||||||
|
'follow',
|
||||||
|
)
|
||||||
|
filter_class = filters.LibraryFilter
|
||||||
|
serializer_class = serializers.APILibrarySerializer
|
||||||
|
ordering_fields = (
|
||||||
|
'id',
|
||||||
|
'creation_date',
|
||||||
|
'fetched_date',
|
||||||
|
'actor__domain',
|
||||||
|
)
|
||||||
|
|
||||||
@list_route(methods=['get'])
|
@list_route(methods=['get'])
|
||||||
def scan(self, request, *args, **kwargs):
|
def scan(self, request, *args, **kwargs):
|
||||||
|
|
|
@ -261,3 +261,17 @@ def test_can_list_system_actor_followers(factories, superuser_api_client):
|
||||||
assert response.data['results'] == [
|
assert response.data['results'] == [
|
||||||
serializers.APIFollowSerializer(follow2).data
|
serializers.APIFollowSerializer(follow2).data
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
def test_can_list_libraries(factories, superuser_api_client):
|
||||||
|
library1 = factories['federation.Library']()
|
||||||
|
library2 = factories['federation.Library']()
|
||||||
|
|
||||||
|
url = reverse('api:v1:federation:libraries-list')
|
||||||
|
response = superuser_api_client.get(url)
|
||||||
|
|
||||||
|
assert response.status_code == 200
|
||||||
|
assert response.data['results'] == [
|
||||||
|
serializers.APILibrarySerializer(library1).data,
|
||||||
|
serializers.APILibrarySerializer(library2).data,
|
||||||
|
]
|
||||||
|
|
Loading…
Reference in New Issue