67 lines
2.1 KiB
Python
67 lines
2.1 KiB
Python
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
|