Provide proper Error Pages
Some checks failed
CI / test (pull_request) Failing after 30s
API CI / api-tests (pull_request) Failing after 44s

This commit is contained in:
Tim Lorsbach
2026-07-17 10:34:06 +02:00
parent e5e0dcee3b
commit 230026147e

View File

@ -2,7 +2,7 @@ import base64
import requests
from django.conf import settings as s
from django.http import HttpResponse, HttpResponseBadRequest
from django.http import HttpResponse, HttpResponseBadRequest, HttpResponseNotAllowed
from django.shortcuts import redirect
from bayer.models import PESCompound
@ -36,27 +36,49 @@ def create_pes(request, package_uuid):
try:
pes_data = fetch_pes(request, pes_link)
except ValueError as e:
return HttpResponseBadRequest(f"Could not fetch PES data for {pes_link}")
return error(
request,
"Could not fetch PES",
f"Could not fetch PES data for {pes_link}"
)
classification = pes_data.get("classificationLevel", "")
if "secret" == classification.lower():
if current_package.classification_level != Package.Classification.SECRET:
return HttpResponseBadRequest("Cannot create PESs for non-secret packages.")
return error(
request,
"Classification Mismatch!",
"Cannot create secret PESs in non-secret packages."
)
data_pools = pes_data.get("dataPools")
if data_pools:
if s.DATA_POOL_MAPPING[current_package.data_pool.name] not in data_pools:
return HttpResponseBadRequest(
f"PES data pool {s.DATA_POOL_MAPPING[current_package.data_pool.name]} not found in PES data")
if (current_package.data_pool.name not in s.DATA_POOL_MAPPING
or s.DATA_POOL_MAPPING[current_package.data_pool.name] not in data_pools):
if current_package.data_pool.name not in s.DATA_POOL_MAPPING:
detail = f"Data pool {current_package.data_pool.name} not found in Mapping."
else:
detail = f"PES data pool {s.DATA_POOL_MAPPING[current_package.data_pool.name]} not found in PES data"
return error(
request,
"Invalid PES data",
detail
)
pes = PESCompound.create(current_package, pes_data, compound_name, compound_description)
return redirect(pes.url)
else:
return HttpResponseBadRequest("Please provide a PES link.")
return error(
request,
"No PES link received",
"Please provide a PES link."
)
else:
pass
return HttpResponseNotAllowed(["POST"])
@package_permission_required()
@ -82,23 +104,45 @@ def create_pes_node(request, package_uuid, pathway_uuid):
try:
pes_data = fetch_pes(request, pes_link)
except ValueError as e:
return HttpResponseBadRequest(f"Could not fetch PES data for {pes_link}")
return error(
request,
"Could not fetch PES",
f"Could not fetch PES data for {pes_link}"
)
classification = pes_data.get("classificationLevel", "")
if "secret" == classification.lower():
if current_package.classification_level != Package.Classification.SECRET:
return HttpResponseBadRequest("Cannot create PESs for non-secret packages.")
return error(
request,
"Classification Mismatch!",
"Cannot create secret PESs in non-secret packages."
)
data_pools = pes_data.get("dataPools")
if data_pools:
if s.DATA_POOL_MAPPING[current_package.data_pool.name] not in data_pools:
return HttpResponseBadRequest(
f"PES data pool {s.DATA_POOL_MAPPING[current_package.data_pool.name]} not found in PES data")
if (current_package.data_pool.name not in s.DATA_POOL_MAPPING
or s.DATA_POOL_MAPPING[current_package.data_pool.name] not in data_pools):
if current_package.data_pool.name not in s.DATA_POOL_MAPPING:
detail = f"Data pool {current_package.data_pool.name} not found in Mapping."
else:
detail = f"PES data pool {s.DATA_POOL_MAPPING[current_package.data_pool.name]} not found in PES data"
return error(
request,
"Invalid PES data",
detail
)
pes = PESCompound.create(current_package, pes_data, compound_name, compound_description)
node_qs = Node.objects.filter(pathway=current_pathway, default_node_label=pes.default_structure)
node_qs = Node.objects.filter(
pathway=current_pathway,
default_node_label=pes.default_structure
)
if node_qs.exists():
return redirect(current_pathway.url)
@ -116,9 +160,13 @@ def create_pes_node(request, package_uuid, pathway_uuid):
return redirect(current_pathway.url)
else:
return HttpResponseBadRequest("Please provide a PES link.")
return error(
request,
"No PES link received",
"Please provide a PES link."
)
else:
pass
return HttpResponseNotAllowed(["POST"])
def fetch_pes(request, pes_url) -> dict: