Skip to content

Commit

Permalink
issue #214: move additional context data to mixins
Browse files Browse the repository at this point in the history
  • Loading branch information
yuriy-kormin committed Jan 28, 2023
1 parent 9003cb1 commit a1da541
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 23 deletions.
29 changes: 8 additions & 21 deletions contributors/views/contributor.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,15 @@
from django.views import generic

from contributors.models import Contributor, Repository
from contributors.views.mixins import (
ContributorsJsonMixin,
ContributorTotalStatMixin,
)


class DetailView(generic.DetailView):
class DetailView(
ContributorTotalStatMixin, ContributorsJsonMixin, generic.DetailView,
):
"""Contributor's details."""

model = Contributor
Expand Down Expand Up @@ -37,28 +43,9 @@ def get_context_data(self, **kwargs):
context['contributions_for_year'] = (
self.object.contribution_set.for_year()
)
total = self.object.contribution_set.aggregate(
commits=Count('id', filter=Q(type='cit')),
additions=Coalesce(Sum('stats__additions'), 0),
deletions=Coalesce(Sum('stats__deletions'), 0),
pull_requests=Count('type', filter=Q(type='pr')),
issues=Count('type', filter=Q(type='iss')),
comments=Count('type', filter=Q(type='cnt')),
)
context['contributors_json'] = list(
Contributor.objects.visible().with_contributions().values(
'id',
'commits',
'additions',
'deletions',
'pull_requests',
'issues',
'comments',
),
)

context['contributors'] = Contributor.objects.visible().values(
'id',
'name',
)
context['total'] = total
return context
41 changes: 39 additions & 2 deletions contributors/views/mixins.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
from functools import reduce

from django.core.paginator import Paginator
from django.db.models import F, Q, Window # noqa: WPS347
from django.db.models.functions import RowNumber
from django.db.models import Count, F, Q, Sum, Window # noqa: WPS347
from django.db.models.functions import Coalesce, RowNumber
from django.views.generic.list import MultipleObjectMixin
from django_cte import With

Expand Down Expand Up @@ -159,3 +159,40 @@ def get_queryset(self): # noqa: WPS615
labels__name__iexact=label,
)
return super().get_queryset()


class ContributorTotalStatMixin(object):
"""Add total stat to contributor context."""

def get_context_data(self, **kwargs):
"""Get and modify context data."""
context = super().get_context_data(**kwargs)
context['total'] = self.object.contribution_set.aggregate(
commits=Count('id', filter=Q(type='cit')),
additions=Coalesce(Sum('stats__additions'), 0),
deletions=Coalesce(Sum('stats__deletions'), 0),
pull_requests=Count('type', filter=Q(type='pr')),
issues=Count('type', filter=Q(type='iss')),
comments=Count('type', filter=Q(type='cnt')),
)
return context


class ContributorsJsonMixin(object):
"""Add json-formatted list of contributors stats."""

def get_context_data(self, **kwargs):
"""Get and modify context data."""
context = super().get_context_data(**kwargs)
context['contributors_json'] = list(
self.model.objects.visible().with_contributions().values(
'id',
'commits',
'additions',
'deletions',
'pull_requests',
'issues',
'comments',
),
)
return context

0 comments on commit a1da541

Please sign in to comment.