@@ -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