From 51f31dd7dfd62c2d9de75e83ccf1727190514157 Mon Sep 17 00:00:00 2001 From: Étienne Loks Date: Mon, 9 Sep 2019 00:05:51 +0200 Subject: Serialization: manage export action in admin - optimizations --- ishtar_common/admin.py | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) (limited to 'ishtar_common/admin.py') diff --git a/ishtar_common/admin.py b/ishtar_common/admin.py index 4449f7ba4..7da8265cd 100644 --- a/ishtar_common/admin.py +++ b/ishtar_common/admin.py @@ -75,6 +75,9 @@ from archaeological_finds import forms as find_forms, \ forms_treatments as treatment_forms from archaeological_warehouse import forms as warehouse_forms +from ishtar_common.tasks import launch_export + + csrf_protect_m = method_decorator(csrf_protect) @@ -1399,6 +1402,51 @@ class AdministrationTaskAdmin(admin.ModelAdmin): admin_site.register(models.AdministrationTask, AdministrationTaskAdmin) +def launch_export_action(modeladmin, request, queryset): + model = modeladmin.model + back_url = reverse( + 'admin:%s_%s_changelist' % ( + model._meta.app_label, + model._meta.model_name) + ) + '?' + urllib.parse.urlencode(request.GET) + if queryset.count() != 1: + messages.add_message( + request, messages.ERROR, str(_("Select only one task.")) + ) + return HttpResponseRedirect(back_url) + + export_task = queryset.all()[0] + + if export_task.state != "C": + messages.add_message( + request, messages.ERROR, str( + _("Export already exported/scheduled.")) + ) + return HttpResponseRedirect(back_url) + + export_task.state = "S" + export_task.save() + + if not settings.USE_BACKGROUND_TASK: + return launch_export(export_task) + return launch_export.delay(export_task) + + +launch_export_action.short_description = _("Launch export") + + +class ExportTaskAdmin(admin.ModelAdmin): + readonly_fields = ("result", ) + exclude = ('creation_date', 'launch_date', 'finished_date') + list_display = ["label", 'state', 'creation_date', 'launch_date', + 'finished_date'] + list_filter = ['state'] + actions = [launch_export_action] + + +admin_site.register(models.ExportTask, ExportTaskAdmin) + + class UserProfileAdmin(admin.ModelAdmin): list_display = ['person', 'profile_type', 'area_labels'] list_filter = ['profile_type'] -- cgit v1.2.3