mirror of
https://github.com/django-q2/django-q2.git
synced 2026-09-15 21:47:53 +08:00
* Black linting * Adding Black to dev dependencies and upping minimal python to 3.6.2 for compatibility * Updating packages * Removing pip-tools input and exporting requirements with poetry * Deleting old setup files and test runner * Trying 1.3.7 * Looser extras requirements to prevent conflicts * Sorted imports with isort * Added iSort to dev dependencies * Fixes localtime for naive setups
113 lines
3.0 KiB
Python
113 lines
3.0 KiB
Python
"""Admin module for Django."""
|
|
from django.contrib import admin
|
|
from django.utils.translation import gettext_lazy as _
|
|
|
|
from django_q.conf import Conf, croniter
|
|
from django_q.models import Failure, OrmQ, Schedule, Success
|
|
from django_q.tasks import async_task
|
|
|
|
|
|
class TaskAdmin(admin.ModelAdmin):
|
|
"""model admin for success tasks."""
|
|
|
|
list_display = ("name", "func", "started", "stopped", "time_taken", "group")
|
|
|
|
def has_add_permission(self, request):
|
|
"""Don't allow adds."""
|
|
return False
|
|
|
|
def get_queryset(self, request):
|
|
"""Only show successes."""
|
|
qs = super(TaskAdmin, self).get_queryset(request)
|
|
return qs.filter(success=True)
|
|
|
|
search_fields = ("name", "func", "group")
|
|
readonly_fields = []
|
|
list_filter = ("group",)
|
|
|
|
def get_readonly_fields(self, request, obj=None):
|
|
"""Set all fields readonly."""
|
|
return list(self.readonly_fields) + [field.name for field in obj._meta.fields]
|
|
|
|
|
|
def retry_failed(FailAdmin, request, queryset):
|
|
"""Submit selected tasks back to the queue."""
|
|
for task in queryset:
|
|
async_task(task.func, *task.args or (), hook=task.hook, **task.kwargs or {})
|
|
task.delete()
|
|
|
|
|
|
retry_failed.short_description = _("Resubmit selected tasks to queue")
|
|
|
|
|
|
class FailAdmin(admin.ModelAdmin):
|
|
"""model admin for failed tasks."""
|
|
|
|
list_display = ("name", "func", "started", "stopped", "short_result")
|
|
|
|
def has_add_permission(self, request):
|
|
"""Don't allow adds."""
|
|
return False
|
|
|
|
actions = [retry_failed]
|
|
search_fields = ("name", "func")
|
|
list_filter = ("group",)
|
|
readonly_fields = []
|
|
|
|
def get_readonly_fields(self, request, obj=None):
|
|
"""Set all fields readonly."""
|
|
return list(self.readonly_fields) + [field.name for field in obj._meta.fields]
|
|
|
|
|
|
class ScheduleAdmin(admin.ModelAdmin):
|
|
"""model admin for schedules"""
|
|
|
|
list_display = (
|
|
"id",
|
|
"name",
|
|
"func",
|
|
"schedule_type",
|
|
"repeats",
|
|
"cluster",
|
|
"next_run",
|
|
"last_run",
|
|
"success",
|
|
)
|
|
|
|
# optional cron strings
|
|
if not croniter:
|
|
readonly_fields = ("cron",)
|
|
|
|
list_filter = ("next_run", "schedule_type", "cluster")
|
|
search_fields = ("func",)
|
|
list_display_links = ("id", "name")
|
|
|
|
|
|
class QueueAdmin(admin.ModelAdmin):
|
|
"""queue admin for ORM broker"""
|
|
|
|
list_display = ("id", "key", "task_id", "name", "func", "lock")
|
|
|
|
def save_model(self, request, obj, form, change):
|
|
obj.save(using=Conf.ORM)
|
|
|
|
def delete_model(self, request, obj):
|
|
obj.delete(using=Conf.ORM)
|
|
|
|
def get_queryset(self, request):
|
|
return super(QueueAdmin, self).get_queryset(request).using(Conf.ORM)
|
|
|
|
def has_add_permission(self, request):
|
|
"""Don't allow adds."""
|
|
return False
|
|
|
|
list_filter = ("key",)
|
|
|
|
|
|
admin.site.register(Schedule, ScheduleAdmin)
|
|
admin.site.register(Success, TaskAdmin)
|
|
admin.site.register(Failure, FailAdmin)
|
|
|
|
if Conf.ORM or Conf.TESTING:
|
|
admin.site.register(OrmQ, QueueAdmin)
|