59 lines
2.3 KiB
Python
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)
|