From a01045cb7b9523f6d0baa8ef9d537a26a189cdb4 Mon Sep 17 00:00:00 2001 From: Étienne Loks Date: Thu, 30 Jan 2020 16:12:11 +0100 Subject: Django simple history -> v2.7.0 --- ishtar_common/models.py | 50 +++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 44 insertions(+), 6 deletions(-) (limited to 'ishtar_common/models.py') diff --git a/ishtar_common/models.py b/ishtar_common/models.py index d0612d648..3900611b6 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -74,6 +74,8 @@ from ishtar_common.utils import ugettext_lazy as _, ugettext, \ pgettext_lazy from ishtar_common.utils_secretary import IshtarSecretaryRenderer from simple_history.models import HistoricalRecords as BaseHistoricalRecords +from simple_history.signals import post_create_historical_record, \ + pre_create_historical_record from unidecode import unidecode from ishtar_common.alternative_configs import ALTERNATE_CONFIGS, \ @@ -233,13 +235,48 @@ class HistoryModel(models.Model): class HistoricalRecords(BaseHistoricalRecords): - def create_historical_record(self, instance, type): + def _save_historic(self, manager, instance, history_date, history_type, + history_user, history_change_reason, using, attrs): + history_instance = manager.model( + history_date=history_date, + history_type=history_type, + history_user=history_user, + history_change_reason=history_change_reason, + **attrs + ) + + pre_create_historical_record.send( + sender=manager.model, + instance=instance, + history_date=history_date, + history_user=history_user, + history_change_reason=history_change_reason, + history_instance=history_instance, + using=using, + ) + + history_instance.save(using=using) + + post_create_historical_record.send( + sender=manager.model, + instance=instance, + history_instance=history_instance, + history_date=history_date, + history_user=history_user, + history_change_reason=history_change_reason, + using=using, + ) + + def create_historical_record(self, instance, history_type, using=None): try: history_modifier = getattr(instance, 'history_modifier', None) assert history_modifier except (User.DoesNotExist, AssertionError): # on batch removing of users, user could have disappeared return + history_date = getattr(instance, "_history_date", + datetime.datetime.now()) + history_change_reason = getattr(instance, "changeReason", None) force = getattr(instance, "_force_history", False) manager = getattr(instance, self.manager_name) attrs = {} @@ -252,8 +289,9 @@ class HistoricalRecords(BaseHistoricalRecords): if not q_history.count(): if force: delattr(instance, '_force_history') - manager.create(history_type=type, - history_date=datetime.datetime.now(), **attrs) + self._save_historic( + manager, instance, history_date, history_type, history_modifier, + history_change_reason, using, attrs) return old_instance = q_history.all()[0] # multiple saving by the same user in a very short time are generaly @@ -269,12 +307,12 @@ class HistoricalRecords(BaseHistoricalRecords): if force: delattr(instance, '_force_history') - if 'history_date' not in attrs or not attrs['history_date']: - attrs['history_date'] = datetime.datetime.now() # record a new version only if data have been changed for field in instance._meta.fields: if getattr(old_instance, field.attname) != attrs[field.attname]: - manager.create(history_type=type, **attrs) + self._save_historic(manager, instance, history_date, + history_type, history_modifier, + history_change_reason, using, attrs) return -- cgit v1.2.3