Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Improve performance of cohort detail counts #823

Merged
merged 1 commit into from
Dec 15, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 7 additions & 7 deletions isic/ingest/templates/ingest/partials/cohort_details.html
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,12 @@
<li><span class="font-bold">Default License:</span> {{ cohort.get_default_copyright_license_display }}</li>
<li><span class="font-bold">Created by:</span> {{ cohort.creator.first_name }} {{ cohort.creator.last_name }} ({{ cohort.creator }})</li>
<li><span class="font-bold">Created on:</span> {% localtime cohort.created %}</li>
<li><span class="font-bold">Number of accessions:</span> {{ cohort.accessions.count|intcomma }}</li>
<li><span class="font-bold">Number of patients:</span> {{ cohort.num_patients | intcomma }}</li>
<li><span class="font-bold">Number of lesions:</span> {{ cohort.num_lesions | intcomma }}</li>
<li><span class="font-bold">Published:</span> {{ cohort.accessions.published.count|intcomma }}</li>
<li><span class="font-bold">Unreviewed:</span> {{ cohort.accessions.unreviewed.count|intcomma }}</li>
<li><span class="font-bold">Accepted:</span> {{ cohort.accessions.accepted.count|intcomma }}</li>
<li><span class="font-bold">Rejected:</span> {{ cohort.accessions.rejected.count|intcomma }}</li>
<li><span class="font-bold">Number of accessions:</span> {{ counts.accession_count|intcomma }}</li>
<li><span class="font-bold">Number of patients:</span> {{ counts.patient_count|intcomma }}</li>
<li><span class="font-bold">Number of lesions:</span> {{ counts.lesion_count|intcomma }}</li>
<li><span class="font-bold">Published:</span> {{ counts.published_count|intcomma }}</li>
<li><span class="font-bold">Unreviewed:</span> {{ counts.unreviewed_count|intcomma }}</li>
<li><span class="font-bold">Accepted:</span> {{ counts.accepted_count|intcomma }}</li>
<li><span class="font-bold">Rejected:</span> {{ counts.rejected_count|intcomma }}</li>
</ul>
</div>
17 changes: 16 additions & 1 deletion isic/ingest/views/cohort.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,19 +5,33 @@
from django.contrib.humanize.templatetags.humanize import intcomma
from django.core.exceptions import ValidationError
from django.core.paginator import Paginator
from django.db.models import Count
from django.db.models import Count, Q
from django.http import HttpResponseRedirect
from django.shortcuts import get_object_or_404, render
from django.urls.base import reverse

from isic.core.permissions import needs_object_permission
from isic.ingest.forms import MergeCohortForm
from isic.ingest.models import Cohort
from isic.ingest.models.accession import AccessionStatus
from isic.ingest.models.contributor import Contributor
from isic.ingest.services.cohort import cohort_merge, cohort_publish_initialize
from isic.ingest.views import make_breadcrumbs


def cohort_counts(cohort: Cohort) -> dict[str, int]:
reviewable = Q(image__isnull=True, status=AccessionStatus.SUCCEEDED)
return cohort.accessions.aggregate(
accession_count=Count("pk"),
patient_count=Count("patient", distinct=True),
lesion_count=Count("lesion", distinct=True),
published_count=Count("pk", filter=Q(image__isnull=False)),
unreviewed_count=Count("pk", filter=reviewable & Q(review=None)),
accepted_count=Count("pk", filter=reviewable & Q(review__value=True)),
rejected_count=Count("pk", filter=reviewable & Q(review__value=False)),
)


@staff_member_required
def cohort_list(request):
contributors = Contributor.objects.prefetch_related("cohorts").order_by("institution_name")
Expand Down Expand Up @@ -67,6 +81,7 @@ def cohort_detail(request, pk):
"ingest/cohort_detail.html",
{
"cohort": cohort,
"counts": cohort_counts(cohort),
"accessions": accessions,
"breadcrumbs": make_breadcrumbs(cohort),
},
Expand Down
Loading