mirror of
https://github.com/bugsink/bugsink.git
synced 2025-12-21 13:00:13 -06:00
Add 'plain' view (Python-specific; only half-tested)
This commit is contained in:
6
events/templates/events/event_stacktrace.txt
Normal file
6
events/templates/events/event_stacktrace.txt
Normal 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 %}
|
||||
@@ -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')
|
||||
|
||||
@@ -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),
|
||||
]
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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 #}
|
||||
|
||||
Reference in New Issue
Block a user