add cancel_job API call (Issue #86)

site-osm-baustelle
Hartmut Holzgraefe 2022-08-17 15:48:19 +00:00
rodzic 24c2e20e70
commit 9ae8a43260
2 zmienionych plików z 29 dodań i 1 usunięć

Wyświetl plik

@ -25,7 +25,7 @@ import json
from django.core.exceptions import ValidationError
from django.core.files import File
from django.core.files.base import ContentFile
from django.http import HttpResponseRedirect, HttpResponseBadRequest, HttpResponseNotFound, HttpResponse, HttpResponseNotAllowed, Http404
from django.http import HttpResponseRedirect, HttpResponseBadRequest, HttpResponseNotFound, HttpResponse, HttpResponseNotAllowed, HttpResponseForbidden, Http404
from django.forms.models import model_to_dict
from django.shortcuts import get_object_or_404
from django.db import connections
@ -621,3 +621,29 @@ def _process_poi_file(file):
raise RuntimeError('Cannot parse POI file: %s' % e)
return result
def cancel_job(request):
"""API handler for canceling rendering requests"""
if request.method != 'POST':
return HttpResponseNotAllowed(['POST'])
if request.content_type == 'application/json':
input = json.loads(request.body.decode('utf-8-sig'))
else:
input = json.loads(request.POST['job'])
if not "id" in input or not "nonce" in input:
return HttpResponseBadRequest()
job = get_object_or_404(models.MapRenderingJob, id = input['id'])
reply = model_to_dict(job)
if input['nonce'] != reply['nonce']:
return HttpResponseForbidden()
if job.is_waiting():
job.cancel()
return HttpResponse('')

Wyświetl plik

@ -108,6 +108,7 @@ urlpatterns = [
url(r'^apis/job-stati', apis.job_stati),
url(r'^apis/jobs$', apis.jobs),
url(r'^apis/jobs/(\d*)$', apis.jobs),
url(r'^apis/cancel_job$', apis.cancel_job),
# versioned
url(r'^apis/v1/paper_formats', apis.paper_formats),
@ -117,6 +118,7 @@ urlpatterns = [
url(r'^apis/v1/job-stati', apis.job_stati),
url(r'^apis/v1/jobs$', apis.jobs),
url(r'^apis/v1/jobs/(\d*)$', apis.jobs),
url(r'^apis/v1/cancel_job$', apis.cancel_job),
# Feeds
url(r'feeds/maps/$', feeds.MapsFeed(), name='rss-feed'),