Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 15 additions & 2 deletions apps/backend/app/routers/reports.py
Original file line number Diff line number Diff line change
Expand Up @@ -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),
Expand All @@ -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": []
Expand Down Expand Up @@ -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"
}

Expand Down
7 changes: 7 additions & 0 deletions apps/backend/tests/test_report.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
14 changes: 6 additions & 8 deletions package/src/pyaslreport/modalities/testdsc/processor.py
Original file line number Diff line number Diff line change
Expand Up @@ -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."
}
11 changes: 11 additions & 0 deletions package/src/pyaslreport/tests/test_dsc_processor.py
Original file line number Diff line number Diff line change
@@ -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."
}