Skip to content
Snippets Groups Projects
Select Git revision
  • ee17d191d0de362f30ec4ac6c8960a3d356215d6
  • renovate/django-split-settings-1.x
  • renovate/djangorestframework-3.x
  • main
  • 520-improve-trackmanager
  • 520-fix-scheduling
  • 520-akowner
  • 520-status
  • 520-message-resolved
  • 520-improve-scheduling-2
  • renovate/django-bootstrap5-24.x
  • 520-improve-submission
  • 520-improve-scheduling
  • 520-improve-wall
  • 520-fix-event-wizard-datepicker
  • 520-upgrades
  • renovate/tzdata-2023.x
  • renovate/django-5.x
  • renovate/fontawesomefree-6.x
  • renovate/sphinx-rtd-theme-2.x
  • renovate/sphinxcontrib-apidoc-0.x
21 results

__init__.py

Blame
  • Forked from KIF / AKPlanning
    Source project has a limited visibility.
    Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    views.py 2.94 KiB
    import json
    
    from django.contrib import messages
    from django.shortcuts import redirect
    from django.utils.translation import gettext_lazy as _
    from django.views.generic import DetailView
    
    from AKModel.metaviews.admin import (
        AdminViewMixin,
        EventSlugMixin,
        IntermediateAdminView,
    )
    from AKModel.models import Event
    from AKSolverInterface.forms import JSONScheduleImportForm
    from AKSolverInterface.serializers import ExportEventSerializer
    
    
    class AKJSONExportView(AdminViewMixin, DetailView):
        """
        View: Export all AK slots of this event in JSON format ordered by tracks
        """
    
        template_name = "admin/AKSolverInterface/ak_json_export.html"
        model = Event
        context_object_name = "event"
        title = _("AK JSON Export")
        slug_url_kwarg = "event_slug"
    
        def get_context_data(self, **kwargs):
            context = super().get_context_data(**kwargs)
            try:
                serialized_event = ExportEventSerializer(context["event"])
                context["json_data_oneline"] = json.dumps(serialized_event.data, ensure_ascii=False)
                context["json_data"] = json.dumps(serialized_event.data, indent=2, ensure_ascii=False)
                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
    
        def get(self, request, *args, **kwargs):
            # as this code is adapted from BaseDetailView::get
            # pylint: disable=attribute-defined-outside-init
            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)
    
    
    class AKScheduleJSONImportView(EventSlugMixin, IntermediateAdminView):
        """
        View: Import an AK schedule from a json file that can be pasted into this view.
        """
    
        template_name = "admin/AKSolverInterface/import_json.html"
        form_class = JSONScheduleImportForm
        title = _("AK Schedule JSON Import")
    
        def form_valid(self, form):
            try:
                number_of_slots_changed = self.event.schedule_from_json(
                    form.cleaned_data["data"]
                )
                messages.add_message(
                    self.request,
                    messages.SUCCESS,
                    _("Successfully imported {n} slot(s)").format(
                        n=number_of_slots_changed
                    ),
                )
            except ValueError as ex:
                messages.add_message(
                    self.request,
                    messages.ERROR,
                    _("Importing an AK schedule failed! Reason: ") + str(ex),
                )
    
            return redirect("admin:event_status", self.event.slug)