#!/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)