From cdba72e962ded51da17789fc722168f1bfdd67d7 Mon Sep 17 00:00:00 2001 From: Felix Blanke <felixblanke@uni-bonn.de> Date: Wed, 2 Apr 2025 22:14:49 +0200 Subject: [PATCH] Catch errors from export and show them as error msg --- AKModel/models.py | 1 - AKModel/views/ak.py | 26 ++++++++++++++++++++++---- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/AKModel/models.py b/AKModel/models.py index 01831210..93021945 100644 --- a/AKModel/models.py +++ b/AKModel/models.py @@ -104,7 +104,6 @@ def merge_blocks( current_block[-1] = current_block[-1].merge(slot) else: # partial overlap of interiors -> not supported - # TODO: Show comprehensive message in production raise ValueError( "Partially overlapping timeslots are not supported!" f" ({current_block[-1].avail.simplified}, {slot.avail.simplified})" diff --git a/AKModel/views/ak.py b/AKModel/views/ak.py index 461edd3a..6d64a751 100644 --- a/AKModel/views/ak.py +++ b/AKModel/views/ak.py @@ -1,6 +1,7 @@ import json from django.contrib import messages +from django.shortcuts import redirect from django.urls import reverse_lazy from django.utils.translation import gettext_lazy as _ from django.views.generic import ListView, DetailView @@ -51,12 +52,29 @@ class AKJSONExportView(AdminViewMixin, DetailView): def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) + try: + data = context["event"].as_json_dict() + context["json_data_oneline"] = json.dumps(data) + context["json_data"] = json.dumps(data, indent=2) + context["is_valid"] = False + except ValueError as ex: + messages.add_message( + self.request, + messages.ERROR, + _("Exporting AKs for the solver failed! Reason: ") + str(ex), + ) + return context - data = context["event"].as_json_dict() - context["json_data_oneline"] = json.dumps(data) - context["json_data"] = json.dumps(data, indent=2) + def get(self, request, *args, **kwargs): + self.object = self.get_object() + context = self.get_context_data(object=self.object) + + # if serialization failed in `get_context_data` we redirect to + # the status page and show a message instead + if not context.get("is_valid", False): + return redirect("admin:event_status", context["event"].slug) + return self.render_to_response(context) - return context class AKWikiExportView(AdminViewMixin, DetailView): """ -- GitLab