i should do these more often

This commit is contained in:
Ross
2025-06-23 09:25:48 +01:00
parent 820d0bc030
commit 2f8601aa1a
15 changed files with 637 additions and 188 deletions
+28 -30
View File
@@ -4,7 +4,7 @@ from django.shortcuts import get_object_or_404
from django.urls import reverse
from ninja import ModelSchema, Router, Schema, Field
from django.db import transaction
from django.db import transaction, IntegrityError
# from .decorators import user_is_author_or_rapid_checker
from django.core.exceptions import PermissionDenied
@@ -109,7 +109,6 @@ def clear_dicoms(request):
dicoms = UncategorisedDicom.objects.filter(user=request.user)
dicoms.delete()
print(dicoms)
return True
@@ -163,28 +162,31 @@ def import_dicoms_helper(request, case_id: int | None = None):
tags = data[series_uid][0][1]
# Check if series with the id already exists (in which case we just add to htat)
if Series.objects.filter(
series_instance_uid=tags["SeriesInstanceUID"]
).exists():
series = Series.objects.get(series_instance_uid=tags["SeriesInstanceUID"])
else:
series = Series(
modality=modality,
description=tags["SeriesDescription"],
series_instance_uid=tags["SeriesInstanceUID"],
)
if tags["StudyDescription"]:
examination, created = Examination.objects.get_or_create(
examination=tags["StudyDescription"]
try:
with transaction.atomic():
series, created = Series.objects.get_or_create(
series_instance_uid=tags["SeriesInstanceUID"],
defaults={
"modality": modality,
"description": tags["SeriesDescription"],
}
)
if created:
examination.modality = modality
examination.save()
series.examination = examination
if created and tags["StudyDescription"]:
examination, created_exam = Examination.objects.get_or_create(
examination=tags["StudyDescription"]
)
if created_exam:
examination.modality = modality
examination.save()
series.examination = examination
series.save()
except IntegrityError:
# If a race condition still occurs, fetch the existing series
pass
series.save()
if 'series' not in locals():
series = Series.objects.get(series_instance_uid=tags["SeriesInstanceUID"])
# We might only want to add the author during creation....
@@ -192,8 +194,11 @@ def import_dicoms_helper(request, case_id: int | None = None):
if case_id is not None:
case_object = get_object_or_404(Case, pk=case_id)
if not series.case.contains(case_object):
try:
series.case.add(case_object)
except IntegrityError:
# The relation already exists, safe to ignore
pass
for dicom, dicom_tags in data[series_uid]:
series_image = SeriesImage(
@@ -238,7 +243,6 @@ def import_dicoms_case(request, case_id: int):
@router.get("/orphan_series", auth=django_auth, response=List[SeriesSchema])
def orphan_series(request):
# print(request.user.series.filter(case=None))
return request.user.series.filter(case=None)
@@ -261,7 +265,6 @@ def series_remove_duplicate_images(request, series_id: int):
@router.get("/series_truncate/{series_id}/{start}/{end}/", auth=django_auth)
def series_truncate(request, series_id: int, start: int, end: int):
print(start, end)
series = get_object_or_404(Series, pk=series_id)
if not series.check_user_can_edit(request.user):
@@ -272,7 +275,6 @@ def series_truncate(request, series_id: int, start: int, end: int):
if n >= start and n <= end:
continue
else:
print(n, image)
image.removed = True
image.image = None
image.save()
@@ -291,7 +293,6 @@ def get_cases_user(request):
@router.get("/check_image_hash/{hash}", auth=django_auth)
def check_image_hash(request, hash: str):
try:
print(hash)
series_image = SeriesImage.objects.get(image_blake3_hash=hash)
data = {
"status": "success",
@@ -372,11 +373,8 @@ def series_split_by_tag(request, series_id: int, dicom_tag: str):
# Split teh associated images
for image in series.images.all():
print(image)
ds = image.get_dicom_data()
# print("2a", ds[dicom_tag])
if dicom_tag in ds:
val = ds[dicom_tag].value