class UsersChallengeList(UserIsNotAnonMixin, PaginatedTableListView): model = Challenge template_name = "challenges/challenge_users_list.html" row_template = "challenges/challenge_users_row.html" search_fields = [ "title", "short_name", "description", ] columns = [ Column(title="Name", sort_field="short_name"), Column(title="Created", sort_field="created"), Column(title="Admins", sort_field="created"), Column(title="Description", sort_field="description"), Column(title="Automated Evaluation", sort_field="use_evaluation"), ] default_sort_column = 1 def get_queryset(self): queryset = (super().get_queryset().prefetch_related( "admins_group__user_set__user_profile", "admins_group__user_set__verification", )) if not self.request.user.is_superuser: queryset = queryset.filter( Q(participants_group__in=self.request.user.groups.all()) | Q(admins_group__in=self.request.user.groups.all())) return queryset
def columns(self): columns = [ Column(title="Details", sort_field="pk"), Column(title="Created", sort_field="created"), Column(title="Creator", sort_field="creator__username"), Column(title="Result", sort_field="status"), Column(title="Comment", sort_field="comment"), Column(title="Visibility", sort_field="public"), Column(title="Viewer", sort_field="status"), ] for key, grouped_interfaces in self.outputs_list_display.items(): for interface in grouped_interfaces: if key == "JSON": columns.append( Column(title=interface.title, sort_field=interface.slug)) else: columns.append( Column( title=interface.title, sort_field="", classes=("nonSortable", ), )) return columns
class RawImageUploadSessionList( LoginRequiredMixin, PermissionListMixin, PaginatedTableListView, ): model = RawImageUploadSession permission_required = f"{RawImageUploadSession._meta.app_label}.view_{RawImageUploadSession._meta.model_name}" login_url = reverse_lazy("userena_signin") row_template = "cases/rawimageuploadsession_row.html" search_fields = [ "pk", ] columns = [ Column(title="ID", sort_field="pk"), Column(title="Created", sort_field="created"), Column(title="Status", sort_field="status"), ] default_sort_column = 1
class ArchiveItemsList(LoginRequiredMixin, PermissionListMixin, PaginatedTableListView): model = ArchiveItem permission_required = ( f"{ArchiveItem._meta.app_label}.view_{ArchiveItem._meta.model_name}") raise_exception = True template_name = "archives/archive_items_list.html" row_template = "archives/archive_items_row.html" search_fields = [ "pk", "values__interface__title", "values__value", "values__image__name", "values__file", ] columns = [ Column(title="Values", sort_field="created"), Column(title="Add", sort_field="pk"), Column(title="View", sort_field="status"), ] @cached_property def archive(self): return get_object_or_404(Archive, slug=self.kwargs["slug"]) def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context.update({ "archive": self.archive, "interfaces": ComponentInterface.objects.all().order_by("title"), }) return context def render_row(self, *, object_, page_context): page_context["object_interfaces"] = [ v.interface for v in object_.values.all() ] return super().render_row(object_=object_, page_context=page_context) def get_queryset(self): qs = super().get_queryset() return qs.filter(archive=self.archive).prefetch_related("values")
class ArchiveItemsList( LoginRequiredMixin, ObjectPermissionRequiredMixin, PaginatedTableListView, ): model = ArchiveItem permission_required = ( f"{Archive._meta.app_label}.use_{Archive._meta.model_name}") raise_exception = True template_name = "archives/archive_items_list.html" row_template = "archives/archive_items_row.html" search_fields = [ "pk", "values__interface__title", "values__value", "values__image__name", "values__file", ] columns = [ Column(title="Values", sort_field="created"), Column(title="Edit", sort_field="pk"), ] @cached_property def archive(self): return get_object_or_404(Archive, slug=self.kwargs["slug"]) def get_permission_object(self): return self.archive def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context.update({"archive": self.archive}) return context def get_queryset(self): qs = super().get_queryset() return qs.filter(archive=self.archive).prefetch_related("values")
class JobsList(PermissionListMixin, PaginatedTableListView): model = Job permission_required = f"{Job._meta.app_label}.view_{Job._meta.model_name}" row_template = "algorithms/job_list_row.html" search_fields = [ "pk", "creator__username", "inputs__image__name", "inputs__image__files__file", "comment", ] columns = [ Column(title="Details", sort_field="pk"), Column(title="Created", sort_field="created"), Column(title="Creator", sort_field="creator__username"), Column(title="Result", sort_field="inputs__image__name"), Column(title="Comment", sort_field="comment"), Column(title="Visibility", sort_field="public"), Column(title="Viewer", sort_field="inputs__image__files__file"), ] default_sort_column = 1 @cached_property def algorithm(self): return get_object_or_404(Algorithm, slug=self.kwargs["slug"]) def get_queryset(self): queryset = super().get_queryset() return ( queryset.filter(algorithm_image__algorithm=self.algorithm,) .prefetch_related( "outputs__image__files", "outputs__interface", "inputs__image__files", "viewers__user_set", ) .select_related( "creator__user_profile", "creator__verification", "algorithm_image__algorithm", ) ) def get_context_data(self, *args, **kwargs): context = super().get_context_data(*args, **kwargs) context.update({"algorithm": self.algorithm}) return context
class ArchiveCasesList( LoginRequiredMixin, ObjectPermissionRequiredMixin, PaginatedTableListView, ): model = Image permission_required = ( f"{Archive._meta.app_label}.use_{Archive._meta.model_name}" ) raise_exception = True template_name = "archives/archive_cases_list.html" row_template = "archives/archive_cases_row.html" search_fields = [ "pk", "name", ] columns = [ Column(title="Name", sort_field="name"), Column(title="Created", sort_field="created"), Column(title="Creator", sort_field="origin__creator__username"), Column(title="View", sort_field="pk"), Column(title="Algorithm Results", sort_field="pk"), Column(title="Download", sort_field="pk"), ] @cached_property def archive(self): return get_object_or_404(Archive, slug=self.kwargs["slug"]) def get_permission_object(self): return self.archive def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context.update({"archive": self.archive}) return context def get_queryset(self): qs = super().get_queryset() return ( qs.filter( componentinterfacevalue__archive_items__archive=self.archive ) .prefetch_related( "files", "componentinterfacevalue_set__algorithms_jobs_as_input__algorithm_image__algorithm", ) .select_related( "origin__creator__user_profile", "origin__creator__verification", ) )
class ReaderStudyDisplaySetList( LoginRequiredMixin, ObjectPermissionRequiredMixin, PaginatedTableListView ): model = DisplaySet permission_required = ( f"{ReaderStudy._meta.app_label}.change_{ReaderStudy._meta.model_name}" ) raise_exception = True template_name = "reader_studies/readerstudy_images_list.html" row_template = "reader_studies/readerstudy_display_sets_row.html" search_fields = ["pk", "values__image__name", "values__file"] columns = [ Column(title="Name", sort_field="order"), ] text_align = "left" default_sort_order = "asc" @cached_property def reader_study(self): return get_object_or_404(ReaderStudy, slug=self.kwargs["slug"]) def get_permission_object(self): return self.reader_study def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context.update({"reader_study": self.reader_study}) return context def get_queryset(self): qs = ( super() .get_queryset() .filter(reader_study=self.reader_study) .select_related("reader_study") .prefetch_related( "values", "answers", "values__image", "values__interface" ) ) return qs
class ReaderStudyImagesList( LoginRequiredMixin, ObjectPermissionRequiredMixin, PaginatedTableListView ): model = Image permission_required = ( f"{ReaderStudy._meta.app_label}.change_{ReaderStudy._meta.model_name}" ) raise_exception = True template_name = "reader_studies/readerstudy_images_list.html" row_template = "reader_studies/readerstudy_images_row.html" search_fields = ["pk", "name"] columns = [ Column(title="Name", sort_field="name"), Column(title="Created", sort_field="created"), Column(title="Creator", sort_field="origin__creator__username"), Column(title="View", sort_field="pk"), Column(title="Download", sort_field="pk"), Column(title="Remove from Study", sort_field="pk"), ] @cached_property def reader_study(self): return get_object_or_404(ReaderStudy, slug=self.kwargs["slug"]) def get_permission_object(self): return self.reader_study def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context.update({"reader_study": self.reader_study}) return context def get_queryset(self): qs = super().get_queryset() return ( qs.filter(readerstudies=self.reader_study) .prefetch_related("files") .select_related( "origin__creator__user_profile", "origin__creator__verification", ) )
def columns(self): columns = [] if self.phase.evaluation_comparison_observable_url: columns.append( Column( title="", sort_field="", classes=("nonSortable", ), identifier="compareEvaluationsHeader", )) columns.extend([ Column( title="Current #" if "date" in self.request.GET else "#", sort_field="rank", ), Column( title="User (Team)" if self.request.challenge.use_teams else "User", sort_field="submission__creator__username", ), Column(title="Created", sort_field="created"), ]) if self.phase.scoring_method_choice == self.phase.MEAN: columns.append(Column(title="Mean Position", sort_field="rank")) elif self.phase.scoring_method_choice == self.phase.MEDIAN: columns.append(Column(title="Median Position", sort_field="rank")) if self.phase.scoring_method_choice == self.phase.ABSOLUTE: columns.append( Column(title=self.phase.score_title, sort_field="rank")) else: columns.append( Column( title=f"{self.phase.score_title} (Position)", sort_field="rank", classes=("toggleable", ), )) for c in self.phase.extra_results_columns: columns.append( Column( title=c["title"] if self.phase.scoring_method_choice == self.phase.ABSOLUTE else f"{c['title']} (Position)", sort_field="rank", classes=("toggleable", ), )) if self.phase.display_submission_comments: columns.append( Column(title="Comment", sort_field="submission__comment")) if self.phase.show_publication_url: columns.append( Column( title="Publication", sort_field="submission__publication_url", )) if self.phase.show_supplementary_file_link: columns.append( Column( title=self.phase.supplementary_file_label, sort_field="submission__supplementary_file", classes=("nonSortable", ), )) return columns
class ArchiveCasesList( LoginRequiredMixin, ObjectPermissionRequiredMixin, PaginatedTableListView, ): model = Image permission_required = ( f"{Archive._meta.app_label}.use_{Archive._meta.model_name}") raise_exception = True template_name = "archives/archive_cases_list.html" row_template = "archives/archive_cases_row.html" search_fields = [ "pk", "name", "patient_id", "patient_name", "patient_birth_date", "patient_age", "patient_sex", "study_date", "study_instance_uid", "series_instance_uid", "study_description", "series_description", ] columns = [ Column(title="Name", sort_field="name"), Column(title="Created", sort_field="created"), Column(title="Creator", sort_field="origin__creator__username"), Column( title="Patient ID", sort_field="patient_id", optional_condition=lambda o: o.patient_id, ), Column( title="Patient name", sort_field="patient_name", optional_condition=lambda o: o.patient_name, ), Column( title="Patient birth date", sort_field="patient_birth_date", optional_condition=lambda o: o.patient_birth_date, ), Column( title="Patient age", sort_field="patient_age", optional_condition=lambda o: o.patient_age, ), Column( title="Patient sex", sort_field="patient_sex", optional_condition=lambda o: o.patient_sex, ), Column( title="Study Instance UID", sort_field="study_instance_uid", optional_condition=lambda o: o.study_instance_uid, ), Column( title="Study description", sort_field="study_description", optional_condition=lambda o: o.study_description, ), Column( title="Study date", sort_field="study_date", optional_condition=lambda o: o.study_date, ), Column( title="Series Instance UID", sort_field="series_instance_uid", optional_condition=lambda o: o.series_instance_uid, ), Column( title="Series description", sort_field="series_description", optional_condition=lambda o: o.series_description, ), Column(title="View", sort_field="pk"), Column( title="Algorithm Results", sort_field="pk", optional_condition=lambda o: any( civ.algorithms_jobs_as_input.exists() for civ in o.componentinterfacevalue_set.all()), ), Column(title="Download", sort_field="pk"), ] @cached_property def archive(self): return get_object_or_404(Archive, slug=self.kwargs["slug"]) def get_permission_object(self): return self.archive def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context.update({"archive": self.archive}) return context def get_queryset(self): qs = super().get_queryset() return (qs.filter( componentinterfacevalue__archive_items__archive=self.archive ).prefetch_related( "files", "componentinterfacevalue_set__algorithms_jobs_as_input__algorithm_image__algorithm", ).select_related( "origin__creator__user_profile", "origin__creator__verification", ))