Source code for swh.web.save_bulk.views
# Copyright (C) 2024 The Software Heritage developers
# See the AUTHORS file at the top-level directory of this distribution
# License: GNU Affero General Public License version 3, or any later version
# See top-level LICENSE file for more information
from django.core.exceptions import ObjectDoesNotExist
from django.core.paginator import EmptyPage, Paginator
from django.http.request import HttpRequest
from django.http.response import JsonResponse
from swh.web.save_bulk.models import SaveBulkOrigin, SaveBulkRequest
from swh.web.utils.exc import NotFoundExc
[docs]
def api_save_bulk_origins_list(request: HttpRequest, request_id: str) -> JsonResponse:
"""View that returns a list of origins and their visit types, submitted by a user
through a POST request to the /api/1/origin/save/bulk/ endpoint, in a paginated
way. Its purpose is to be consumed by the save-bulk lister that checks origins
can be archived and schedules their loadings.
"""
try:
save_bulk_request = SaveBulkRequest.objects.get(id=request_id)
except ObjectDoesNotExist:
raise NotFoundExc(f"Bulk save request with id {request_id} not found!")
page_num = int(request.GET.get("page", 1))
per_page = int(request.GET.get("per_page", 1000))
per_page = min(per_page, 1000)
origins = SaveBulkOrigin.objects.filter(requests__in=[save_bulk_request])
paginator = Paginator(origins.order_by("origin_url"), per_page)
try:
origins_list = paginator.page(page_num).object_list
except EmptyPage:
origins_list = []
return JsonResponse(
[
{"origin_url": origin.origin_url, "visit_type": origin.visit_type}
for origin in origins_list
],
safe=False,
)