diff --git a/AKModel/models.py b/AKModel/models.py index 018312107aada4f0a2871dac103a5db880c9910a..930219453920db03f5f7a084593264582438902a 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 461edd3a92402d706e3190899f76317dc13dae1c..a3f2b05e9b7f62066b515355cbc67d963822e302 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"] = True + 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): """