Skip to content
Merged
Show file tree
Hide file tree
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
28 changes: 18 additions & 10 deletions netbox/extras/events.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,18 +51,26 @@ def serialize_for_event(instance):


def get_snapshots(instance, event_type):
snapshots = {
"""
Return a dictionary of pre- and post-change snapshots for the given instance.
"""
if event_type == OBJECT_DELETED:
# Post-change snapshot must be empty for deleted objects
postchange_snapshot = None
elif hasattr(instance, '_postchange_snapshot'):
# Use the cached post-change snapshot if one is available
postchange_snapshot = instance._postchange_snapshot
elif hasattr(instance, 'serialize_object'):
# Use model's serialize_object() method if defined
postchange_snapshot = instance.serialize_object()
else:
# Fall back to the serialize_object() utility function
postchange_snapshot = serialize_object(instance)

return {
'prechange': getattr(instance, '_prechange_snapshot', None),
'postchange': None,
'postchange': postchange_snapshot,
}
if event_type != OBJECT_DELETED:
# Use model's serialize_object() method if defined; fall back to serialize_object() utility function
if hasattr(instance, 'serialize_object'):
snapshots['postchange'] = instance.serialize_object()
else:
snapshots['postchange'] = serialize_object(instance)

return snapshots


def enqueue_event(queue, instance, request, event_type):
Expand Down
4 changes: 3 additions & 1 deletion netbox/netbox/models/features.py
Original file line number Diff line number Diff line change
Expand Up @@ -121,9 +121,11 @@ def to_objectchange(self, action):
if hasattr(self, '_prechange_snapshot'):
objectchange.prechange_data = self._prechange_snapshot
if action in (ObjectChangeActionChoices.ACTION_CREATE, ObjectChangeActionChoices.ACTION_UPDATE):
objectchange.postchange_data = self.serialize_object(exclude=exclude)
self._postchange_snapshot = self.serialize_object(exclude=exclude)
objectchange.postchange_data = self._postchange_snapshot

return objectchange
to_objectchange.alters_data = True


class CloningMixin(models.Model):
Expand Down
Loading