mirror of
https://github.com/jazzband/django-auditlog.git
synced 2026-03-16 22:20:26 +00:00
feat: include LogEntry instance in post_log signal (#605)
This commit is contained in:
parent
447347710d
commit
f3238c9bdb
3 changed files with 17 additions and 8 deletions
|
|
@ -113,7 +113,7 @@ def _create_log_entry(
|
||||||
return
|
return
|
||||||
|
|
||||||
error = None
|
error = None
|
||||||
log_created = False
|
log_entry = None
|
||||||
changes = None
|
changes = None
|
||||||
try:
|
try:
|
||||||
changes = model_instance_diff(
|
changes = model_instance_diff(
|
||||||
|
|
@ -121,17 +121,16 @@ def _create_log_entry(
|
||||||
)
|
)
|
||||||
|
|
||||||
if force_log or changes:
|
if force_log or changes:
|
||||||
LogEntry.objects.log_create(
|
log_entry = LogEntry.objects.log_create(
|
||||||
instance,
|
instance,
|
||||||
action=action,
|
action=action,
|
||||||
changes=changes,
|
changes=changes,
|
||||||
force_log=force_log,
|
force_log=force_log,
|
||||||
)
|
)
|
||||||
log_created = True
|
|
||||||
except BaseException as e:
|
except BaseException as e:
|
||||||
error = e
|
error = e
|
||||||
finally:
|
finally:
|
||||||
if log_created or error:
|
if log_entry or error:
|
||||||
post_log.send(
|
post_log.send(
|
||||||
sender,
|
sender,
|
||||||
instance=instance,
|
instance=instance,
|
||||||
|
|
@ -140,7 +139,8 @@ def _create_log_entry(
|
||||||
error=error,
|
error=error,
|
||||||
pre_log_results=pre_log_results,
|
pre_log_results=pre_log_results,
|
||||||
changes=changes,
|
changes=changes,
|
||||||
log_created=log_created,
|
log_entry=log_entry,
|
||||||
|
log_created=log_entry is not None,
|
||||||
)
|
)
|
||||||
if error:
|
if error:
|
||||||
raise error
|
raise error
|
||||||
|
|
|
||||||
|
|
@ -48,6 +48,10 @@ Keyword arguments sent with this signal:
|
||||||
this will be None. In some cases, such as when logging access to the instance,
|
this will be None. In some cases, such as when logging access to the instance,
|
||||||
the changes will be an empty dict.
|
the changes will be an empty dict.
|
||||||
|
|
||||||
|
:param Optional[LogEntry] log_entry:
|
||||||
|
The log entry that was created and stored in the database. If there was an error,
|
||||||
|
this will be None.
|
||||||
|
|
||||||
:param bool log_created:
|
:param bool log_created:
|
||||||
Was the log actually created?
|
Was the log actually created?
|
||||||
This could be false if there was an error in creating the log.
|
This could be false if there was an error in creating the log.
|
||||||
|
|
|
||||||
|
|
@ -2380,6 +2380,7 @@ class SignalTests(TestCase):
|
||||||
"my_instance": None,
|
"my_instance": None,
|
||||||
"my_action": None,
|
"my_action": None,
|
||||||
"my_error": None,
|
"my_error": None,
|
||||||
|
"my_log_entry": None,
|
||||||
}
|
}
|
||||||
|
|
||||||
def assertSignals(self, action):
|
def assertSignals(self, action):
|
||||||
|
|
@ -2397,6 +2398,7 @@ class SignalTests(TestCase):
|
||||||
self.assertIs(self.my_post_log_data["my_instance"], self.obj)
|
self.assertIs(self.my_post_log_data["my_instance"], self.obj)
|
||||||
self.assertEqual(self.my_post_log_data["my_action"], action)
|
self.assertEqual(self.my_post_log_data["my_action"], action)
|
||||||
self.assertIsNone(self.my_post_log_data["my_error"])
|
self.assertIsNone(self.my_post_log_data["my_error"])
|
||||||
|
self.assertIsNotNone(self.my_post_log_data["my_log_entry"])
|
||||||
|
|
||||||
def test_custom_signals(self):
|
def test_custom_signals(self):
|
||||||
my_ret_val = random.randint(0, 10000)
|
my_ret_val = random.randint(0, 10000)
|
||||||
|
|
@ -2413,13 +2415,14 @@ class SignalTests(TestCase):
|
||||||
return my_other_ret_val
|
return my_other_ret_val
|
||||||
|
|
||||||
def post_log_receiver(
|
def post_log_receiver(
|
||||||
sender, instance, action, error, pre_log_results, **_kwargs
|
sender, instance, action, error, log_entry, pre_log_results, **_kwargs
|
||||||
):
|
):
|
||||||
self.my_post_log_data["is_called"] = True
|
self.my_post_log_data["is_called"] = True
|
||||||
self.my_post_log_data["my_sender"] = sender
|
self.my_post_log_data["my_sender"] = sender
|
||||||
self.my_post_log_data["my_instance"] = instance
|
self.my_post_log_data["my_instance"] = instance
|
||||||
self.my_post_log_data["my_action"] = action
|
self.my_post_log_data["my_action"] = action
|
||||||
self.my_post_log_data["my_error"] = error
|
self.my_post_log_data["my_error"] = error
|
||||||
|
self.my_post_log_data["my_log_entry"] = log_entry
|
||||||
|
|
||||||
self.assertEqual(len(pre_log_results), 2)
|
self.assertEqual(len(pre_log_results), 2)
|
||||||
|
|
||||||
|
|
@ -2482,12 +2485,13 @@ class SignalTests(TestCase):
|
||||||
self.my_pre_log_data["my_instance"] = instance
|
self.my_pre_log_data["my_instance"] = instance
|
||||||
self.my_pre_log_data["my_action"] = action
|
self.my_pre_log_data["my_action"] = action
|
||||||
|
|
||||||
def post_log_receiver(sender, instance, action, error, **_kwargs):
|
def post_log_receiver(sender, instance, action, error, log_entry, **_kwargs):
|
||||||
self.my_post_log_data["is_called"] = True
|
self.my_post_log_data["is_called"] = True
|
||||||
self.my_post_log_data["my_sender"] = sender
|
self.my_post_log_data["my_sender"] = sender
|
||||||
self.my_post_log_data["my_instance"] = instance
|
self.my_post_log_data["my_instance"] = instance
|
||||||
self.my_post_log_data["my_action"] = action
|
self.my_post_log_data["my_action"] = action
|
||||||
self.my_post_log_data["my_error"] = error
|
self.my_post_log_data["my_error"] = error
|
||||||
|
self.my_post_log_data["my_log_entry"] = log_entry
|
||||||
|
|
||||||
pre_log.connect(pre_log_receiver)
|
pre_log.connect(pre_log_receiver)
|
||||||
post_log.connect(post_log_receiver)
|
post_log.connect(post_log_receiver)
|
||||||
|
|
@ -2504,12 +2508,13 @@ class SignalTests(TestCase):
|
||||||
self.my_pre_log_data["my_instance"] = instance
|
self.my_pre_log_data["my_instance"] = instance
|
||||||
self.my_pre_log_data["my_action"] = action
|
self.my_pre_log_data["my_action"] = action
|
||||||
|
|
||||||
def post_log_receiver(sender, instance, action, error, **_kwargs):
|
def post_log_receiver(sender, instance, action, error, log_entry, **_kwargs):
|
||||||
self.my_post_log_data["is_called"] = True
|
self.my_post_log_data["is_called"] = True
|
||||||
self.my_post_log_data["my_sender"] = sender
|
self.my_post_log_data["my_sender"] = sender
|
||||||
self.my_post_log_data["my_instance"] = instance
|
self.my_post_log_data["my_instance"] = instance
|
||||||
self.my_post_log_data["my_action"] = action
|
self.my_post_log_data["my_action"] = action
|
||||||
self.my_post_log_data["my_error"] = error
|
self.my_post_log_data["my_error"] = error
|
||||||
|
self.my_post_log_data["my_log_entry"] = log_entry
|
||||||
|
|
||||||
pre_log.connect(pre_log_receiver)
|
pre_log.connect(pre_log_receiver)
|
||||||
post_log.connect(post_log_receiver)
|
post_log.connect(post_log_receiver)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue