This repository has been archived on 2023-02-21. You can view files and clone it, but cannot push or open issues or pull requests.
portail-citoyen-announces/portail_citoyen_announces/admin.py

83 lines
2.4 KiB
Python

import os
from django.contrib import admin
from django.contrib.sites.models import get_current_site
from django.db import connection
import models
import transports
from django.utils.translation import ugettext_lazy as _
class SendingAction(object):
__name__ = 'sending action'
def __init__(self, mode):
self.mode = mode
self.__name__ = mode
@property
def short_description(self):
transport = transports.get_transport(self.mode)
display_name = getattr(transport, 'display_name', transport.identifier)
return _('Send by {0}').format(display_name)
def __call__(self, modeladmin, request, queryset):
pid = os.fork()
if pid != 0:
connection.close()
return
connection.close()
transport = transports.get_transport(self.mode)
for announce in queryset.select_related():
transport.send(announce)
def transport_actions():
return [SendingAction(transport.identifier)
for transport in transports.get_transports() if hasattr(transport, 'send')]
class SentInlineAdmin(admin.TabularInline):
model = models.Sent
extra = 0
can_delete = False
fields = [ 'time', 'transport', 'result' ]
readonly_fields = [ 'time', 'transport', 'result' ]
def has_add_permission(self, request):
return False
class AnnounceAdmin(admin.ModelAdmin):
actions = transport_actions()
list_display = ['title', 'category', 'extract', 'publication_time',
'expiration_time', 'hidden', 'sent' ]
inlines = ( SentInlineAdmin, )
def extract(self, instance):
return instance.text[:60]
extract.short_description = _('extract')
def sent(self, instance):
return u', '.join(instance.sent_set.values_list('transport', flat=True).distinct())
sent.short_description = _('sent')
class CategoryAdmin(admin.ModelAdmin):
list_display = [ 'name', 'identifier' ]
def get_queryset(self, request):
qs = super(CategoryAdmin, self).get_queryset(request)
qs.filter(site=get_current_site(request))
return qs
class SubscriptionAdmin(admin.ModelAdmin):
list_filter = [ 'category' ]
list_display = [ 'category', 'transport', 'real_identifier', 'user_display_name', 'created' ]
admin.site.register(models.Announce, AnnounceAdmin)
admin.site.register(models.Category, CategoryAdmin)
admin.site.register(models.Subscription, SubscriptionAdmin)