Changeset View
Changeset View
Standalone View
Standalone View
swh/web/misc/origin_save.py
Show All 9 Lines | |||||
from django.http import HttpResponse, HttpResponseForbidden | from django.http import HttpResponse, HttpResponseForbidden | ||||
from django.shortcuts import render | from django.shortcuts import render | ||||
from rest_framework.decorators import api_view, authentication_classes | from rest_framework.decorators import api_view, authentication_classes | ||||
from swh.web.common.exc import ForbiddenExc | from swh.web.common.exc import ForbiddenExc | ||||
from swh.web.common.models import SaveOriginRequest | from swh.web.common.models import SaveOriginRequest | ||||
from swh.web.common.origin_save import ( | from swh.web.common.origin_save import ( | ||||
create_save_origin_request, get_savable_origin_types, | create_save_origin_request, get_savable_visit_types, | ||||
get_save_origin_requests_from_queryset | get_save_origin_requests_from_queryset | ||||
) | ) | ||||
from swh.web.common.throttling import throttle_scope | from swh.web.common.throttling import throttle_scope | ||||
from swh.web.common.utils import EnforceCSRFAuthentication | from swh.web.common.utils import EnforceCSRFAuthentication | ||||
def _origin_save_view(request): | def _origin_save_view(request): | ||||
return render(request, 'misc/origin-save.html', | return render(request, 'misc/origin-save.html', | ||||
{'heading': ('Request the saving of a software origin into ' | {'heading': ('Request the saving of a software origin into ' | ||||
'the archive')}) | 'the archive')}) | ||||
@api_view(['POST']) | @api_view(['POST']) | ||||
@authentication_classes((EnforceCSRFAuthentication, )) | @authentication_classes((EnforceCSRFAuthentication, )) | ||||
@throttle_scope('swh_save_origin') | @throttle_scope('swh_save_origin') | ||||
def _origin_save_request(request, origin_type, origin_url): | def _origin_save_request(request, visit_type, origin_url): | ||||
""" | """ | ||||
This view is called through AJAX from the save code now form of swh-web. | This view is called through AJAX from the save code now form of swh-web. | ||||
We use DRF here as we want to rate limit the number of submitted requests | We use DRF here as we want to rate limit the number of submitted requests | ||||
per user to avoid being possibly flooded by bots. | per user to avoid being possibly flooded by bots. | ||||
""" | """ | ||||
try: | try: | ||||
response = json.dumps(create_save_origin_request(origin_type, | response = json.dumps(create_save_origin_request(visit_type, | ||||
origin_url), | origin_url), | ||||
separators=(',', ': ')) | separators=(',', ': ')) | ||||
return HttpResponse(response, content_type='application/json') | return HttpResponse(response, content_type='application/json') | ||||
except ForbiddenExc as exc: | except ForbiddenExc as exc: | ||||
return HttpResponseForbidden(str(exc)) | return HttpResponseForbidden(str(exc)) | ||||
def _origin_save_types_list(request): | def _visit_save_types_list(request): | ||||
origin_types = json.dumps(get_savable_origin_types(), | visit_types = json.dumps(get_savable_visit_types(), | ||||
separators=(',', ': ')) | separators=(',', ': ')) | ||||
return HttpResponse(origin_types, content_type='application/json') | return HttpResponse(visit_types, content_type='application/json') | ||||
def _origin_save_requests_list(request, status): | def _origin_save_requests_list(request, status): | ||||
if status != 'all': | if status != 'all': | ||||
save_requests = SaveOriginRequest.objects.filter(status=status) | save_requests = SaveOriginRequest.objects.filter(status=status) | ||||
else: | else: | ||||
save_requests = SaveOriginRequest.objects.all() | save_requests = SaveOriginRequest.objects.all() | ||||
Show All 15 Lines | def _origin_save_requests_list(request, status): | ||||
length = int(request.GET['length']) | length = int(request.GET['length']) | ||||
page = int(request.GET['start']) / length + 1 | page = int(request.GET['start']) / length + 1 | ||||
save_requests = get_save_origin_requests_from_queryset(save_requests) | save_requests = get_save_origin_requests_from_queryset(save_requests) | ||||
if search_value: | if search_value: | ||||
save_requests = \ | save_requests = \ | ||||
[sr for sr in save_requests | [sr for sr in save_requests | ||||
if search_value.lower() in sr['save_request_status'].lower() | if search_value.lower() in sr['save_request_status'].lower() | ||||
or search_value.lower() in sr['save_task_status'].lower() | or search_value.lower() in sr['save_task_status'].lower() | ||||
or search_value.lower() in sr['origin_type'].lower() | or search_value.lower() in sr['visit_type'].lower() | ||||
or search_value.lower() in sr['origin_url'].lower()] | or search_value.lower() in sr['origin_url'].lower()] | ||||
table_data['recordsFiltered'] = len(save_requests) | table_data['recordsFiltered'] = len(save_requests) | ||||
paginator = Paginator(save_requests, length) | paginator = Paginator(save_requests, length) | ||||
table_data['data'] = paginator.page(page).object_list | table_data['data'] = paginator.page(page).object_list | ||||
table_data_json = json.dumps(table_data, separators=(',', ': ')) | table_data_json = json.dumps(table_data, separators=(',', ': ')) | ||||
return HttpResponse(table_data_json, content_type='application/json') | return HttpResponse(table_data_json, content_type='application/json') | ||||
urlpatterns = [ | urlpatterns = [ | ||||
url(r'^save/$', _origin_save_view, name='origin-save'), | url(r'^save/$', _origin_save_view, name='origin-save'), | ||||
url(r'^save/(?P<origin_type>.+)/url/(?P<origin_url>.+)/$', | url(r'^save/(?P<visit_type>.+)/url/(?P<origin_url>.+)/$', | ||||
_origin_save_request, name='origin-save-request'), | _origin_save_request, name='origin-save-request'), | ||||
url(r'^save/types/list/$', _origin_save_types_list, | url(r'^save/types/list/$', _visit_save_types_list, | ||||
name='origin-save-types-list'), | name='origin-save-types-list'), | ||||
url(r'^save/requests/list/(?P<status>.+)/$', _origin_save_requests_list, | url(r'^save/requests/list/(?P<status>.+)/$', _origin_save_requests_list, | ||||
name='origin-save-requests-list'), | name='origin-save-requests-list'), | ||||
] | ] |