aircox/aircox/views/base.py
2023-11-28 02:16:40 +01:00

64 lines
1.9 KiB
Python

from django.http import HttpResponseRedirect
from django.urls import reverse
from django.views.generic.base import ContextMixin, TemplateResponseMixin
__all__ = ("BaseView", "BaseAPIView")
class BaseView(TemplateResponseMixin, ContextMixin):
header_template_name = "aircox/widgets/header.html"
related_count = 7
@property
def station(self):
return self.request.station
# def get_queryset(self):
# return super().get_queryset().station(self.station)
def get_related_queryset(self):
"""Return a queryset of related pages or None."""
return None
def get_related_url(self):
"""Return an url to the list of related pages."""
return None
def get_page(self):
return None
def get_context_data(self, **kwargs):
kwargs.setdefault("station", self.station)
kwargs.setdefault("page", self.get_page())
kwargs.setdefault("header_template_name", self.header_template_name)
if "audio_streams" not in kwargs:
kwargs["audio_streams"] = self.station.streams
if "model" not in kwargs:
model = getattr(self, "model", None) or hasattr(self, "object") and type(self.object)
kwargs["model"] = model
page = kwargs.get("page")
if page:
kwargs["title"] = page.display_title
kwargs["cover"] = page.cover and page.cover.url
return super().get_context_data(**kwargs)
def dispatch(self, *args, **kwargs):
if not self.request.station:
return HttpResponseRedirect(reverse("errors-no-station"))
return super().dispatch(*args, **kwargs)
# FIXME: rename to sth like [Base]?StationAPIView/Mixin
class BaseAPIView:
@property
def station(self):
return self.request.station
def get_queryset(self):
return super().get_queryset().station(self.station)