forked from rc/aircox
code quality
This commit is contained in:
@ -1,22 +1,17 @@
|
||||
from collections import deque
|
||||
import datetime
|
||||
|
||||
from django.utils import timezone as tz
|
||||
from django.utils.decorators import method_decorator
|
||||
from django.views.decorators.cache import cache_page
|
||||
from django.views.generic import ListView
|
||||
from django.utils import timezone as tz
|
||||
|
||||
from rest_framework.generics import ListAPIView
|
||||
from rest_framework import viewsets
|
||||
from rest_framework.decorators import action
|
||||
|
||||
from ..models import Diffusion, Log, StaticPage
|
||||
from ..serializers import LogInfo, LogInfoSerializer
|
||||
from .base import BaseView, BaseAPIView
|
||||
from .mixins import GetDateMixin, AttachedToMixin
|
||||
from .base import BaseAPIView, BaseView
|
||||
from .mixins import AttachedToMixin, GetDateMixin
|
||||
|
||||
|
||||
__all__ = ['LogListMixin', 'LogListView']
|
||||
__all__ = ["LogListMixin", "LogListView"]
|
||||
|
||||
|
||||
class LogListMixin(GetDateMixin):
|
||||
@ -32,21 +27,39 @@ class LogListMixin(GetDateMixin):
|
||||
def get_queryset(self):
|
||||
# only get logs for tracks: log for diffusion will be retrieved
|
||||
# by the diffusions' queryset.
|
||||
qs = super().get_queryset().on_air().filter(track__isnull=False) \
|
||||
.filter(date__lte=tz.now())
|
||||
return qs.date(self.date) if self.date is not None else \
|
||||
qs.after(self.min_date) if self.min_date is not None else qs
|
||||
qs = (
|
||||
super()
|
||||
.get_queryset()
|
||||
.on_air()
|
||||
.filter(track__isnull=False)
|
||||
.filter(date__lte=tz.now())
|
||||
)
|
||||
return (
|
||||
qs.date(self.date)
|
||||
if self.date is not None
|
||||
else qs.after(self.min_date)
|
||||
if self.min_date is not None
|
||||
else qs
|
||||
)
|
||||
|
||||
def get_diffusions_queryset(self):
|
||||
qs = Diffusion.objects.station(self.station).on_air() \
|
||||
.filter(start__lte=tz.now())
|
||||
return qs.date(self.date) if self.date is not None else \
|
||||
qs.after(self.min_date) if self.min_date is not None else qs
|
||||
qs = (
|
||||
Diffusion.objects.station(self.station)
|
||||
.on_air()
|
||||
.filter(start__lte=tz.now())
|
||||
)
|
||||
return (
|
||||
qs.date(self.date)
|
||||
if self.date is not None
|
||||
else qs.after(self.min_date)
|
||||
if self.min_date is not None
|
||||
else qs
|
||||
)
|
||||
|
||||
def get_object_list(self, logs, full=False):
|
||||
"""
|
||||
Return diffusions merged to the provided logs iterable. If
|
||||
`full`, sort items by date without merging.
|
||||
"""Return diffusions merged to the provided logs iterable.
|
||||
|
||||
If `full`, sort items by date without merging.
|
||||
"""
|
||||
diffs = self.get_diffusions_queryset()
|
||||
if self.request.user.is_staff and full:
|
||||
@ -55,11 +68,10 @@ class LogListMixin(GetDateMixin):
|
||||
|
||||
|
||||
class LogListView(AttachedToMixin, BaseView, LogListMixin, ListView):
|
||||
"""
|
||||
Return list of logs for the provided date (from `kwargs` or
|
||||
`request.GET`, defaults to today).
|
||||
"""
|
||||
redirect_date_url = 'log-list'
|
||||
"""Return list of logs for the provided date (from `kwargs` or
|
||||
`request.GET`, defaults to today)."""
|
||||
|
||||
redirect_date_url = "log-list"
|
||||
has_filters = True
|
||||
attach_to_value = StaticPage.ATTACH_TO_LOGS
|
||||
|
||||
@ -72,24 +84,28 @@ class LogListView(AttachedToMixin, BaseView, LogListMixin, ListView):
|
||||
# `super()...` must be called before updating kwargs, in order
|
||||
# to get `self.object_list`
|
||||
kwargs = super().get_context_data(**kwargs)
|
||||
kwargs.update({
|
||||
'date': self.date,
|
||||
'dates': (today - datetime.timedelta(days=i) for i in range(0, 7)),
|
||||
'object_list': self.get_object_list(self.object_list),
|
||||
})
|
||||
kwargs.update(
|
||||
{
|
||||
"date": self.date,
|
||||
"dates": (
|
||||
today - datetime.timedelta(days=i) for i in range(0, 7)
|
||||
),
|
||||
"object_list": self.get_object_list(self.object_list),
|
||||
}
|
||||
)
|
||||
return kwargs
|
||||
|
||||
|
||||
# Logs are accessible through API only with this list view
|
||||
class LogListAPIView(LogListMixin, BaseAPIView, ListAPIView):
|
||||
"""
|
||||
Return logs list, including diffusions. By default return logs of
|
||||
the last 30 minutes.
|
||||
"""Return logs list, including diffusions. By default return logs of the
|
||||
last 30 minutes.
|
||||
|
||||
Available GET parameters:
|
||||
- "date": return logs for a specified date (
|
||||
- "full": (staff user only) don't merge diffusion and logs
|
||||
"""
|
||||
|
||||
serializer_class = LogInfoSerializer
|
||||
queryset = Log.objects.all()
|
||||
|
||||
@ -107,7 +123,7 @@ class LogListAPIView(LogListMixin, BaseAPIView, ListAPIView):
|
||||
return [LogInfo(obj) for obj in super().get_object_list(logs, full)]
|
||||
|
||||
def get_serializer(self, queryset, *args, **kwargs):
|
||||
full = bool(self.request.GET.get('full'))
|
||||
return super().get_serializer(self.get_object_list(queryset, full),
|
||||
*args, **kwargs)
|
||||
|
||||
full = bool(self.request.GET.get("full"))
|
||||
return super().get_serializer(
|
||||
self.get_object_list(queryset, full), *args, **kwargs
|
||||
)
|
||||
|
Reference in New Issue
Block a user