Add DICOM upload and case retrieval endpoints: implement upload_dicom_case and get_cases_available functions
This commit is contained in:
@@ -22,6 +22,7 @@ from ninja.files import UploadedFile
|
|||||||
from generic.models import Examination, Modality
|
from generic.models import Examination, Modality
|
||||||
|
|
||||||
from .models import Case, DuplicateDicom, Series, SeriesImage, UncategorisedDicom
|
from .models import Case, DuplicateDicom, Series, SeriesImage, UncategorisedDicom
|
||||||
|
from atlas.helpers import get_cases_available_to_user
|
||||||
|
|
||||||
from loguru import logger
|
from loguru import logger
|
||||||
|
|
||||||
@@ -227,6 +228,26 @@ def import_dicoms_case(request, case_id: int):
|
|||||||
return import_dicoms_helper(request, case_id=case_id)
|
return import_dicoms_helper(request, case_id=case_id)
|
||||||
|
|
||||||
|
|
||||||
|
@router.post("/upload_dicom_case/{case_id}", auth=django_auth, response=List[Tuple[SeriesSchema, str]])
|
||||||
|
def upload_dicom_case(request, case_id: int, files: List[UploadedFile] = File(...)):
|
||||||
|
"""Upload DICOM files and immediately import them into the given case.
|
||||||
|
|
||||||
|
This saves each uploaded file as an `UncategorisedDicom` owned by the user,
|
||||||
|
then calls the existing import helper which will create Series/SeriesImage
|
||||||
|
objects and attach them to the specified case.
|
||||||
|
"""
|
||||||
|
for file in files:
|
||||||
|
try:
|
||||||
|
ud = UncategorisedDicom(image=file, user=request.user)
|
||||||
|
ud.save()
|
||||||
|
except DuplicateDicom:
|
||||||
|
# skip duplicates
|
||||||
|
continue
|
||||||
|
|
||||||
|
# Now reuse import helper which will consume UncategorisedDicom for this user
|
||||||
|
return import_dicoms_helper(request, case_id=case_id)
|
||||||
|
|
||||||
|
|
||||||
@router.get("/orphan_series", auth=django_auth, response=List[SeriesSchema])
|
@router.get("/orphan_series", auth=django_auth, response=List[SeriesSchema])
|
||||||
def orphan_series(request):
|
def orphan_series(request):
|
||||||
return request.user.series.filter(case=None)
|
return request.user.series.filter(case=None)
|
||||||
@@ -254,6 +275,13 @@ def get_cases_user(request):
|
|||||||
return Case.objects.filter(author=request.user)
|
return Case.objects.filter(author=request.user)
|
||||||
|
|
||||||
|
|
||||||
|
@router.get("/get_cases_available", auth=django_auth, response=List[CaseSchema])
|
||||||
|
def get_cases_available(request):
|
||||||
|
"""Return cases available to the authenticated user (via get_cases_available_to_user)."""
|
||||||
|
qs = get_cases_available_to_user(request.user)
|
||||||
|
return qs.order_by('-created_date')[:200]
|
||||||
|
|
||||||
|
|
||||||
@router.get("/check_image_hash/{hash}", auth=django_auth)
|
@router.get("/check_image_hash/{hash}", auth=django_auth)
|
||||||
def check_image_hash(request, hash: str):
|
def check_image_hash(request, hash: str):
|
||||||
try:
|
try:
|
||||||
|
|||||||
Reference in New Issue
Block a user