code quality

This commit is contained in:
bkfox
2023-03-13 17:47:00 +01:00
parent 934817da8a
commit 112770eddf
162 changed files with 4798 additions and 4069 deletions

View File

@ -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
)