forked from rc/aircox
code quality
This commit is contained in:
@ -1,23 +1,27 @@
|
||||
from django_filters import rest_framework as filters
|
||||
from rest_framework import status, viewsets
|
||||
from rest_framework.decorators import action
|
||||
from rest_framework.permissions import IsAuthenticated
|
||||
from rest_framework.response import Response
|
||||
from django_filters import rest_framework as filters
|
||||
|
||||
from .models import Sound, Track
|
||||
from .serializers import SoundSerializer, admin
|
||||
from .views import BaseAPIView
|
||||
|
||||
|
||||
__all__ = ('SoundFilter', 'SoundViewSet', 'TrackFilter', 'TrackROViewSet',
|
||||
'UserSettingsViewSet')
|
||||
__all__ = (
|
||||
"SoundFilter",
|
||||
"SoundViewSet",
|
||||
"TrackFilter",
|
||||
"TrackROViewSet",
|
||||
"UserSettingsViewSet",
|
||||
)
|
||||
|
||||
|
||||
class SoundFilter(filters.FilterSet):
|
||||
station = filters.NumberFilter(field_name='program__station__id')
|
||||
program = filters.NumberFilter(field_name='program_id')
|
||||
episode = filters.NumberFilter(field_name='episode_id')
|
||||
search = filters.CharFilter(field_name='search', method='search_filter')
|
||||
station = filters.NumberFilter(field_name="program__station__id")
|
||||
program = filters.NumberFilter(field_name="program_id")
|
||||
episode = filters.NumberFilter(field_name="episode_id")
|
||||
search = filters.CharFilter(field_name="search", method="search_filter")
|
||||
|
||||
def search_filter(self, queryset, name, value):
|
||||
return queryset.search(value)
|
||||
@ -25,29 +29,30 @@ class SoundFilter(filters.FilterSet):
|
||||
|
||||
class SoundViewSet(BaseAPIView, viewsets.ModelViewSet):
|
||||
serializer_class = SoundSerializer
|
||||
queryset = Sound.objects.available().order_by('-pk')
|
||||
queryset = Sound.objects.available().order_by("-pk")
|
||||
filter_backends = (filters.DjangoFilterBackend,)
|
||||
filterset_class = SoundFilter
|
||||
|
||||
|
||||
# --- admin
|
||||
class TrackFilter(filters.FilterSet):
|
||||
artist = filters.CharFilter(field_name='artist', lookup_expr='icontains')
|
||||
album = filters.CharFilter(field_name='album', lookup_expr='icontains')
|
||||
title = filters.CharFilter(field_name='title', lookup_expr='icontains')
|
||||
artist = filters.CharFilter(field_name="artist", lookup_expr="icontains")
|
||||
album = filters.CharFilter(field_name="album", lookup_expr="icontains")
|
||||
title = filters.CharFilter(field_name="title", lookup_expr="icontains")
|
||||
|
||||
|
||||
class TrackROViewSet(viewsets.ReadOnlyModelViewSet):
|
||||
""" Track viewset used for auto completion """
|
||||
"""Track viewset used for auto completion."""
|
||||
|
||||
serializer_class = admin.TrackSerializer
|
||||
permission_classes = [IsAuthenticated]
|
||||
filter_backends = (filters.DjangoFilterBackend,)
|
||||
filterset_class = TrackFilter
|
||||
queryset = Track.objects.all()
|
||||
|
||||
@action(name='autocomplete', detail=False)
|
||||
@action(name="autocomplete", detail=False)
|
||||
def autocomplete(self, request):
|
||||
field = request.GET.get('field', None)
|
||||
field = request.GET.get("field", None)
|
||||
if field:
|
||||
queryset = self.filter_queryset(self.get_queryset())
|
||||
values = queryset.values_list(field, flat=True).distinct()
|
||||
@ -56,36 +61,38 @@ class TrackROViewSet(viewsets.ReadOnlyModelViewSet):
|
||||
|
||||
|
||||
class UserSettingsViewSet(viewsets.ViewSet):
|
||||
"""User's settings specific to aircox.
|
||||
|
||||
Allow only to create and edit user's own settings.
|
||||
"""
|
||||
User's settings specific to aircox. Allow only to create and edit
|
||||
user's own settings.
|
||||
"""
|
||||
|
||||
serializer_class = admin.UserSettingsSerializer
|
||||
permission_classes = [IsAuthenticated]
|
||||
|
||||
def get_serializer(self, instance=None, **kwargs):
|
||||
return self.serializer_class(
|
||||
instance=instance, context={'user': self.request.user},
|
||||
**kwargs)
|
||||
instance=instance, context={"user": self.request.user}, **kwargs
|
||||
)
|
||||
|
||||
@action(detail=False, methods=['GET'])
|
||||
@action(detail=False, methods=["GET"])
|
||||
def retrieve(self, request):
|
||||
user = self.request.user
|
||||
settings = getattr(user, 'aircox_settings', None)
|
||||
settings = getattr(user, "aircox_settings", None)
|
||||
data = settings and self.get_serializer(settings) or None
|
||||
return Response(data)
|
||||
|
||||
@action(detail=False, methods=['POST', 'PUT'])
|
||||
@action(detail=False, methods=["POST", "PUT"])
|
||||
def update(self, request):
|
||||
user = self.request.user
|
||||
settings = getattr(user, 'aircox_settings', None)
|
||||
settings = getattr(user, "aircox_settings", None)
|
||||
data = dict(request.data)
|
||||
data['user_id'] = self.request.user
|
||||
data["user_id"] = self.request.user
|
||||
serializer = self.get_serializer(instance=settings, data=request.data)
|
||||
if serializer.is_valid():
|
||||
serializer.save()
|
||||
return Response({'status': 'ok'})
|
||||
return Response({"status": "ok"})
|
||||
else:
|
||||
return Response({'errors': serializer.errors},
|
||||
status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
return Response(
|
||||
{"errors": serializer.errors},
|
||||
status=status.HTTP_400_BAD_REQUEST,
|
||||
)
|
||||
|
Reference in New Issue
Block a user