django_aws_ses/django_aws_ses/admin.py

125 lines
3.9 KiB
Python

from django.contrib import admin
from .models import (
AwsSesSettings,
SESStat,
BounceRecord,
AwsSesUserAddon,
ComplaintRecord,
SendRecord,
UnknownRecord,
BlackListedDomains,
)
class AdminEmailListFilter(admin.SimpleListFilter):
"""Filter records by email address containing a search term."""
title = 'email'
parameter_name = 'email'
def lookups(self, request, model_admin):
return (
(None, 'All'),
)
def queryset(self, request, queryset):
if self.value():
return queryset.filter(email__icontains=self.value())
return queryset
@admin.register(AwsSesSettings)
class AwsSesSettingsAdmin(admin.ModelAdmin):
"""Admin interface for AWS SES settings."""
model = AwsSesSettings
list_display = ('get_site', 'region_name')
list_display_links = ('get_site',)
search_fields = ('site__domain', 'region_name')
def get_site(self, obj):
"""Display the domain of the associated site."""
return obj.site.domain
get_site.short_description = 'Domain'
get_site.admin_order_field = 'site__domain'
@admin.register(AwsSesUserAddon)
class AwsSesUserAddonAdmin(admin.ModelAdmin):
"""Admin interface for user-specific AWS SES settings."""
model = AwsSesUserAddon
list_display = ('get_email', 'unsubscribe')
list_display_links = ('get_email',)
list_filter = ('unsubscribe',)
search_fields = ('user__email',)
def get_email(self, obj):
"""Display the user's email address."""
return obj.user.email
get_email.short_description = 'Email'
get_email.admin_order_field = 'user__email'
@admin.register(SESStat)
class SESStatAdmin(admin.ModelAdmin):
"""Admin interface for SES statistics."""
model = SESStat
list_display = ('date', 'delivery_attempts', 'bounces', 'complaints', 'rejects')
list_display_links = ('date',)
date_hierarchy = 'date'
ordering = ('-date',)
@admin.register(BounceRecord)
class BounceRecordAdmin(admin.ModelAdmin):
"""Admin interface for bounce records."""
model = BounceRecord
list_display = ('email', 'bounce_type', 'bounce_sub_type', 'status', 'timestamp')
list_display_links = ('email',)
list_filter = (AdminEmailListFilter, 'bounce_type', 'bounce_sub_type', 'status', 'timestamp')
search_fields = ('email', 'diagnostic_code')
date_hierarchy = 'timestamp'
@admin.register(ComplaintRecord)
class ComplaintRecordAdmin(admin.ModelAdmin):
"""Admin interface for complaint records."""
model = ComplaintRecord
list_display = ('email', 'sub_type', 'feedback_type', 'timestamp')
list_display_links = ('email',)
list_filter = (AdminEmailListFilter, 'sub_type', 'feedback_type', 'timestamp')
search_fields = ('email',)
date_hierarchy = 'timestamp'
@admin.register(SendRecord)
class SendRecordAdmin(admin.ModelAdmin):
"""Admin interface for send records."""
model = SendRecord
list_display = ('source', 'destination', 'subject', 'timestamp', 'status')
list_display_links = ('destination',)
list_filter = (AdminEmailListFilter, 'source', 'status', 'timestamp')
search_fields = ('source', 'destination', 'subject')
date_hierarchy = 'timestamp'
@admin.register(UnknownRecord)
class UnknownRecordAdmin(admin.ModelAdmin):
"""Admin interface for unknown SES event records."""
model = UnknownRecord
list_display = ('event_type', 'timestamp')
list_display_links = ('event_type',)
list_filter = ('event_type', 'timestamp')
search_fields = ('event_type', 'aws_data')
date_hierarchy = 'timestamp'
@admin.register(BlackListedDomains)
class BlackListedDomainsAdmin(admin.ModelAdmin):
"""Admin interface for blacklisted domains."""
model = BlackListedDomains
list_display = ('domain', 'timestamp')
list_display_links = ('domain',)
list_filter = ('timestamp',)
search_fields = ('domain',)
date_hierarchy = 'timestamp'