From 06cd43f054cb384e691937e4a1f48a3833f28d1a Mon Sep 17 00:00:00 2001 From: Devguru Date: Mon, 2 Mar 2026 23:34:10 +0530 Subject: [PATCH] fix: Add modality input validation and replace DSC hardcoded string with proper dict --- apps/backend/app/routers/reports.py | 24 +++++++++++++++++-- .../modalities/testdsc/processor.py | 21 ++++++++-------- 2 files changed, 33 insertions(+), 12 deletions(-) diff --git a/apps/backend/app/routers/reports.py b/apps/backend/app/routers/reports.py index 5b80ab8e..14695c7b 100644 --- a/apps/backend/app/routers/reports.py +++ b/apps/backend/app/routers/reports.py @@ -28,8 +28,16 @@ async def get_report_bids( """ Receives form data and two files: a NIfTI file and a DICOM file. """ + try: + parsed_modality = ModalityTypeValues(modality) if modality else ModalityTypeValues.ASL + except ValueError: + raise HTTPException( + status_code=status.HTTP_422_UNPROCESSABLE_ENTITY, + detail=f"Invalid modality '{modality}'. Accepted values: {[m.value for m in ModalityTypeValues]}" + ) + data = { - "modality": ModalityTypeValues(modality) if modality else ModalityTypeValues.ASL, + "modality": parsed_modality, "files": [], "nifti_file": None, "dcm_files": [] @@ -52,6 +60,9 @@ async def get_report_bids( file_path = await save_upload(file, base_dir=f"uploads/{report_id}/dicom") data["dcm_files"].append(file_path) + if not data["files"] and not data["dcm_files"]: + raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail="No BIDS or DICOM files provided") + try: report = generate_report(data) await remove_dir(f"uploads/{report_id}") @@ -66,6 +77,15 @@ async def get_report_dicom( modality: Optional[str] = Form(None), dcm_files: Optional[List[UploadFile]] = File(None), ): + # Validate modality first + try: + parsed_modality = ModalityTypeValues(modality) if modality else ModalityTypeValues.ASL + except ValueError: + raise HTTPException( + status_code=status.HTTP_422_UNPROCESSABLE_ENTITY, + detail=f"Invalid modality '{modality}'. Accepted values: {[m.value for m in ModalityTypeValues]}" + ) + if not dcm_files: raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail="No DICOM files provided") @@ -76,7 +96,7 @@ async def get_report_dicom( print(base_dir) data = { - "modality": ModalityTypeValues(modality) if modality else ModalityTypeValues.ASL, + "modality": parsed_modality, "dicom_dir": f"{base_dir}/dicom" } diff --git a/package/src/pyaslreport/modalities/testdsc/processor.py b/package/src/pyaslreport/modalities/testdsc/processor.py index 6ad1ed39..a3b8dc02 100644 --- a/package/src/pyaslreport/modalities/testdsc/processor.py +++ b/package/src/pyaslreport/modalities/testdsc/processor.py @@ -14,17 +14,18 @@ def __init__(self, data) -> None: """ super().__init__(data) - def process(self) -> str: + def process(self) -> dict: """ Process the input DSC data. - :param data: The input DSC data to be processed. - :return: Processed DSC data. + :return: Dictionary containing processing results. """ - # Implement the processing logic for DSC data here - # For now, we will just return the input data as a placeholder - - print("Processing DSC data...") - - # Placeholder for actual processing logic - return "dsc data" + # DSC processing is not yet implemented — return a structured placeholder + # that matches the expected dict return type for all processors + return { + "status": "not_implemented", + "message": "DSC processing is not yet implemented.", + "modality": "DSC", + "asl_parameters": [], + "report": [] + }