From c0411591ba69dc2795d23183a8a6a0f42740ac86 Mon Sep 17 00:00:00 2001 From: Greg Kaleka Date: Fri, 14 Feb 2025 15:03:03 -0500 Subject: [PATCH] Add ability to force report regeneration (#1636) --- config/urls.py | 6 ++++++ versions/views.py | 22 ++++++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/config/urls.py b/config/urls.py index 09f45107..3bff7c7f 100755 --- a/config/urls.py +++ b/config/urls.py @@ -82,6 +82,7 @@ from versions.views import ( ScheduledReviewListView, VersionDetail, ReportPreviewView, + ReportPreviewGenerateView, ) djdt_urls = [] @@ -188,6 +189,11 @@ urlpatterns = ( ReportPreviewView.as_view(), name="release-report-preview", ), + path( + "releases//report/generate", + ReportPreviewGenerateView.as_view(), + name="release-report-generate", + ), path( "donate/", TemplateView.as_view(template_name="donate/donate.html"), diff --git a/versions/views.py b/versions/views.py index b8485119..df9af2f5 100755 --- a/versions/views.py +++ b/versions/views.py @@ -15,6 +15,7 @@ from django.views.decorators.csrf import csrf_exempt from core.models import RenderedContent from libraries.constants import LATEST_RELEASE_URL_PATH_STR +from libraries.forms import CreateReportForm from libraries.mixins import VersionAlertMixin, BoostVersionMixin from libraries.models import Commit, CommitAuthor from libraries.utils import ( @@ -192,3 +193,24 @@ class ReportPreviewView(BoostVersionMixin, View): # message instead of 404ing. content = get_object_or_404(RenderedContent, cache_key=cache_key) return HttpResponse(content.content_html) + + +@method_decorator(staff_member_required, name="get") +class ReportPreviewGenerateView(BoostVersionMixin, View): + """ + Regenerate a report without importing all data. + This is much faster - useful for when importing is not needed. + """ + + extra_context = {} + + def get(self, request, *args, **kwargs): + version = self.extra_context["selected_version"] + version_name = version.name + cache_key = f"release-report-,,,,,,,-{version_name}" + RenderedContent.objects.filter(cache_key=cache_key).delete() + # TODO: it's very silly that all the business logic for + # generating reports lives in a form; refactor + form = CreateReportForm({"version": version.id}) + form.cache_html() + return redirect("release-report-preview", version_slug=version_name)