Skip to content

fix: Add modality input validation and replace DSC hardcoded string with proper dict#36

Open
Devguru-codes wants to merge 1 commit intoOSIPI:mainfrom
Devguru-codes:Modality_Validation
Open

fix: Add modality input validation and replace DSC hardcoded string with proper dict#36
Devguru-codes wants to merge 1 commit intoOSIPI:mainfrom
Devguru-codes:Modality_Validation

Conversation

@Devguru-codes
Copy link

@Devguru-codes Devguru-codes commented Mar 2, 2026

Fixes two related modality processing issues that degrade API reliability. Fixes #35

Fix 1: Modality Input Validation (reports.py)

+    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,

Applied to both BIDS and DICOM endpoints. DICOM endpoint reordered to validate modality before file check.

Fix 2: DSCProcessor Placeholder (processor.py)

-    def process(self) -> str:
-        print("Processing DSC data...")
-        return "dsc data"
+    def process(self) -> dict:
+        return {
+            "status": "not_implemented",
+            "message": "DSC processing is not yet implemented.",
+            "modality": "DSC",
+            "asl_parameters": [],
+            "report": []
+        }

Files Changed

  • apps/backend/app/routers/reports.py
  • package/src/pyaslreport/modalities/testdsc/processor.py

API Endpoint Responses Comparison

main branch (before fix)

POST /api/report/process/bids modality=xyz   → Status: 500 (unhandled ValueError)
POST /api/report/process/dicom modality=INVALID → Status: 400 (file check ran first, modality never validated)
DSCProcessor.process() → 'dsc data' (string)

Modality_Validation branch (after fix)

POST /api/report/process/bids modality=xyz   → Status: 422, Body: {"detail": "Invalid modality 'xyz'. Accepted values: ['ASL', 'DCE', 'DSC']"}
POST /api/report/process/dicom modality=INVALID → Status: 422, Body: {"detail": "Invalid modality 'INVALID'. Accepted values: ['ASL', 'DCE', 'DSC']"}
DSCProcessor.process() → {"status": "not_implemented", "message": "DSC processing is not yet implemented.", ...}

Python Test Suite Results

main branch (before fix)

# Test Status Detail
T1 Valid modality 'ASL' accepted PASS
T2 Invalid modality 'xyz' → 422 FAIL Status=500
T3 Invalid modality 'INVALID' on /dicom → 422 FAIL Status=400
T4 No modality defaults to ASL PASS
T5 DSCProcessor returns dict FAIL Got string

Summary: PASSED=2 FAILED=3

Modality_Validation branch (after fix)

# Test Status Detail
T1 Valid modality 'ASL' accepted PASS
T2 Invalid modality 'xyz' → 422 PASS
T3 Invalid modality 'INVALID' on /dicom → 422 PASS
T4 No modality defaults to ASL PASS
T5 DSCProcessor returns dict PASS

Summary: PASSED=5 FAILED=0

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Invalid modality input causes 500 and DSCProcessor returns hardcoded string

1 participant