app.tools.dicom_provider ======================== .. py:module:: app.tools.dicom_provider .. autoapi-nested-parse:: Helper functions for dicom. Attributes ---------- .. autoapisummary:: app.tools.dicom_provider.DATA_LAKE_DIR Functions --------- .. autoapisummary:: app.tools.dicom_provider.resolve_dicom_path app.tools.dicom_provider.resolve_dicom_path_from_db app.tools.dicom_provider.get_p10_dicom_bytes app.tools.dicom_provider.provide_p10_dicom Module Contents --------------- .. py:data:: DATA_LAKE_DIR .. py:function:: 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}. .. py:function:: resolve_dicom_path_from_db(directory: str, filename: str) -> pathlib.Path Resolve DICOM file path from stored Result directory (flat task-directory layout). .. py:function:: 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. .. py:function:: 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.