mirror of
https://github.com/jlengrand/bugsink.git
synced 2026-03-10 08:01:17 +00:00
Adds a `stacktrace_md` field to EventSerializer and a `/stacktrace` action returning the same markdown (but as the full response). Also switches `data` to use `get_parsed_data()` (as it should have) and in json dict format (rather than str).
50 lines
1.6 KiB
Python
50 lines
1.6 KiB
Python
from rest_framework import serializers
|
|
from drf_spectacular.utils import extend_schema_field
|
|
|
|
from .markdown_stacktrace import render_stacktrace_md
|
|
from .models import Event
|
|
|
|
|
|
class EventListSerializer(serializers.ModelSerializer):
|
|
"""Lightweight list view: excludes the (potentially large) `data` field."""
|
|
|
|
class Meta:
|
|
model = Event
|
|
fields = [
|
|
"id",
|
|
"ingested_at",
|
|
"digested_at",
|
|
"issue",
|
|
"grouping",
|
|
"event_id",
|
|
"project",
|
|
"timestamp",
|
|
"digest_order",
|
|
]
|
|
|
|
|
|
class EventDetailSerializer(serializers.ModelSerializer):
|
|
"""Detail view: includes full `data` payload."""
|
|
# NOTE as with Issue.grouping_keys: check viewset for prefetching
|
|
# grouping_key = serializers.CharField(source="grouping.grouping_key", read_only=True)
|
|
|
|
data = serializers.SerializerMethodField()
|
|
stacktrace_md = serializers.SerializerMethodField()
|
|
|
|
class Meta:
|
|
model = Event
|
|
fields = EventListSerializer.Meta.fields + [
|
|
"data",
|
|
"stacktrace_md",
|
|
# "grouping_key" # TODO (likely) once we have the "expand" idea implemented
|
|
]
|
|
|
|
@extend_schema_field(serializers.JSONField)
|
|
def get_data(self, obj):
|
|
# we override `data` to return the parsed version (which may come from the file store rather than the DB)
|
|
return obj.get_parsed_data()
|
|
|
|
@extend_schema_field(serializers.CharField)
|
|
def get_stacktrace_md(self, obj):
|
|
return render_stacktrace_md(obj, frames="in_app", exceptions="last", include_locals=True)
|