.
This commit is contained in:
+12
-40
@@ -896,6 +896,8 @@ class UncategorisedDicom(models.Model):
|
|||||||
|
|
||||||
created_date = models.DateTimeField(default=timezone.now)
|
created_date = models.DateTimeField(default=timezone.now)
|
||||||
|
|
||||||
|
basic_dicom_tags = models.JSONField(null=True)
|
||||||
|
|
||||||
def check_for_duplicates(self, image_hash):
|
def check_for_duplicates(self, image_hash):
|
||||||
duplicate = None
|
duplicate = None
|
||||||
|
|
||||||
@@ -924,9 +926,13 @@ class UncategorisedDicom(models.Model):
|
|||||||
|
|
||||||
duplicate = self.check_for_duplicates(image_hash)
|
duplicate = self.check_for_duplicates(image_hash)
|
||||||
|
|
||||||
|
self.basic_dicom_tags = self.get_basic_dicom_tags(ds)
|
||||||
|
|
||||||
if duplicate is not None:
|
if duplicate is not None:
|
||||||
raise DuplicateDicom
|
raise DuplicateDicom
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Hack for tests
|
# Hack for tests
|
||||||
if image_hash != "1234":
|
if image_hash != "1234":
|
||||||
super().save(*args, **kwargs) # Call the "real" save() method.
|
super().save(*args, **kwargs) # Call the "real" save() method.
|
||||||
@@ -938,8 +944,10 @@ class UncategorisedDicom(models.Model):
|
|||||||
except pydicom.errors.InvalidDicomError:
|
except pydicom.errors.InvalidDicomError:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def get_basic_dicom_tags(self):
|
def get_basic_dicom_tags(self, dataset=None):
|
||||||
with pydicom.dcmread(self.image) as ds:
|
try:
|
||||||
|
if dataset = is None:
|
||||||
|
dataset = pydicom.read_file(self.image)
|
||||||
to_include = (
|
to_include = (
|
||||||
"StudyDescription",
|
"StudyDescription",
|
||||||
"Modality",
|
"Modality",
|
||||||
@@ -953,51 +961,15 @@ class UncategorisedDicom(models.Model):
|
|||||||
tags = {}
|
tags = {}
|
||||||
|
|
||||||
for tag in to_include:
|
for tag in to_include:
|
||||||
if tag in ds:
|
if tag in dataset:
|
||||||
tags[tag] = ds[tag].value
|
tags[tag] = dataset[tag].value
|
||||||
else:
|
else:
|
||||||
tags[tag] = ""
|
tags[tag] = ""
|
||||||
|
|
||||||
return tags
|
|
||||||
try:
|
|
||||||
with pydicom.read_file(self.image) as ds:
|
|
||||||
to_include = (
|
|
||||||
"StudyDescription",
|
|
||||||
"Modality",
|
|
||||||
"ProtocolName",
|
|
||||||
"SeriesDescription",
|
|
||||||
"SeriesInstanceUID",
|
|
||||||
"BodyPartExamined",
|
|
||||||
"SliceThickness",
|
|
||||||
)
|
|
||||||
|
|
||||||
tags = {}
|
|
||||||
|
|
||||||
for tag in to_include:
|
|
||||||
if tag in ds:
|
|
||||||
tags[tag] = ds[tag].value
|
|
||||||
else:
|
|
||||||
tags[tag] = ""
|
|
||||||
|
|
||||||
return tags
|
return tags
|
||||||
except pydicom.errors.InvalidDicomError:
|
except pydicom.errors.InvalidDicomError:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
to_include = (
|
|
||||||
"StudyDescription",
|
|
||||||
"Modality",
|
|
||||||
"ProtocolName",
|
|
||||||
"SeriesDescription",
|
|
||||||
"SeriesInstanceUID",
|
|
||||||
"BodyPartExamined",
|
|
||||||
"SliceThickness",
|
|
||||||
)
|
|
||||||
tags = {}
|
|
||||||
for i in to_include:
|
|
||||||
tags[i] = "12345"
|
|
||||||
|
|
||||||
return tags
|
|
||||||
|
|
||||||
|
|
||||||
class DuplicateDicom(Exception):
|
class DuplicateDicom(Exception):
|
||||||
pass
|
pass
|
||||||
|
|||||||
+6
-1
@@ -388,7 +388,12 @@ def user_uploads(request, case_id: int | None = None):
|
|||||||
|
|
||||||
data = defaultdict(list)
|
data = defaultdict(list)
|
||||||
for d in dicoms:
|
for d in dicoms:
|
||||||
tags = d.get_basic_dicom_tags()
|
if not d.basic_dicom_tags:
|
||||||
|
d.basic_dicom_tags = tags = d.get_basic_dicom_tags()
|
||||||
|
d.save()
|
||||||
|
else:
|
||||||
|
tags = d.basic_dicom_tags
|
||||||
|
|
||||||
|
|
||||||
data[tags["SeriesInstanceUID"]].append((tags, d.created_date))
|
data[tags["SeriesInstanceUID"]].append((tags, d.created_date))
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user