Better tasks api endpoint

This commit is contained in:
Michael Shamoon
2022-05-23 15:22:14 -07:00
parent 61eb459e9e
commit 09f637a4cb
4 changed files with 35 additions and 56 deletions

View File

@@ -8,7 +8,7 @@ def init_paperless_tasks(apps, schema_editor):
PaperlessTask = apps.get_model("documents", "PaperlessTask")
Task = apps.get_model("django_q", "Task")
for task in Task.objects.all():
for task in Task.objects.filter(func="documents.tasks.consume_file"):
if not hasattr(task, "paperlesstask"):
paperlesstask = PaperlessTask.objects.create(
attempted_task=task,

View File

@@ -598,12 +598,29 @@ class UiSettingsViewSerializer(serializers.ModelSerializer):
return ui_settings
class TasksViewSerializer(serializers.Serializer):
class TasksViewSerializer(serializers.ModelSerializer):
class Meta:
model = PaperlessTask
depth = 1
fields = "__all__"
type = serializers.ChoiceField(
choices=["all", "incomplete", "complete", "failed"],
default="all",
)
type = serializers.SerializerMethodField()
def get_type(self, obj):
# just file tasks, for now
return "file"
status = serializers.SerializerMethodField()
def get_status(self, obj):
if obj.attempted_task is None:
return "incomplete"
elif obj.attempted_task.success:
return "complete"
elif not obj.attempted_task.success:
return "failed"
else:
return "unknown"
class AcknowledgeTasksViewSerializer(serializers.Serializer):

View File

@@ -46,6 +46,7 @@ from rest_framework.response import Response
from rest_framework.views import APIView
from rest_framework.viewsets import GenericViewSet
from rest_framework.viewsets import ModelViewSet
from rest_framework.viewsets import ReadOnlyModelViewSet
from rest_framework.viewsets import ViewSet
from .bulk_download import ArchiveOnlyStrategy
@@ -800,51 +801,18 @@ class UiSettingsView(GenericAPIView):
)
class TasksView(GenericAPIView):
class TasksViewSet(ReadOnlyModelViewSet):
permission_classes = (IsAuthenticated,)
serializer_class = TasksViewSerializer
def get(self, request, format=None):
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
tasks = (
PaperlessTask.objects.filter(
acknowledged=False,
)
.order_by("attempted_task__started")
.reverse()
)
incomplete_tasks = tasks.filter(attempted_task=None).values(
"id",
"task_id",
"name",
"created",
"acknowledged",
)
failed_tasks = tasks.filter(attempted_task__success=0).values(
"id",
"task_id",
"name",
"created",
"acknowledged",
)
completed_tasks = tasks.filter(attempted_task__success=1).values(
"id",
"task_id",
"name",
"created",
"acknowledged",
)
return Response(
{
"total": tasks.count(),
"incomplete": incomplete_tasks,
"failed": failed_tasks,
"completed": completed_tasks,
},
queryset = (
PaperlessTask.objects.filter(
acknowledged=False,
)
.order_by("created")
.reverse()
)
class AcknowledgeTasksView(GenericAPIView):
@@ -859,11 +827,9 @@ class AcknowledgeTasksView(GenericAPIView):
tasks = serializer.validated_data.get("tasks")
try:
logger.debug(tasks)
result = PaperlessTask.objects.filter(id__in=tasks).update(
acknowledged=True,
)
return Response({"result": result})
pass
except Exception as e:
return HttpResponseBadRequest(str(e))
except Exception:
return HttpResponseBadRequest()