mirror of
https://github.com/meeb/tubesync.git
synced 2025-06-22 13:06:34 +00:00
Allow filtering tasks by source
This commit is contained in:
parent
fdbea30f74
commit
b31e26b964
@ -745,40 +745,61 @@ class TasksView(ListView):
|
|||||||
context_object_name = 'tasks'
|
context_object_name = 'tasks'
|
||||||
paginate_by = settings.TASKS_PER_PAGE
|
paginate_by = settings.TASKS_PER_PAGE
|
||||||
messages = {
|
messages = {
|
||||||
|
'filter': _('Viewing tasks filtered for source: <strong>{name}</strong>'),
|
||||||
'reset': _('All tasks have been reset'),
|
'reset': _('All tasks have been reset'),
|
||||||
}
|
}
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
|
self.filter_source = None
|
||||||
self.message = None
|
self.message = None
|
||||||
super().__init__(*args, **kwargs)
|
super().__init__(*args, **kwargs)
|
||||||
|
|
||||||
def dispatch(self, request, *args, **kwargs):
|
def dispatch(self, request, *args, **kwargs):
|
||||||
message_key = request.GET.get('message', '')
|
message_key = request.GET.get('message', '')
|
||||||
self.message = self.messages.get(message_key, '')
|
self.message = self.messages.get(message_key, '')
|
||||||
|
filter_by = request.GET.get('filter', '')
|
||||||
|
if filter_by:
|
||||||
|
try:
|
||||||
|
self.filter_source = Source.objects.get(pk=filter_by)
|
||||||
|
except Source.DoesNotExist:
|
||||||
|
self.filter_source = None
|
||||||
|
if not message_key or 'filter' == message_key:
|
||||||
|
message = self.messages.get('filter', '')
|
||||||
|
self.message = message.format(
|
||||||
|
name=self.filter_source.name
|
||||||
|
)
|
||||||
|
|
||||||
return super().dispatch(request, *args, **kwargs)
|
return super().dispatch(request, *args, **kwargs)
|
||||||
|
|
||||||
def get_queryset(self):
|
def get_queryset(self):
|
||||||
|
qs = Task.objects.all()
|
||||||
|
if self.filter_source:
|
||||||
|
qs = qs.filter(queue=str(self.filter_source.pk))
|
||||||
order = getattr(settings,
|
order = getattr(settings,
|
||||||
'BACKGROUND_TASK_PRIORITY_ORDERING',
|
'BACKGROUND_TASK_PRIORITY_ORDERING',
|
||||||
'DESC'
|
'DESC'
|
||||||
)
|
)
|
||||||
prefix = '-' if 'ASC' != order else ''
|
prefix = '-' if 'ASC' != order else ''
|
||||||
_priority = f'{prefix}priority'
|
_priority = f'{prefix}priority'
|
||||||
return Task.objects.all().order_by(
|
return qs.order_by(
|
||||||
_priority,
|
_priority,
|
||||||
'run_at'
|
'run_at'
|
||||||
)
|
)
|
||||||
|
|
||||||
def get_context_data(self, *args, **kwargs):
|
def get_context_data(self, *args, **kwargs):
|
||||||
data = super().get_context_data(*args, **kwargs)
|
data = super().get_context_data(*args, **kwargs)
|
||||||
|
now = timezone.now()
|
||||||
|
qs = Task.objects.all()
|
||||||
|
|
||||||
|
# Add to context data from ListView
|
||||||
data['message'] = self.message
|
data['message'] = self.message
|
||||||
queryset = self.get_queryset()
|
data['source'] = self.filter_source
|
||||||
data['running'] = []
|
data['running'] = []
|
||||||
data['errors'] = []
|
data['errors'] = []
|
||||||
data['scheduled'] = []
|
data['scheduled'] = []
|
||||||
data['total_scheduled'] = queryset.filter(locked_at__isnull=True).count()
|
data['total_scheduled'] = qs.filter(locked_at__isnull=True).count()
|
||||||
now = timezone.now()
|
|
||||||
for task in queryset.filter(locked_at__isnull=False):
|
for task in qs.filter(locked_at__isnull=False):
|
||||||
# There was broken logic in `Task.objects.locked()`, work around it.
|
# There was broken logic in `Task.objects.locked()`, work around it.
|
||||||
# With that broken logic, the tasks never resume properly.
|
# With that broken logic, the tasks never resume properly.
|
||||||
# This check unlocks the tasks without a running process.
|
# This check unlocks the tasks without a running process.
|
||||||
@ -806,6 +827,7 @@ class TasksView(ListView):
|
|||||||
data['errors'].append(task)
|
data['errors'].append(task)
|
||||||
else:
|
else:
|
||||||
data['scheduled'].append(task)
|
data['scheduled'].append(task)
|
||||||
|
|
||||||
for task in data['tasks']:
|
for task in data['tasks']:
|
||||||
obj, url = map_task_to_instance(task)
|
obj, url = map_task_to_instance(task)
|
||||||
if not obj:
|
if not obj:
|
||||||
@ -821,6 +843,7 @@ class TasksView(ListView):
|
|||||||
setattr(task, 'url', url)
|
setattr(task, 'url', url)
|
||||||
setattr(task, 'run_now', task.run_at < now)
|
setattr(task, 'run_now', task.run_at < now)
|
||||||
data['scheduled'].append(task)
|
data['scheduled'].append(task)
|
||||||
|
|
||||||
return data
|
return data
|
||||||
|
|
||||||
|
|
||||||
@ -850,10 +873,10 @@ class CompletedTasksView(ListView):
|
|||||||
return super().dispatch(request, *args, **kwargs)
|
return super().dispatch(request, *args, **kwargs)
|
||||||
|
|
||||||
def get_queryset(self):
|
def get_queryset(self):
|
||||||
q = CompletedTask.objects.all()
|
qs = CompletedTask.objects.all()
|
||||||
if self.filter_source:
|
if self.filter_source:
|
||||||
q = q.filter(queue=str(self.filter_source.pk))
|
qs = qs.filter(queue=str(self.filter_source.pk))
|
||||||
return q.order_by('-run_at')
|
return qs.order_by('-run_at')
|
||||||
|
|
||||||
def get_context_data(self, *args, **kwargs):
|
def get_context_data(self, *args, **kwargs):
|
||||||
data = super().get_context_data(*args, **kwargs)
|
data = super().get_context_data(*args, **kwargs)
|
||||||
@ -862,11 +885,10 @@ class CompletedTasksView(ListView):
|
|||||||
error_message = get_error_message(task)
|
error_message = get_error_message(task)
|
||||||
setattr(task, 'error_message', error_message)
|
setattr(task, 'error_message', error_message)
|
||||||
data['message'] = ''
|
data['message'] = ''
|
||||||
data['source'] = None
|
data['source'] = self.filter_source
|
||||||
if self.filter_source:
|
if self.filter_source:
|
||||||
message = str(self.messages.get('filter', ''))
|
message = str(self.messages.get('filter', ''))
|
||||||
data['message'] = message.format(name=self.filter_source.name)
|
data['message'] = message.format(name=self.filter_source.name)
|
||||||
data['source'] = self.filter_source
|
|
||||||
return data
|
return data
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user