From c054b48a4bd2a22bc1c1a63ea485113bdb027477 Mon Sep 17 00:00:00 2001 From: Klaas van Schelven Date: Mon, 13 Nov 2023 18:35:29 +0100 Subject: [PATCH] Download and raw links --- bugsink/settings.py | 4 +++- events/models.py | 8 ++++++++ events/urls.py | 4 +++- events/views.py | 10 ++++++++++ templates/admin/change_form_object_tools.html | 10 ++++++++++ 5 files changed, 34 insertions(+), 2 deletions(-) create mode 100644 templates/admin/change_form_object_tools.html diff --git a/bugsink/settings.py b/bugsink/settings.py index b2b228b..af59eb9 100644 --- a/bugsink/settings.py +++ b/bugsink/settings.py @@ -61,7 +61,9 @@ ROOT_URLCONF = 'bugsink.urls' TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', - 'DIRS': [], + 'DIRS': [ + BASE_DIR / "templates", + ], 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ diff --git a/events/models.py b/events/models.py index ca4055e..a00cc75 100644 --- a/events/models.py +++ b/events/models.py @@ -136,6 +136,14 @@ class Event(models.Model): def get_absolute_url(self): return "/events/event/%s/" % self.id + def get_raw_link(self): + # for the admin + return "/events/event/%s/raw/" % self.id + + def get_download_link(self): + # for the admin + return "/events/event/%s/download/" % self.id + @classmethod def from_json(cls, project, parsed_data, debug_info): event, created = cls.objects.get_or_create( # NOTE immediate creation... is this what we want? diff --git a/events/urls.py b/events/urls.py index a7cea59..02bf55c 100644 --- a/events/urls.py +++ b/events/urls.py @@ -1,9 +1,11 @@ from django.urls import path -from .views import event_detail, debug_get_hash +from .views import event_detail, event_download, debug_get_hash urlpatterns = [ path('event//', event_detail), + path('event//raw/', event_download, kwargs={"as_attachment": False}), + path('event//download/', event_download, kwargs={"as_attachment": True}), path('debug_get_hash//', debug_get_hash), ] diff --git a/events/views.py b/events/views.py index a861c8e..a78c051 100644 --- a/events/views.py +++ b/events/views.py @@ -1,6 +1,8 @@ import json from django.shortcuts import render, get_object_or_404 +from django.http import HttpResponse +from django.utils.http import content_disposition_header from issues.utils import get_hash_for_data, get_issue_grouper_for_data @@ -34,6 +36,14 @@ def event_detail(request, pk): }) +def event_download(request, pk, as_attachment=False): + obj = get_object_or_404(Event, pk=pk) + result = HttpResponse(obj.data, content_type="application/json") + result["Content-Disposition"] = content_disposition_header( + as_attachment=as_attachment, filename=obj.id.hex + ".json") + return result + + def debug_get_hash(request, event_pk): # debug view; not for eternity diff --git a/templates/admin/change_form_object_tools.html b/templates/admin/change_form_object_tools.html new file mode 100644 index 0000000..9288e41 --- /dev/null +++ b/templates/admin/change_form_object_tools.html @@ -0,0 +1,10 @@ +{% load i18n admin_urls %} +{% block object-tools-items %} +
  • + {% url opts|admin_urlname:'history' original.pk|admin_urlquote as history_url %} + {% translate "History" %} +
  • +{% if original.get_raw_link %}
  • {% translate "Raw" %}
  • {% endif %} +{% if original.get_download_link %}
  • {% translate "Download" %}
  • {% endif %} +{% if has_absolute_url %}
  • {% translate "View on site" %}
  • {% endif %} +{% endblock %}