Changeset View
Changeset View
Standalone View
Standalone View
swh/web/admin/deposit.py
# Copyright (C) 2018-2019 The Software Heritage developers | # Copyright (C) 2018-2021 The Software Heritage developers | ||||
# See the AUTHORS file at the top-level directory of this distribution | # See the AUTHORS file at the top-level directory of this distribution | ||||
# License: GNU Affero General Public License version 3, or any later version | # License: GNU Affero General Public License version 3, or any later version | ||||
# See top-level LICENSE file for more information | # See top-level LICENSE file for more information | ||||
import requests | |||||
from requests.auth import HTTPBasicAuth | |||||
import sentry_sdk | import sentry_sdk | ||||
from django.conf import settings | from django.conf import settings | ||||
from django.contrib.admin.views.decorators import staff_member_required | from django.contrib.admin.views.decorators import staff_member_required | ||||
from django.core.cache import cache | |||||
from django.core.paginator import Paginator | from django.core.paginator import Paginator | ||||
from django.http import JsonResponse | from django.http import JsonResponse | ||||
from django.shortcuts import render | from django.shortcuts import render | ||||
from swh.web.admin.adminurls import admin_route | from swh.web.admin.adminurls import admin_route | ||||
from swh.web.config import get_config | from swh.web.common.utils import get_deposits_list | ||||
config = get_config()["deposit"] | |||||
@admin_route(r"deposit/", view_name="admin-deposit") | @admin_route(r"deposit/", view_name="admin-deposit") | ||||
@staff_member_required(view_func=None, login_url=settings.LOGIN_URL) | @staff_member_required(view_func=None, login_url=settings.LOGIN_URL) | ||||
def _admin_origin_save(request): | def _admin_origin_save(request): | ||||
return render(request, "admin/deposit.html") | return render(request, "admin/deposit.html") | ||||
@admin_route(r"deposit/list/", view_name="admin-deposit-list") | @admin_route(r"deposit/list/", view_name="admin-deposit-list") | ||||
@staff_member_required(view_func=None, login_url=settings.LOGIN_URL) | @staff_member_required(view_func=None, login_url=settings.LOGIN_URL) | ||||
def _admin_deposit_list(request): | def _admin_deposit_list(request): | ||||
table_data = {} | table_data = {} | ||||
table_data["draw"] = int(request.GET["draw"]) | table_data["draw"] = int(request.GET["draw"]) | ||||
deposits_list_url = config["private_api_url"] + "deposits" | |||||
deposits_list_auth = HTTPBasicAuth( | |||||
config["private_api_user"], config["private_api_password"] | |||||
) | |||||
try: | try: | ||||
nb_deposits = requests.get( | deposits = get_deposits_list() | ||||
"%s?page_size=1" % deposits_list_url, auth=deposits_list_auth, timeout=30 | deposits_count = len(deposits) | ||||
).json()["count"] | |||||
deposits_data = cache.get("swh-deposit-list") | |||||
if not deposits_data or deposits_data["count"] != nb_deposits: | |||||
deposits_data = requests.get( | |||||
"%s?page_size=%s" % (deposits_list_url, nb_deposits), | |||||
auth=deposits_list_auth, | |||||
timeout=30, | |||||
).json() | |||||
cache.set("swh-deposit-list", deposits_data) | |||||
deposits = deposits_data["results"] | |||||
search_value = request.GET["search[value]"] | search_value = request.GET["search[value]"] | ||||
if search_value: | if search_value: | ||||
deposits = [ | deposits = [ | ||||
d | d | ||||
for d in deposits | for d in deposits | ||||
if any( | if any( | ||||
search_value.lower() in val | search_value.lower() in val | ||||
for val in [str(v).lower() for v in d.values()] | for val in [str(v).lower() for v in d.values()] | ||||
Show All 18 Lines | try: | ||||
deposits = sorted(deposits, key=lambda d: d[field_order] or "") | deposits = sorted(deposits, key=lambda d: d[field_order] or "") | ||||
if order_dir == "desc": | if order_dir == "desc": | ||||
deposits = list(reversed(deposits)) | deposits = list(reversed(deposits)) | ||||
length = int(request.GET["length"]) | length = int(request.GET["length"]) | ||||
page = int(request.GET["start"]) / length + 1 | page = int(request.GET["start"]) / length + 1 | ||||
paginator = Paginator(deposits, length) | paginator = Paginator(deposits, length) | ||||
data = paginator.page(page).object_list | data = paginator.page(page).object_list | ||||
table_data["recordsTotal"] = deposits_data["count"] | table_data["recordsTotal"] = deposits_count | ||||
table_data["recordsFiltered"] = len(deposits) | table_data["recordsFiltered"] = len(deposits) | ||||
table_data["data"] = [ | table_data["data"] = [ | ||||
{ | { | ||||
"id": d["id"], | "id": d["id"], | ||||
"external_id": d["external_id"], | "external_id": d["external_id"], | ||||
"reception_date": d["reception_date"], | "reception_date": d["reception_date"], | ||||
"status": d["status"], | "status": d["status"], | ||||
"status_detail": d["status_detail"], | "status_detail": d["status_detail"], | ||||
Show All 13 Lines |