#!/usr/bin/env python """ Model configuration in application ``django_mailbox`` for administration console. """ import logging from django.conf import settings from django.contrib import admin from django.utils.translation import gettext_lazy as _ from django_mailbox.models import MessageAttachment, Message, Mailbox from django_mailbox.signals import message_received from django_mailbox.utils import convert_header_to_unicode logger = logging.getLogger(__name__) def get_new_mail(mailbox_admin, request, queryset): queryset.get_new_mail() get_new_mail.short_description = _('Get new mail') def resend_message_received_signal(message_admin, request, queryset): for message in queryset.all(): logger.debug('Resending \'message_received\' signal for %s' % message) message_received.send(sender=message_admin, message=message) resend_message_received_signal.short_description = ( _('Re-send message received signal') ) class MailboxAdmin(admin.ModelAdmin): list_display = ( 'name', 'uri', 'from_email', 'active', 'last_polling', ) readonly_fields = ['last_polling', ] actions = [get_new_mail] class MessageAttachmentAdmin(admin.ModelAdmin): raw_id_fields = ('message', ) list_display = ('message', 'document',) class MessageAttachmentInline(admin.TabularInline): model = MessageAttachment extra = 0 class MessageAdmin(admin.ModelAdmin): def attachment_count(self, msg): return msg.attachments.count() attachment_count.short_description = _('Attachment count') def subject(self, msg): return convert_header_to_unicode(msg.subject) def envelope_headers(self, msg): email = msg.get_email_object() return '\n'.join( [('{}: {}'.format(h, v)) for h, v in email.items()] ) inlines = [ MessageAttachmentInline, ] list_display = ( 'subject', 'processed', 'read', 'mailbox', 'outgoing', 'attachment_count', ) ordering = ['-processed'] list_filter = ( 'mailbox', 'outgoing', 'processed', 'read', ) exclude = ( 'body', ) raw_id_fields = ( 'in_reply_to', ) readonly_fields = ( 'envelope_headers', 'text', 'html', ) actions = [resend_message_received_signal] if getattr(settings, 'DJANGO_MAILBOX_ADMIN_ENABLED', True): admin.site.register(Message, MessageAdmin) admin.site.register(MessageAttachment, MessageAttachmentAdmin) admin.site.register(Mailbox, MailboxAdmin)