88
99import boto3
1010from actstream .actions import follow
11+ from billiard .exceptions import SoftTimeLimitExceeded
1112from botocore .exceptions import ClientError
1213from celery import signature
1314from django .conf import settings
@@ -668,7 +669,9 @@ def sitk_image(self):
668669
669670 return sitk_image
670671
671- def update_viewer_groups_permissions (self , * , exclude_jobs = None ):
672+ def update_viewer_groups_permissions ( # noqa: C901
673+ self , * , exclude_jobs = None
674+ ):
672675 """
673676 Update the permissions for the algorithm jobs viewers groups to
674677 view this image.
@@ -685,20 +688,26 @@ def update_viewer_groups_permissions(self, *, exclude_jobs=None):
685688 from grandchallenge .archives .models import Archive
686689 from grandchallenge .reader_studies .models import ReaderStudy
687690
688- if exclude_jobs is None :
689- exclude_jobs = set ()
690- else :
691- exclude_jobs = {j .pk for j in exclude_jobs }
692-
693691 expected_groups = set ()
694692
695693 for key in ["inputs__image" , "outputs__image" ]:
696- for job in (
697- Job .objects .exclude (pk__in = exclude_jobs )
698- .filter (** {key : self })
694+ job_queryset = (
695+ Job .objects .filter (** {key : self })
699696 .prefetch_related ("viewer_groups" )
700- ):
701- expected_groups .update (job .viewer_groups .all ())
697+ .only ("viewer_groups" )
698+ )
699+
700+ if exclude_jobs is not None :
701+ job_queryset = job_queryset .exclude (
702+ pk__in = {j .pk for j in exclude_jobs }
703+ )
704+
705+ try :
706+ for job in job_queryset :
707+ expected_groups .update (job .viewer_groups .all ())
708+ except SoftTimeLimitExceeded as error :
709+ logger .error (error , exc_info = True )
710+ raise
702711
703712 for archive in Archive .objects .filter (
704713 items__values__image = self
0 commit comments