mirror of
https://github.com/bugsink/bugsink.git
synced 2025-12-18 11:04:15 -06:00
Markdown stacktrace: render with all frames
not just in-app ones; basic principle: more info means the LLM (or whatever) has more to go by
This commit is contained in:
@@ -105,5 +105,5 @@ class EventViewSet(AtomicRequestMixin, viewsets.ReadOnlyModelViewSet):
|
|||||||
)
|
)
|
||||||
def stacktrace(self, request, pk=None):
|
def stacktrace(self, request, pk=None):
|
||||||
event = self.get_object()
|
event = self.get_object()
|
||||||
text = render_stacktrace_md(event, frames="in_app", include_locals=True)
|
text = render_stacktrace_md(event, in_app_only=False, include_locals=True)
|
||||||
return Response(text)
|
return Response(text)
|
||||||
|
|||||||
@@ -133,7 +133,7 @@ def _select_frames(frames, in_app_only):
|
|||||||
return filtered if filtered else frames
|
return filtered if filtered else frames
|
||||||
|
|
||||||
|
|
||||||
def render_stacktrace_md(event, frames="in_app", include_locals=True):
|
def render_stacktrace_md(event, in_app_only=False, include_locals=True):
|
||||||
parsed = event.get_parsed_data()
|
parsed = event.get_parsed_data()
|
||||||
try:
|
try:
|
||||||
apply_sourcemaps(parsed)
|
apply_sourcemaps(parsed)
|
||||||
@@ -163,7 +163,6 @@ def render_stacktrace_md(event, frames="in_app", include_locals=True):
|
|||||||
if stack_of_plates and frames_list:
|
if stack_of_plates and frames_list:
|
||||||
frames_list = list(reversed(frames_list))
|
frames_list = list(reversed(frames_list))
|
||||||
|
|
||||||
in_app_only = frames == "in_app"
|
|
||||||
frames_list = _select_frames(frames_list, in_app_only)
|
frames_list = _select_frames(frames_list, in_app_only)
|
||||||
|
|
||||||
for frame in frames_list:
|
for frame in frames_list:
|
||||||
|
|||||||
@@ -47,4 +47,4 @@ class EventDetailSerializer(UTCModelSerializer):
|
|||||||
|
|
||||||
@extend_schema_field(serializers.CharField)
|
@extend_schema_field(serializers.CharField)
|
||||||
def get_stacktrace_md(self, obj):
|
def get_stacktrace_md(self, obj):
|
||||||
return render_stacktrace_md(obj, frames="in_app", include_locals=True)
|
return render_stacktrace_md(obj, in_app_only=False, include_locals=True)
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ def event_plaintext(request, event):
|
|||||||
@atomic_for_request_method
|
@atomic_for_request_method
|
||||||
@event_membership_required
|
@event_membership_required
|
||||||
def event_markdown(request, event, as_attachment=False):
|
def event_markdown(request, event, as_attachment=False):
|
||||||
text = render_stacktrace_md(event, frames="in_app", include_locals=True)
|
text = render_stacktrace_md(event, in_app_only=False, include_locals=True)
|
||||||
result = HttpResponse(text, content_type="text/markdown; charset=utf-8")
|
result = HttpResponse(text, content_type="text/markdown; charset=utf-8")
|
||||||
if as_attachment:
|
if as_attachment:
|
||||||
result["Content-Disposition"] = content_disposition_header(
|
result["Content-Disposition"] = content_disposition_header(
|
||||||
|
|||||||
@@ -596,7 +596,7 @@ class IntegrationTest(TransactionTestCase):
|
|||||||
filename, response.content if response.status_code != 302 else response.url))
|
filename, response.content if response.status_code != 302 else response.url))
|
||||||
|
|
||||||
event = Event.objects.get(issue__project=project, event_id=data["event_id"])
|
event = Event.objects.get(issue__project=project, event_id=data["event_id"])
|
||||||
md = render_stacktrace_md(event, frames="all", include_locals=True)
|
md = render_stacktrace_md(event, in_app_only=False, include_locals=True)
|
||||||
|
|
||||||
self.assertEqual('''# CapturedStacktraceFo
|
self.assertEqual('''# CapturedStacktraceFo
|
||||||
4 kinds of frames
|
4 kinds of frames
|
||||||
@@ -788,7 +788,7 @@ class IssueDeletionTestCase(TransactionTestCase):
|
|||||||
|
|
||||||
# see the note in `prune_orphans` about TagKey to understand why it's special.
|
# see the note in `prune_orphans` about TagKey to understand why it's special.
|
||||||
vacuum_models = [apps.get_model(app_label=s.split('.')[0], model_name=s.split('.')[1].lower())
|
vacuum_models = [apps.get_model(app_label=s.split('.')[0], model_name=s.split('.')[1].lower())
|
||||||
for s in ['tags.TagKey',]]
|
for s in ['tags.TagKey']]
|
||||||
|
|
||||||
for model in models + vacuum_models:
|
for model in models + vacuum_models:
|
||||||
# test-the-test: make sure some instances of the models actually exist after setup
|
# test-the-test: make sure some instances of the models actually exist after setup
|
||||||
|
|||||||
Reference in New Issue
Block a user