From 06e0f6f6cbbd255330f194b81225c19da8968775 Mon Sep 17 00:00:00 2001 From: Ross Date: Mon, 18 Dec 2023 18:32:41 +0000 Subject: [PATCH] . --- atlas/models.py | 52 ++++++++++++------------------------------------- atlas/views.py | 7 ++++++- 2 files changed, 18 insertions(+), 41 deletions(-) diff --git a/atlas/models.py b/atlas/models.py index 9ec7b9e7..fffb6f9b 100644 --- a/atlas/models.py +++ b/atlas/models.py @@ -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 diff --git a/atlas/views.py b/atlas/views.py index 8cd38684..8af7a45c 100755 --- a/atlas/views.py +++ b/atlas/views.py @@ -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))