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
Example #2
0
    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
Example #4
0
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")
Example #5
0
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
Example #7
0
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",
            )
        )
Example #8
0
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
Example #9
0
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
Example #11
0
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",
        ))