From bf63fc2ae603119778cf13be7adff148ad819a34 Mon Sep 17 00:00:00 2001 From: aldbr Date: Thu, 30 Jan 2025 17:05:13 +0100 Subject: [PATCH] fix(routers): status 500 when malformed jdls are given --- .../src/diracx/routers/jobs/submission.py | 36 +++++++++++-------- diracx-routers/tests/test_job_manager.py | 12 +++++++ 2 files changed, 33 insertions(+), 15 deletions(-) diff --git a/diracx-routers/src/diracx/routers/jobs/submission.py b/diracx-routers/src/diracx/routers/jobs/submission.py index 4cec9bed..cc1e0dea 100644 --- a/diracx-routers/src/diracx/routers/jobs/submission.py +++ b/diracx-routers/src/diracx/routers/jobs/submission.py @@ -5,7 +5,7 @@ from http import HTTPStatus from typing import Annotated -from fastapi import Body, Depends, HTTPException +from fastapi import Body, Depends, HTTPException, status from pydantic import BaseModel from typing_extensions import TypedDict @@ -148,20 +148,26 @@ async def submit_bulk_jdl_jobs( initial_status = JobStatus.RECEIVED initial_minor_status = "Job accepted" - submitted_job_ids = await submit_jobs_jdl( - [ - JobSubmissionSpec( - jdl=jdl, - owner=user_info.preferred_username, - owner_group=user_info.dirac_group, - initial_status=initial_status, - initial_minor_status=initial_minor_status, - vo=user_info.vo, - ) - for jdl in job_desc_list - ], - job_db=job_db, - ) + try: + submitted_job_ids = await submit_jobs_jdl( + [ + JobSubmissionSpec( + jdl=jdl, + owner=user_info.preferred_username, + owner_group=user_info.dirac_group, + initial_status=initial_status, + initial_minor_status=initial_minor_status, + vo=user_info.vo, + ) + for jdl in job_desc_list + ], + job_db=job_db, + ) + except ExceptionGroup as e: + raise HTTPException( + status_code=status.HTTP_400_BAD_REQUEST, + detail="JDL syntax error", + ) from e logging.debug( f'Jobs added to the JobDB", "{submitted_job_ids} for {user_info.preferred_username}/{user_info.dirac_group}' diff --git a/diracx-routers/tests/test_job_manager.py b/diracx-routers/tests/test_job_manager.py index 62ed1442..0084c138 100644 --- a/diracx-routers/tests/test_job_manager.py +++ b/diracx-routers/tests/test_job_manager.py @@ -71,6 +71,12 @@ ParameterStart = 1; """ +TEST_MALFORMED_JDL = """ +[ + 'Executable = "echo";' +] +""" + pytestmark = pytest.mark.enabled_dependencies( [ "AuthSettings", @@ -243,6 +249,12 @@ def test_insert_and_search(normal_user_client): assert r.json() == [] +def test_insert_malformed_jdl(normal_user_client): + job_definitions = [TEST_MALFORMED_JDL] + r = normal_user_client.post("/api/jobs/jdl", json=job_definitions) + assert r.status_code == 400, r.json() + + def test_search_distinct(normal_user_client): """Test that the distinct parameter works as expected.""" job_definitions = [TEST_JDL, TEST_JDL, TEST_JDL]