From c91a81498ef7ac1bdd2747a576a43952080a9095 Mon Sep 17 00:00:00 2001 From: Serghei MIHAI Date: Thu, 17 Jul 2014 15:22:46 +0200 Subject: [PATCH 1/3] logging actions on models improved using post_save and pre_delete signals --- calebasse/actes/models.py | 3 --- calebasse/actes/views.py | 5 ----- calebasse/agenda/forms.py | 8 -------- calebasse/agenda/models.py | 7 ------- calebasse/common/__init__.py | 0 calebasse/common/models.py | 32 ++++++++++++++++++++++++++++++++ calebasse/common/views.py | 1 + calebasse/dossiers/models.py | 8 -------- calebasse/personnes/models.py | 2 -- calebasse/settings.py | 1 + setup.py | 1 + 11 files changed, 35 insertions(+), 33 deletions(-) create mode 100644 calebasse/common/__init__.py create mode 100644 calebasse/common/models.py create mode 100644 calebasse/common/views.py diff --git a/calebasse/actes/models.py b/calebasse/actes/models.py index 3030999..463338e 100644 --- a/calebasse/actes/models.py +++ b/calebasse/actes/models.py @@ -47,7 +47,6 @@ class ActManager(models.Manager): act=act,state_name='NON_VALIDE', author=author, previous_state=None) act.last_validation_state = last_validation_state - get_request().record('new-act','{obj_id} created by {user} from {ip}', obj_id=act.id) act.save() return act @@ -225,7 +224,6 @@ class Act(models.Model): def save(self, *args, **kwargs): if self.parent_event and not self.parent_event.canceled: super(Act, self).save(*args, **kwargs) - get_request().record('act-save', '{obj_id} saved by {user} from {ip}', obj_id=self.id) def duration(self): '''Return a displayable duration for this field.''' @@ -268,7 +266,6 @@ class Act(models.Model): def delete(self): obj_id = self.id super(Act, self).delete() - get_request().record('act-delete', '{obj_id} deleted by {user} from {ip}', obj_id=obj_id) class Meta: verbose_name = u"Acte" diff --git a/calebasse/actes/views.py b/calebasse/actes/views.py index f620745..b7d9b5e 100644 --- a/calebasse/actes/views.py +++ b/calebasse/actes/views.py @@ -86,9 +86,6 @@ class NewAct(NewAppointmentView): def form_valid(self, form): result = super(NewAct, self).form_valid(form) self.object.act.save() - self.request.record('new-act', - '{obj_id} created by {user} from {ip}', - obj_id=self.object.id) return result act_listing = ActListingView.as_view() @@ -104,8 +101,6 @@ class DeleteActView(DeleteView): if self.object.event: self.object.event.delete() if not self.object.is_billed: - self.request.record('act-delete', '{obj_id} deleted by {user} from {ip}', - obj_id=self.object.id) self.object.delete() return HttpResponse(status=204) diff --git a/calebasse/agenda/forms.py b/calebasse/agenda/forms.py index a5b982e..364071b 100644 --- a/calebasse/agenda/forms.py +++ b/calebasse/agenda/forms.py @@ -122,9 +122,6 @@ class NewAppointmentForm(BaseForm): if commit: appointment.patient = patient appointment.save() - get_request().record('new-eventwithact', - '{obj_id} created by {user} from {ip}', - obj_id=appointment.id) self.save_m2m() appointment.services = [self.service] @@ -145,9 +142,6 @@ class UpdateAppointmentForm(NewAppointmentForm): appointment.clean() if commit: appointment.save() - get_request().record('update-eventwithact', - '{obj_id} saved by {user} from {ip}', - obj_id=appointment.id) self.save_m2m() appointment.services = [self.service] return appointment @@ -233,8 +227,6 @@ class NewEventForm(BaseForm): event.clean() if commit: event.save() - get_request().record('new-event', '{obj_id} created by {user} from {ip}', - obj_id=event.id) event.services = [self.service] return event diff --git a/calebasse/agenda/models.py b/calebasse/agenda/models.py index 83e7bd5..70937f8 100644 --- a/calebasse/agenda/models.py +++ b/calebasse/agenda/models.py @@ -360,8 +360,6 @@ class Event(models.Model): assert self.start_datetime is not None self.sanitize() # init periodicity fields super(Event, self).save(*args, **kwargs) - get_request().record('event-save', '{obj_id} saved by {user} from {ip}', - obj_id=self.id) self.acts_cleaning() def delete(self, *args, **kwargs): @@ -538,10 +536,6 @@ class EventWithAct(Event): def update_act(self, act): '''Update an act to match details of the meeting''' self.init_act(act) - changes = {'delta': self.timedelta(), 'act_type': self.act_type, - 'patient': self.patient, 'date': self.start_datetime.date(), - 'time': self.start_datetime.time(), 'parent': self} - get_request().record('act-update', '{obj_id} updated by {user} from {ip} with: {changes}', changes=changes) act.save() def init_act(self, act): @@ -558,7 +552,6 @@ class EventWithAct(Event): '''Force event_type to be patient meeting.''' self.event_type = EventType(id=1) super(EventWithAct, self).save(*args, **kwargs) - get_request().record('eventwithact-save', '{obj_id} saved by {user} from {ip}', obj_id=self.id) def is_event_absence(self): return self.act.is_absent() diff --git a/calebasse/common/__init__.py b/calebasse/common/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/calebasse/common/models.py b/calebasse/common/models.py new file mode 100644 index 0000000..a4e5148 --- /dev/null +++ b/calebasse/common/models.py @@ -0,0 +1,32 @@ +from django.db.models.signals import post_save, pre_delete +from ..middleware.request import get_request + +from calebasse.agenda.models import Event, EventWithAct, EventType +from calebasse.actes.models import ActValidationState, Act +from calebasse.dossiers.models import FileState, PatientRecord, PatientAddress, PatientContact +from calebasse.personnes.models import People, Worker, ExternalWorker, ExternalTherapist, Holiday + +def object_save(sender, **kwargs): + model_name = sender.__name__.lower() + if kwargs.get('created'): + tag = 'new-%s' % model_name + log = '{obj_id} created by {user} from {ip}' + else: + tag = '%s-save' % model_name + log = '{obj_id} saved by {user} from {ip}' + + obj_id = kwargs['instance'].id + get_request().record(tag, log, obj_id=obj_id) + +def object_delete(sender, **kwargs): + model_name = sender.__name__.lower() + get_request().record('delete-%s' % model_name, + '{obj_id} deleted by {user} from {ip}', + obj_id=kwargs['instance'].id) + +for model in (Event, EventWithAct, EventType, ActValidationState, Act, + FileState, PatientRecord, PatientAddress, PatientContact, + People, Worker, ExternalWorker, ExternalTherapist, Holiday): + post_save.connect(object_save, sender=model) + pre_delete.connect(object_delete, sender=model) + diff --git a/calebasse/common/views.py b/calebasse/common/views.py new file mode 100644 index 0000000..60f00ef --- /dev/null +++ b/calebasse/common/views.py @@ -0,0 +1 @@ +# Create your views here. diff --git a/calebasse/dossiers/models.py b/calebasse/dossiers/models.py index 2d78d66..8aeef4d 100644 --- a/calebasse/dossiers/models.py +++ b/calebasse/dossiers/models.py @@ -239,7 +239,6 @@ class FileState(models.Model): datetime(self.date_selected.year, self.date_selected.month, self.date_selected.day) super(FileState, self).save(**kwargs) - get_request().record('filestate-save', '{obj_id} saved by {user} from {ip}', obj_id=self.id) def __unicode__(self): return self.status.name + ' ' + str(self.date_selected) @@ -254,8 +253,6 @@ class FileState(models.Model): self.patient.save() obj_id = self.id super(FileState, self).delete(*args, **kwargs) - get_request().record('filestate-delete', '{obj_id} deleted by {user} from {ip}', - obj_id=obj_id) class PatientAddress(models.Model): @@ -297,7 +294,6 @@ class PatientAddress(models.Model): if self.city: self.display_name += self.city + ' ' super(PatientAddress, self).save(**kwargs) - get_request().record('patientaddress-save', '{obj_id} saved by {user} from {ip}', obj_id=self.id) class PatientContact(People): class Meta: @@ -576,7 +572,6 @@ class PatientRecord(ServiceLinkedAbstractModel, PatientContact): if not getattr(self, 'service', None): raise Exception('The field service is mandatory.') super(PatientRecord, self).save(*args, **kwargs) - get_request().record('patientrecord-save', '{obj_id} saved by {user} from {ip}', obj_id=self.id) def get_state(self): return self.last_state @@ -636,7 +631,6 @@ class PatientRecord(ServiceLinkedAbstractModel, PatientContact): if self.can_be_deleted(): obj_id = self.id super(PatientRecord, self).delete(*args, **kwargs) - get_request().record('patientrecord-delete', '{obj_id} by {user} from {ip}', obj_id=obj_id) def get_ondisk_directory(self, service): if not settings.PATIENT_FILES_BASE_DIRECTORY: @@ -1025,6 +1019,4 @@ def create_patient(first_name, last_name, service, creator, patient.save() patient.policyholder = patient.patientcontact patient.save() - get_request().record('new-patient', '{first_name} {last_name} ({id}) created by {user} from {ip}', - first_name=patient.first_name, last_name=patient.last_name, id=patient.id) return patient diff --git a/calebasse/personnes/models.py b/calebasse/personnes/models.py index aa8662f..bb0d158 100644 --- a/calebasse/personnes/models.py +++ b/calebasse/personnes/models.py @@ -51,7 +51,6 @@ class People(BaseModelMixin, models.Model): else: self.display_name = self.last_name.upper() super(People, self).save(**kwargs) - get_request().record('people-save', '{obj_id} saved by {user} from {ip}', obj_id=self.id) def __unicode__(self): return self.display_name @@ -96,7 +95,6 @@ class Worker(People): if not self.initials: self.initials = self.get_initials() super(Worker, self).save(**kwargs) - get_request().record('worker-save', '{obj_id} saved by {user} from {ip}', obj_id=self.id) def is_active(self): return self.enabled diff --git a/calebasse/settings.py b/calebasse/settings.py index 1ee7a4f..6b13ec1 100644 --- a/calebasse/settings.py +++ b/calebasse/settings.py @@ -164,6 +164,7 @@ INSTALLED_APPS = ( 'calebasse.personnes', 'calebasse.ressources', 'calebasse.statistics', + 'calebasse.common', 'calebasse.middleware.request', 'south', 'django_journal', diff --git a/setup.py b/setup.py index 7e44a5c..5d934f7 100755 --- a/setup.py +++ b/setup.py @@ -58,6 +58,7 @@ setup(name='calebasse', 'xhtml2pdf', 'M2Crypto', 'pycairo', + 'django_journal', ], dependency_links = [ 'http://django-swingtime.googlecode.com/files/django-swingtime-0.2.1.tar.gz#egg=django-swingtime-0.2.1', -- 2.0.1