Skip to content

Commit

Permalink
Staff-only url for report previews by version
Browse files Browse the repository at this point in the history
  • Loading branch information
GregKaleka committed Jan 28, 2025
1 parent 3d000ea commit e64f108
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 6 deletions.
6 changes: 6 additions & 0 deletions config/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@
PastReviewListView,
ScheduledReviewListView,
VersionDetail,
ReportPreviewView,
)

djdt_urls = []
Expand Down Expand Up @@ -182,6 +183,11 @@
VersionDetail.as_view(),
name="release-detail",
),
path(
"releases/<boostversionslug:version_slug>/report",
ReportPreviewView.as_view(),
name="release-report-preview",
),
path(
"donate/",
TemplateView.as_view(template_name="donate/donate.html"),
Expand Down
10 changes: 4 additions & 6 deletions libraries/mixins.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,12 +32,14 @@ def get_context_data(self, **kwargs):

class BoostVersionMixin:
def dispatch(self, request, *args, **kwargs):
self.set_extra_context(request)
return super().dispatch(request, *args, **kwargs)

def set_extra_context(self, request):
if not self.extra_context:
self.extra_context = {}

if not self.extra_context.get("current_version"):
self.extra_context["current_version"] = Version.objects.most_recent()

self.extra_context.update(
{
"version_str": self.kwargs.get("version_slug"),
Expand All @@ -52,23 +54,19 @@ def dispatch(self, request, *args, **kwargs):
self.extra_context["selected_version"] = get_object_or_404(
Version, slug=self.extra_context["version_str"]
)

version_path_kwargs = {}
# Only when the user uses master or develop do those versions to appear
if self.extra_context["version_str"] in [
MASTER_RELEASE_URL_PATH_STR,
DEVELOP_RELEASE_URL_PATH_STR,
]:
version_path_kwargs[f"allow_{self.extra_context['version_str']}"] = True

if self.request.resolver_match.view_name == "library-detail":
version_path_kwargs["flag_versions_without_library"] = get_object_or_404(
Library, slug=self.kwargs.get("library_slug")
)

self.extra_context["versions"] = Version.objects.get_dropdown_versions(
**version_path_kwargs
)
# here we hack extra_context into the request so we can access for cookie checks
request.extra_context = self.extra_context
return super().dispatch(request, *args, **kwargs)
20 changes: 20 additions & 0 deletions versions/views.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
from django.contrib.admin.views.decorators import staff_member_required
from django.db.models.query import QuerySet
from itertools import groupby
from operator import attrgetter

from django.db.models import Q, Count
from django.http import HttpResponse
from django.views import View
from django.views.generic import DetailView, TemplateView, ListView
from django.shortcuts import redirect, get_object_or_404
from django.contrib import messages
Expand Down Expand Up @@ -175,3 +178,20 @@ class ScheduledReviewListView(ListView):
def get_queryset(self) -> QuerySet[Review]:
qs = super().get_queryset()
return qs.exclude(results__isnull=False).distinct()


@method_decorator(staff_member_required, name="get")
class ReportPreviewView(View):
def get(self, request, *args, **kwargs):
version_slug = kwargs["version_slug"]
if version_slug == LATEST_RELEASE_URL_PATH_STR:
version_name = Version.objects.most_recent().name
else:
version = Version.objects.get(slug=version_slug)
version_name = version.name
# TODO: this is a bit silly. There's probably a more elegant solution
cache_key = f"release-report-,,,,,,,-{version_name}"
# TODO: it might be better to show a friendly "report not yet generated"
# message instead of 404ing.
content = get_object_or_404(RenderedContent, cache_key=cache_key)
return HttpResponse(content.content_html)

0 comments on commit e64f108

Please sign in to comment.