Skip to content

Commit 6734ece

Browse files
ref: serialize release and userReport (#10921)
* ref: serialize release and userReport * add detailed event serializer
1 parent b317f15 commit 6734ece

File tree

3 files changed

+42
-56
lines changed

3 files changed

+42
-56
lines changed

src/sentry/api/endpoints/event_details.py

Lines changed: 3 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -7,28 +7,14 @@
77
from sentry.api.base import Endpoint
88
from sentry.api.bases.group import GroupPermission
99
from sentry.api.exceptions import ResourceDoesNotExist
10-
from sentry.api.serializers import serialize
10+
from sentry.api.serializers import DetailedEventSerializer, serialize
1111
from sentry.constants import EVENT_ORDERING_KEY
12-
from sentry.models import Event, Release, UserReport
12+
from sentry.models import Event
1313

1414

1515
class EventDetailsEndpoint(Endpoint):
1616
permission_classes = (GroupPermission, )
1717

18-
def _get_release_info(self, request, event):
19-
version = event.get_tag('sentry:release')
20-
if not version:
21-
return None
22-
try:
23-
release = Release.objects.get(
24-
projects=event.project,
25-
organization_id=event.project.organization_id,
26-
version=version,
27-
)
28-
except Release.DoesNotExist:
29-
return {'version': version}
30-
return serialize(release, request.user)
31-
3218
def get(self, request, event_id):
3319
"""
3420
Retrieve an Event
@@ -95,17 +81,7 @@ def get(self, request, event_id):
9581
prev_event = e
9682
break
9783

98-
try:
99-
user_report = UserReport.objects.get(
100-
event_id=event.event_id,
101-
project=event.project,
102-
)
103-
except UserReport.DoesNotExist:
104-
user_report = None
105-
106-
data = serialize(event, request.user)
107-
data['userReport'] = serialize(user_report, request.user)
108-
data['release'] = self._get_release_info(request, event)
84+
data = serialize(event, request.user, DetailedEventSerializer())
10985

11086
if next_event:
11187
data['nextEventID'] = six.text_type(next_event.id)

src/sentry/api/endpoints/project_event_details.py

Lines changed: 3 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66

77
from sentry.api.base import DocSection
88
from sentry.api.bases.project import ProjectEndpoint
9-
from sentry.api.serializers import serialize
10-
from sentry.models import Event, Release, UserReport
9+
from sentry.api.serializers import DetailedEventSerializer, serialize
10+
from sentry.models import Event
1111
from sentry.utils.apidocs import scenario, attach_scenarios
1212
from sentry.utils.validators import is_event_id
1313

@@ -24,20 +24,6 @@ def retrieve_event_for_project_scenario(runner):
2424
class ProjectEventDetailsEndpoint(ProjectEndpoint):
2525
doc_section = DocSection.EVENTS
2626

27-
def _get_release_info(self, request, event):
28-
version = event.get_tag('sentry:release')
29-
if not version:
30-
return None
31-
try:
32-
release = Release.objects.get(
33-
projects=event.project,
34-
organization_id=event.project.organization_id,
35-
version=version,
36-
)
37-
except Release.DoesNotExist:
38-
return {'version': version}
39-
return serialize(release, request.user)
40-
4127
@attach_scenarios([retrieve_event_for_project_scenario])
4228
def get(self, request, project, event_id):
4329
"""
@@ -104,17 +90,7 @@ def get(self, request, project, event_id):
10490
except IndexError:
10591
prev_event = None
10692

107-
try:
108-
user_report = UserReport.objects.get(
109-
event_id=event.event_id,
110-
project=event.project,
111-
)
112-
except UserReport.DoesNotExist:
113-
user_report = None
114-
115-
data = serialize(event, request.user)
116-
data['userReport'] = serialize(user_report, request.user)
117-
data['release'] = self._get_release_info(request, event)
93+
data = serialize(event, request.user, DetailedEventSerializer())
11894

11995
if next_event:
12096
data['nextEventID'] = six.text_type(next_event.event_id)

src/sentry/api/serializers/models/event.py

Lines changed: 36 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
from semaphore import meta_with_chunks
88

99
from sentry.api.serializers import Serializer, register, serialize
10-
from sentry.models import Event, EventError, EventAttachment
10+
from sentry.models import Event, EventError, EventAttachment, Release, UserReport
1111
from sentry.utils.safe import get_path
1212

1313

@@ -125,6 +125,30 @@ def _get_legacy_message_with_meta(self, event):
125125

126126
return (message, meta_with_chunks(message, msg_meta))
127127

128+
def _get_release_info(self, user, event):
129+
version = event.get_tag('sentry:release')
130+
if not version:
131+
return None
132+
try:
133+
release = Release.objects.get(
134+
projects=event.project,
135+
organization_id=event.project.organization_id,
136+
version=version,
137+
)
138+
except Release.DoesNotExist:
139+
return {'version': version}
140+
return serialize(release, user)
141+
142+
def _get_user_report(self, user, event):
143+
try:
144+
user_report = UserReport.objects.get(
145+
event_id=event.event_id,
146+
project=event.project,
147+
)
148+
except UserReport.DoesNotExist:
149+
user_report = None
150+
return serialize(user_report, user)
151+
128152
def get_attrs(self, item_list, user, is_public=False):
129153
Event.objects.bind_nodes(item_list, 'data')
130154

@@ -177,7 +201,6 @@ def serialize(self, obj, attrs, user):
177201
except TypeError:
178202
received = None
179203

180-
# TODO(dcramer): move release serialization here
181204
d = {
182205
'id': six.text_type(obj.id),
183206
'groupID': six.text_type(obj.group_id),
@@ -216,6 +239,17 @@ def serialize(self, obj, attrs, user):
216239
return d
217240

218241

242+
class DetailedEventSerializer(EventSerializer):
243+
"""
244+
Adds release and user report info to the serialized event.
245+
"""
246+
def serialize(self, obj, attrs, user):
247+
result = super(DetailedEventSerializer, self).serialize(obj, attrs, user)
248+
result['release'] = self._get_release_info(user, obj)
249+
result['userReport'] = self._get_user_report(user, obj)
250+
return result
251+
252+
219253
class SharedEventSerializer(EventSerializer):
220254
def get_attrs(self, item_list, user):
221255
return super(SharedEventSerializer, self).get_attrs(item_list, user, is_public=True)

0 commit comments

Comments
 (0)