@@ -55,18 +55,6 @@ def run_validators(instance, validators):
5555clear_events = Signal ()
5656
5757
58- def is_same_object (instance , webhook_data , request_id ):
59- """
60- Compare the given instance to the most recent queued webhook object, returning True
61- if they match. This check is used to avoid creating duplicate webhook entries.
62- """
63- return (
64- ContentType .objects .get_for_model (instance ) == webhook_data ['content_type' ] and
65- instance .pk == webhook_data ['object_id' ] and
66- request_id == webhook_data ['request_id' ]
67- )
68-
69-
7058@receiver ((post_save , m2m_changed ))
7159def handle_changed_object (sender , instance , ** kwargs ):
7260 """
@@ -112,14 +100,13 @@ def handle_changed_object(sender, instance, **kwargs):
112100 objectchange .request_id = request .id
113101 objectchange .save ()
114102
115- # If this is an M2M change, update the previously queued webhook (from post_save)
103+ # Ensure that we're working with fresh M2M assignments
104+ if m2m_changed :
105+ instance .refresh_from_db ()
106+
107+ # Enqueue the object for event processing
116108 queue = events_queue .get ()
117- if m2m_changed and queue and is_same_object (instance , queue [- 1 ], request .id ):
118- instance .refresh_from_db () # Ensure that we're working with fresh M2M assignments
119- queue [- 1 ]['data' ] = serialize_for_event (instance )
120- queue [- 1 ]['snapshots' ]['postchange' ] = get_snapshots (instance , action )['postchange' ]
121- else :
122- enqueue_object (queue , instance , request .user , request .id , action )
109+ enqueue_object (queue , instance , request .user , request .id , action )
123110 events_queue .set (queue )
124111
125112 # Increment metric counters
@@ -179,7 +166,7 @@ def handle_deleted_object(sender, instance, **kwargs):
179166 obj .snapshot () # Ensure the change record includes the "before" state
180167 getattr (obj , related_field_name ).remove (instance )
181168
182- # Enqueue webhooks
169+ # Enqueue the object for event processing
183170 queue = events_queue .get ()
184171 enqueue_object (queue , instance , request .user , request .id , ObjectChangeActionChoices .ACTION_DELETE )
185172 events_queue .set (queue )
@@ -195,7 +182,7 @@ def clear_events_queue(sender, **kwargs):
195182 """
196183 logger = logging .getLogger ('events' )
197184 logger .info (f"Clearing { len (events_queue .get ())} queued events ({ sender } )" )
198- events_queue .set ([] )
185+ events_queue .set ({} )
199186
200187
201188#
0 commit comments