Skip to content

Commit 755205d

Browse files
committed
Split method up
1 parent b965941 commit 755205d

1 file changed

Lines changed: 66 additions & 20 deletions

File tree

app/grandchallenge/cases/models.py

Lines changed: 66 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -669,16 +669,15 @@ def sitk_image(self):
669669

670670
return sitk_image
671671

672-
def update_viewer_groups_permissions( # noqa: C901
672+
def update_viewer_groups_permissions(
673673
self,
674674
*,
675675
exclude_jobs=None,
676676
exclude_archive_items=None,
677677
exclude_display_sets=None,
678678
):
679679
"""
680-
Update the permissions for the algorithm jobs viewers groups to
681-
view this image.
680+
Update the view permissions for this image
682681
683682
Parameters
684683
----------
@@ -687,10 +686,49 @@ def update_viewer_groups_permissions( # noqa: C901
687686
when a many to many relationship is being cleared to remove this
688687
image from the results image set, and is used when the pre_clear
689688
signal is sent.
689+
exclude_archive_items
690+
As above but for Archive Items
691+
exclude_display_sets
692+
As above but for Display Sets
690693
"""
694+
expected_groups = set()
695+
696+
expected_groups.update(
697+
self._get_expected_job_viewer_groups(exclude_jobs=exclude_jobs)
698+
)
699+
700+
expected_groups.update(
701+
self._get_expected_archive_item_viewer_groups(
702+
exclude_archive_items=exclude_archive_items
703+
)
704+
)
705+
706+
expected_groups.update(
707+
self._get_expected_display_set_viewer_groups(
708+
exclude_display_sets=exclude_display_sets
709+
)
710+
)
711+
712+
expected_groups.update(self._get_expected_reader_study_answer_groups())
713+
714+
current_groups = get_groups_with_perms(self, attach_perms=True)
715+
current_groups = {
716+
group
717+
for group, perms in current_groups.items()
718+
if "view_image" in perms
719+
}
720+
721+
groups_missing_perms = expected_groups - current_groups
722+
groups_with_extra_perms = current_groups - expected_groups
723+
724+
for g in groups_missing_perms:
725+
assign_perm("view_image", g, self)
726+
727+
for g in groups_with_extra_perms:
728+
remove_perm("view_image", g, self)
729+
730+
def _get_expected_job_viewer_groups(self, exclude_jobs):
691731
from grandchallenge.algorithms.models import Job
692-
from grandchallenge.archives.models import ArchiveItem
693-
from grandchallenge.reader_studies.models import DisplaySet
694732

695733
expected_groups = set()
696734

@@ -713,6 +751,15 @@ def update_viewer_groups_permissions( # noqa: C901
713751
logger.error(error, exc_info=True)
714752
raise
715753

754+
return expected_groups
755+
756+
def _get_expected_archive_item_viewer_groups(
757+
self, *, exclude_archive_items
758+
):
759+
from grandchallenge.archives.models import ArchiveItem
760+
761+
expected_groups = set()
762+
716763
archive_items_queryset = (
717764
ArchiveItem.objects.filter(values__image=self)
718765
.select_related(
@@ -741,6 +788,13 @@ def update_viewer_groups_permissions( # noqa: C901
741788
]
742789
)
743790

791+
return expected_groups
792+
793+
def _get_expected_display_set_viewer_groups(self, *, exclude_display_sets):
794+
from grandchallenge.reader_studies.models import DisplaySet
795+
796+
expected_groups = set()
797+
744798
display_set_queryset = (
745799
DisplaySet.objects.filter(values__image=self)
746800
.select_related(
@@ -766,28 +820,20 @@ def update_viewer_groups_permissions( # noqa: C901
766820
]
767821
)
768822

823+
return expected_groups
824+
825+
def _get_expected_reader_study_answer_groups(self):
769826
# Reader study editors for reader studies that have answers that
770827
# include this image.
828+
829+
expected_groups = set()
830+
771831
for answer in self.answer_set.select_related(
772832
"question__reader_study__editors_group"
773833
).all():
774834
expected_groups.add(answer.question.reader_study.editors_group)
775835

776-
current_groups = get_groups_with_perms(self, attach_perms=True)
777-
current_groups = {
778-
group
779-
for group, perms in current_groups.items()
780-
if "view_image" in perms
781-
}
782-
783-
groups_missing_perms = expected_groups - current_groups
784-
groups_with_extra_perms = current_groups - expected_groups
785-
786-
for g in groups_missing_perms:
787-
assign_perm("view_image", g, self)
788-
789-
for g in groups_with_extra_perms:
790-
remove_perm("view_image", g, self)
836+
return expected_groups
791837

792838
def assign_view_perm_to_creator(self):
793839
for answer in self.answer_set.all():

0 commit comments

Comments
 (0)