From ecd53b7a07f90f0f76d653738cf999723e3c488d Mon Sep 17 00:00:00 2001 From: Vitor Figueiro Date: Fri, 7 Feb 2014 19:59:16 +0000 Subject: [PATCH 1/2] ensure signal disconnection --- src/auditlog/middleware.py | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/auditlog/middleware.py b/src/auditlog/middleware.py index 454fbc7..566ffa0 100644 --- a/src/auditlog/middleware.py +++ b/src/auditlog/middleware.py @@ -1,3 +1,5 @@ +import time + from django.conf import settings from django.db.models.signals import pre_save from django.utils.functional import curry @@ -21,15 +23,24 @@ class AuditlogMiddleware(object): else: user = None + request.auditlog_ts = time.time() set_actor = curry(self.set_actor, user) - pre_save.connect(set_actor, sender=LogEntry, dispatch_uid=(self.__class__, request), weak=False) + pre_save.connect(set_actor, sender=LogEntry, dispatch_uid=(self.__class__, request.auditlog_ts), weak=False) def process_response(self, request, response): """ Disconnects the signal receiver to prevent it from staying active. """ # Disconnecting the signal receiver is required because it will not be garbage collected (non-weak reference) - pre_save.disconnect(dispatch_uid=(self.__class__, request)) + pre_save.disconnect(sender=LogEntry, dispatch_uid=(self.__class__, request.auditlog_ts)) + + return response + + def process_exception(self, request, exception): + """ + Disconnects the signal receiver to prevent it from staying active in case of an exception. + """ + pre_save.disconnect(sender=LogEntry, dispatch_uid=(self.__class__, request.auditlog_ts)) return response From c22bd6b61ed1a4d29b767cb5db181a983b0086bb Mon Sep 17 00:00:00 2001 From: Vitor Figueiro Date: Fri, 7 Feb 2014 20:02:03 +0000 Subject: [PATCH 2/2] process_exception returns None --- src/auditlog/middleware.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/auditlog/middleware.py b/src/auditlog/middleware.py index 566ffa0..098a056 100644 --- a/src/auditlog/middleware.py +++ b/src/auditlog/middleware.py @@ -42,7 +42,7 @@ class AuditlogMiddleware(object): """ pre_save.disconnect(sender=LogEntry, dispatch_uid=(self.__class__, request.auditlog_ts)) - return response + return None @staticmethod def set_actor(user, sender, instance, **kwargs):