app.tools.dicom_provider#

Helper functions for dicom.

Attributes#

Functions#

resolve_dicom_path(→ pathlib.Path)

Build and validate the requested file path: {DATA_LAKE_DIR}/{protocol_id}/{task_id}/{result_id}/{filename}.

resolve_dicom_path_from_db(→ pathlib.Path)

Resolve DICOM file path from stored Result directory (flat task-directory layout).

get_p10_dicom_bytes(→ bytes)

Ensure the dataset at path is a valid DICOM Part-10 file and return its bytes.

provide_p10_dicom(→ starlette.responses.Response)

Ensure the dataset at path is a valid DICOM Part-10 file.

Module Contents#

app.tools.dicom_provider.DATA_LAKE_DIR#
app.tools.dicom_provider.resolve_dicom_path(protocol_id: str, task_id: str, result_id: str, filename: str) pathlib.Path#

Build and validate the requested file path: {DATA_LAKE_DIR}/{protocol_id}/{task_id}/{result_id}/{filename}.

app.tools.dicom_provider.resolve_dicom_path_from_db(directory: str, filename: str) pathlib.Path#

Resolve DICOM file path from stored Result directory (flat task-directory layout).

app.tools.dicom_provider.get_p10_dicom_bytes(dicom_path: str | pathlib.Path, patient_id: str | None = None, patient_name: str | None = None, study_description: str | None = None) bytes#

Ensure the dataset at path is a valid DICOM Part-10 file and return its bytes.

  • If not Part-10 or missing metadata, create minimal File Meta + 128-byte preamble.

  • Ensures mandatory DICOM tags (SOP Class UID, SOP Instance UID, etc.) are present.

  • If patient_id or study_description are provided, they override the values in the dataset.

app.tools.dicom_provider.provide_p10_dicom(dicom_path: str | pathlib.Path) starlette.responses.Response#

Ensure the dataset at path is a valid DICOM Part-10 file.

  • If already Part-10, return FileResponse

  • Else → convert to Part-10 in memory and return StreamingResponse.