Add 'plain' view (Python-specific; only half-tested)

This commit is contained in:
Klaas van Schelven
2024-03-30 23:09:24 +01:00
parent d411aff46f
commit 602678b941
5 changed files with 28 additions and 2 deletions

View File

@@ -0,0 +1,6 @@
{% autoescape off %}Traceback (most recent call last):{% for exception in exceptions %}{% for frame in exception.stacktrace.frames %}
File {{ frame.filename }}, line {{ frame.lineno }}{% if frame.function %}, in {{ frame.function }}{% endif %}
{{ frame.context_line.strip }}{% endfor %}{% if not forloop.last %}
During handling of the above exception another exception occurred or was intentionally reraised:{% endif %}
{% endfor %}{% endautoescape %}

View File

@@ -29,3 +29,8 @@ class ViewTests(TestCase):
self.assertEqual(response.status_code, 200)
self.assertEqual(response['Content-Type'], 'application/json')
self.assertTrue("platform" in response.json())
def test_event_plaintext(self):
response = self.client.get(f"/events/event/{self.event.pk}/plain/")
self.assertEqual(response.status_code, 200)
self.assertEqual(response['Content-Type'], 'text/plain')

View File

@@ -1,10 +1,11 @@
from django.urls import path
from .views import event_download
from .views import event_download, event_plaintext
urlpatterns = [
# path('event/<uuid:pk>/', event_detail), perhaps should become a redirect to issue/.../event now?
path('event/<uuid:event_pk>/raw/', event_download, kwargs={"as_attachment": False}),
path('event/<uuid:event_pk>/download/', event_download, kwargs={"as_attachment": True}),
path('event/<uuid:event_pk>/plain/', event_plaintext),
]

View File

@@ -1,5 +1,7 @@
import json
from django.http import HttpResponse
from django.utils.http import content_disposition_header
from django.shortcuts import render
from bugsink.decorators import event_membership_required
@@ -10,3 +12,14 @@ def event_download(request, event, as_attachment=False):
result["Content-Disposition"] = content_disposition_header(
as_attachment=as_attachment, filename=event.id.hex + ".json")
return result
@event_membership_required
def event_plaintext(request, event):
parsed_data = json.loads(event.data)
exceptions = parsed_data["exception"]["values"] if "exception" in parsed_data else None
return render(request, "events/event_stacktrace.txt", {
"event": event,
"exceptions": exceptions,
}, content_type="text/plain")

View File

@@ -122,7 +122,8 @@
{% if is_event_page %}
| <a href="/admin/events/event/{{ event.id }}/change/">Event Admin</a>
| <a href="/events/event/{{ event.id }}/download/">Download</a>
| <a href="/events/event/{{ event.id }}/raw/" >Raw</a>
| <a href="/events/event/{{ event.id }}/raw/" >JSON</a>
| <a href="/events/event/{{ event.id }}/plain/" >Plain</a>
{% endif %}
</div>
</div>{# bottom nav bar #}