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