diff --git a/apps/backend/app/routers/reports.py b/apps/backend/app/routers/reports.py index 5b80ab8e..84be1104 100644 --- a/apps/backend/app/routers/reports.py +++ b/apps/backend/app/routers/reports.py @@ -18,6 +18,19 @@ # create the uploads directory if it doesn't exist os.makedirs("uploads", exist_ok=True) + +def parse_modality(modality: Optional[str]) -> ModalityTypeValues: + if not modality: + return ModalityTypeValues.ASL + + try: + return ModalityTypeValues(modality) + except ValueError as exc: + raise HTTPException( + status_code=status.HTTP_400_BAD_REQUEST, + detail=f"Unsupported modality: {modality}" + ) from exc + @report_router.post("/process/bids", response_model=dict, status_code=status.HTTP_200_OK) async def get_report_bids( modality: Optional[str] = Form(None), @@ -29,7 +42,7 @@ async def get_report_bids( Receives form data and two files: a NIfTI file and a DICOM file. """ data = { - "modality": ModalityTypeValues(modality) if modality else ModalityTypeValues.ASL, + "modality": parse_modality(modality), "files": [], "nifti_file": None, "dcm_files": [] @@ -76,7 +89,7 @@ async def get_report_dicom( print(base_dir) data = { - "modality": ModalityTypeValues(modality) if modality else ModalityTypeValues.ASL, + "modality": parse_modality(modality), "dicom_dir": f"{base_dir}/dicom" } diff --git a/apps/backend/tests/test_report.py b/apps/backend/tests/test_report.py index 2dd19c8f..29de07ca 100644 --- a/apps/backend/tests/test_report.py +++ b/apps/backend/tests/test_report.py @@ -12,6 +12,13 @@ def test_get_report_bids_no_files(): assert response.status_code == 200 assert isinstance(response.json(), dict) + +def test_get_report_bids_invalid_modality(): + response = client.post("/api/report/process/bids", data={"modality": "INVALID"}) + assert response.status_code == 400 + assert response.json()["detail"] == "Unsupported modality: INVALID" + + def test_get_report_dicom_no_files(): response = client.post("/api/report/process/dicom", data={"modality": "ASL"}) assert response.status_code == 400 diff --git a/package/src/pyaslreport/modalities/testdsc/processor.py b/package/src/pyaslreport/modalities/testdsc/processor.py index 6ad1ed39..b3886cdc 100644 --- a/package/src/pyaslreport/modalities/testdsc/processor.py +++ b/package/src/pyaslreport/modalities/testdsc/processor.py @@ -14,17 +14,15 @@ 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. """ - # 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" + return { + "modality": "DSC", + "status": "not_implemented", + "message": "DSC report generation is not implemented yet." + } diff --git a/package/src/pyaslreport/tests/test_dsc_processor.py b/package/src/pyaslreport/tests/test_dsc_processor.py new file mode 100644 index 00000000..5df612f5 --- /dev/null +++ b/package/src/pyaslreport/tests/test_dsc_processor.py @@ -0,0 +1,11 @@ +from pyaslreport.modalities.testdsc.processor import DSCProcessor + + +def test_dsc_processor_returns_structured_placeholder_response(): + result = DSCProcessor({"modality": "DSC"}).process() + + assert result == { + "modality": "DSC", + "status": "not_implemented", + "message": "DSC report generation is not implemented yet." + }