Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 28 additions & 3 deletions src/sentry/api/serializers/models/auditlogentry.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,19 +6,41 @@
from sentry.models import AuditLogEntry


def fix(data):
# There was a point in time where full Team objects
# got serialized into our AuditLogEntry.data, so these
# values need to be stripped and reduced down to integers
if 'teams' not in data:
return data

if not data['teams']:
return data

if not hasattr(data['teams'][0], 'id'):
return data

data['teams'] = [t.id for t in data['teams']]
return data


@register(AuditLogEntry)
class AuditLogEntrySerializer(Serializer):
def get_attrs(self, item_list, user):
# TODO(dcramer); assert on relations
actors = {
d['id']: d for d in serialize(set(i.actor for i in item_list if i.actor_id), user)
users = {
d['id']: d for d in serialize(
set(i.actor for i in item_list if i.actor_id) |
set(i.target_user for i in item_list if i.target_user_id),
user,
)
}

return {
item: {
'actor': actors[six.text_type(item.actor_id)] if item.actor_id else {
'actor': users[six.text_type(item.actor_id)] if item.actor_id else {
'name': item.get_actor_name(),
},
'targetUser': users.get(six.text_type(item.target_user_id)) or item.target_user_id
} for item in item_list
}

Expand All @@ -29,5 +51,8 @@ def serialize(self, obj, attrs, user):
'event': obj.get_event_display(),
'ipAddress': obj.ip_address,
'note': obj.get_note(),
'targetObject': obj.target_object,
'targetUser': attrs['targetUser'],
'data': fix(obj.data),
'dateCreated': obj.datetime,
}