docbow/docbow_project/docbow/signals.py

59 lines
2.3 KiB
Python

import logging
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 as _
import models
from logger_adapter import DjangoLoggerAdapter
from middleware import get_extra
db_logger = logging.getLogger('docbow.db')
auth_logger = logging.getLogger('docbow.auth')
def logged_in_handler(sender, request, user, **kwargs):
global auth_logger
new_logger = DjangoLoggerAdapter(auth_logger, request)
new_logger.info(_('logged in'))
def logged_out_handler(sender, request, user, **kwargs):
global auth_logger
new_logger = DjangoLoggerAdapter(auth_logger, request)
new_logger.info(_('logged out'))
def modified_data(sender, instance, created, raw, using, **kwargs):
global db_logger
if created:
msg = _('created %(model)s %(name)s')
else:
msg = _('modified %(model)s %(name)s')
extra = get_extra()
if hasattr(extra['user'], 'is_anonymous') and extra['user'].is_anonymous():
return
db_logger.info(msg, dict(model=unicode(sender._meta.verbose_name),
name=instance), extra=extra)
def list_m2m_changed_handler(sender, instance, action, reverse, model, pk_set, using, **kwargs):
global db_logger
msg = None
if action == 'post_add':
msg = _('added user %(user)s to list %(list)s')
elif action == 'post_remove':
msg = _('removed user %(user)s from list %(list)s')
elif action == 'post_clear':
msg = _('cleared list %(user)s%(list)s')
if msg:
db_logger.info(msg,
dict(user=', '.join(map(unicode, model.objects.filter(pk__in=pk_set or []))),
list=unicode(instance)), extra=get_extra())
user_logged_in.connect(logged_in_handler)
user_logged_out.connect(logged_out_handler)
db_post_save.connect(modified_data, sender=models.MailingList)
db_post_save.connect(modified_data, sender=auth_models.User)
db_post_save.connect(modified_data, sender=auth_models.Group)
db_post_save.connect(modified_data, sender=models.DocbowUser)
db_post_save.connect(modified_data, sender=models.DocbowGroup)
m2m_changed.connect(list_m2m_changed_handler, sender=models.MailingList.members.through)