signals: do not log modification to model done by code and not an user

This commit is contained in:
Benjamin Dauvergne 2013-10-18 10:57:07 +02:00
parent e68a56f6f2
commit 1c38b5ff45
2 changed files with 17 additions and 12 deletions

View File

@ -778,18 +778,6 @@ def guest_users():
def non_guest_users():
return User.objects.exclude(docbowprofile__is_guest=True)
# signals
from django.db.models.signals import m2m_changed
from django.dispatch import receiver
@receiver(m2m_changed, sender=User.groups.through)
def groups_changed(sender, instance, action, **kwargs):
'''When a user get a group, give it access to the administration.'''
if action.startswith('post'):
instance.is_staff = instance.groups.exists()
instance.save()
# do not remove me
# pylint: disable=W0611

View File

@ -1,7 +1,9 @@
from django.contrib.auth.models import User
from django.contrib.auth.signals import user_logged_in, user_logged_out
from django.db.models.signals import post_save as db_post_save, m2m_changed
from django.contrib.auth import models as auth_models
from django.utils.translation import ugettext_noop as N_
from django.dispatch import receiver
import django_journal
import models
@ -30,9 +32,13 @@ def logged_out_handler(sender, request, user, **kwargs):
user = user.user
django_journal.record('logout', msg, user=user, ip=extra['ip'], **kwargs)
do_log = True
def modified_data(sender, instance, created, raw, using, **kwargs):
global do_log
extra = middleware.get_extra()
if not do_log:
return
if hasattr(extra['user'], 'is_anonymous') and extra['user'].is_anonymous():
extra['user'] = '-'
if extra['user'] == middleware.NO_USER:
@ -68,6 +74,17 @@ def list_m2m_changed_handler(sender, instance, action, reverse, model, pk_set, u
django_journal.record(action, msg, list=instance, member=user,
ip=extra['ip'], user=extra['user'])
@receiver(m2m_changed, sender=User.groups.through)
def groups_changed(sender, instance, action, **kwargs):
'''When a user get a group, give it access to the administration.'''
global do_log
if action.startswith('post'):
try:
do_log = False
instance.is_staff = instance.groups.exists()
instance.save()
finally:
do_log = True
user_logged_in.connect(logged_in_handler)
user_logged_out.connect(logged_out_handler)