1
0
Fork 1
mirror of https://github.com/coddingtonbear/django-mailbox.git synced 2026-07-10 06:48:19 +02:00
django-mailbox/django_mailbox2/admin.py
2021-02-08 23:39:19 -05:00

109 lines
2.6 KiB
Python

#!/usr/bin/env python
"""
Model configuration in application ``django_mailbox2`` 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_mailbox2.models import MessageAttachment, Message, Mailbox
from django_mailbox2.signals import message_received
from django_mailbox2.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)