import json from django.http import HttpResponse, JsonResponse from django.http.request import HttpRequest from django.shortcuts import get_object_or_404, render from django.utils import timezone from django.utils.decorators import method_decorator from django.views.decorators.csrf import csrf_exempt from django.views.generic import View from webproj.thumbnailer.models import ErrorLog, Job, Log, PerformanceLog, ToJsonableMixin # Create your views here. @method_decorator(csrf_exempt, name='dispatch') class JobsView(View): def get(self, request: HttpRequest): job: Job = Job.objects.filter(taken_at=None, result=None).first() if job is None: job = Job.objects.filter(result=None).order_by('taken_at').first() if job is None: return HttpResponse('done') job.taken_at = timezone.now() job.save() return HttpResponse(f'{job.pk}') @method_decorator(csrf_exempt, name='dispatch') class JobView(View): def get(self, request: HttpRequest, job_id: int): job = get_object_or_404(Job, id=job_id) job.taken_at = timezone.now() job.save() return JsonResponse(job.to_jsonable(), safe=False) def post(self, request, job_id): job = get_object_or_404(Job, id=job_id) job.result = json.dumps(json.loads(request.body)) job.save() return HttpResponse('ok') class LogView(View): model = Log def post(self, request: HttpRequest): Logging = type(self).model logging = Logging() logging.sender = json.dumps(json.loads(request.POST['sender'])) logging.content = json.dumps(json.loads(request.POST['content'])) logging.save() return JsonResponse(logging.to_jsonable(), safe=False) def get(self, request: HttpRequest): return JsonResponse(list(map(ToJsonableMixin.to_jsonable, type(self).model.objects.all())), safe=False) @method_decorator(csrf_exempt, name='dispatch') class LogErrorView(LogView): model = ErrorLog @method_decorator(csrf_exempt, name='dispatch') class LogPerformanceView(LogView): model = PerformanceLog