summaryrefslogtreecommitdiff
path: root/linaro_metrics
diff options
context:
space:
mode:
authorBen Copeland <ben.copeland@linaro.org>2017-05-19 16:59:22 +0100
committerBen Copeland <ben.copeland@linaro.org>2017-05-22 14:12:17 +0100
commit0f56e149b23b80ad1ec71c185d32b73f1b2d73d4 (patch)
treede970c6e18d965af359c76ded43246aea1eb56c1 /linaro_metrics
parent90d29193ea47b4aaa5dc9a612e8b48b396291e6e (diff)
API: Update TeamTagCredits to use the new database method
Due to having duplicate rows in the database, this commit rolls back our old migration, and instead seperates the "project" and "team" from TeamTagCredit. Change-Id: I57e34a07a36a674faef1ceff8a10e38fb6a4febe
Diffstat (limited to 'linaro_metrics')
-rw-r--r--linaro_metrics/admin.py8
-rw-r--r--linaro_metrics/api.py19
-rw-r--r--linaro_metrics/migrations/0003_auto_20170517_1611.py (renamed from linaro_metrics/migrations/0003_auto_20170421_1610.py)16
-rw-r--r--linaro_metrics/models.py26
-rw-r--r--linaro_metrics/team_project_credit.py14
5 files changed, 67 insertions, 16 deletions
diff --git a/linaro_metrics/admin.py b/linaro_metrics/admin.py
index c7db734..c0b47f9 100644
--- a/linaro_metrics/admin.py
+++ b/linaro_metrics/admin.py
@@ -7,6 +7,7 @@ from linaro_metrics.models import (
TeamMembership,
TeamCredit,
TeamTagCredit,
+ CommitTagCredit,
)
@@ -68,11 +69,16 @@ class TeamCreditAdmin(admin.ModelAdmin):
class TeamTagCreditAdmin(admin.ModelAdmin):
- list_display = ('tag', 'team', 'person', 'project', 'commit')
ordering = ('team',)
+ readonly_fields = ('commit_tag',)
+
+
+class CommitTagCreditAdmin(admin.ModelAdmin):
+ ordering = ('person',)
admin.site.register(Team, TeamAdmin)
admin.site.register(TeamMembership, TeamMembershipAdmin)
admin.site.register(TeamCredit, TeamCreditAdmin)
admin.site.register(TeamTagCredit, TeamTagCreditAdmin)
+admin.site.register(CommitTagCredit, CommitTagCreditAdmin)
diff --git a/linaro_metrics/api.py b/linaro_metrics/api.py
index 8ad0480..29848d5 100644
--- a/linaro_metrics/api.py
+++ b/linaro_metrics/api.py
@@ -76,28 +76,33 @@ class TeamPatchList(ListAPIView):
class TeamTagListSerializer(ModelSerializer):
-
person = SerializerMethodField()
+ tag = SerializerMethodField()
+ commit = SerializerMethodField()
def get_person(self, instance):
- return instance.person.name
+ return instance.commit_tag.person.name
+
+ def get_tag(self, instance):
+ return instance.commit_tag.tag
+
+ def get_commit(self, instance):
+ return instance.commit_tag.commit
class Meta:
model = TeamTagCredit
- fields = ('tag', 'person', 'commit')
- read_only_fields = fields
+ exclude = ('commit_tag', 'id', 'team')
class TeamTagView(ListAPIView):
lookup_url_kwarg = 'team_id'
serializer_class = TeamTagListSerializer
- queryset = TeamTagCredit.objects.all()
def get_queryset(self):
try:
obj = Team.objects.get(id=int(self.kwargs['team_id']))
except (ValueError, Team.DoesNotExist):
obj = get_object_or_404(Team, name=self.kwargs['team_id'])
- return TeamTagCredit.objects.filter(team=obj).distinct(
- 'person', 'commit', 'tag'
+ return TeamTagCredit.objects.filter(team=obj).select_related(
+ 'commit_tag'
)
diff --git a/linaro_metrics/migrations/0003_auto_20170421_1610.py b/linaro_metrics/migrations/0003_auto_20170517_1611.py
index c9b73cd..51cae09 100644
--- a/linaro_metrics/migrations/0003_auto_20170421_1610.py
+++ b/linaro_metrics/migrations/0003_auto_20170517_1611.py
@@ -13,13 +13,27 @@ class Migration(migrations.Migration):
operations = [
migrations.CreateModel(
- name='TeamTagCredit',
+ name='CommitTagCredit',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('tag', models.CharField(max_length=1024)),
('commit', models.CharField(max_length=1024)),
('person', models.ForeignKey(to='patchwork.Person')),
+ ],
+ ),
+ migrations.CreateModel(
+ name='ProjectTagCredit',
+ fields=[
+ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ ('commit_tag', models.ForeignKey(to='linaro_metrics.CommitTagCredit')),
('project', models.ForeignKey(to='patchwork.Project')),
+ ],
+ ),
+ migrations.CreateModel(
+ name='TeamTagCredit',
+ fields=[
+ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ ('commit_tag', models.ForeignKey(to='linaro_metrics.CommitTagCredit')),
('team', models.ForeignKey(to='linaro_metrics.Team')),
],
),
diff --git a/linaro_metrics/models.py b/linaro_metrics/models.py
index c134bca..e643c7a 100644
--- a/linaro_metrics/models.py
+++ b/linaro_metrics/models.py
@@ -47,15 +47,33 @@ class Team(models.Model):
return self.name
-class TeamTagCredit(models.Model):
+class CommitTagCredit(models.Model):
tag = models.CharField(max_length=1024)
- team = models.ForeignKey(Team)
person = models.ForeignKey(Person)
- project = models.ForeignKey(Project)
commit = models.CharField(max_length=1024)
def __unicode__(self):
- return '%s: %s' % (self.tag, self.commit)
+ return '%s %s: %s' % (self.person, self.tag, self.commit)
+
+
+class ProjectTagCredit(models.Model):
+ commit_tag = models.ForeignKey(CommitTagCredit)
+ project = models.ForeignKey(Project)
+
+ def __unicode__(self):
+ return '%s %s: %s' % (
+ self.project, self.commit_tag.tag, self.commit_tag.commit
+ )
+
+
+class TeamTagCredit(models.Model):
+ commit_tag = models.ForeignKey(CommitTagCredit)
+ team = models.ForeignKey(Team)
+
+ def __unicode__(self):
+ return '%s %s: %s' % (
+ self.team, self.commit_tag.tag, self.commit_tag.commit
+ )
class TeamMembership(models.Model):
diff --git a/linaro_metrics/team_project_credit.py b/linaro_metrics/team_project_credit.py
index e5d2d07..f55d436 100644
--- a/linaro_metrics/team_project_credit.py
+++ b/linaro_metrics/team_project_credit.py
@@ -8,8 +8,10 @@ from django.conf import settings
from linaro_metrics.crowd import Crowd
from linaro_metrics.parsemail import get_linaro_person
from linaro_metrics.models import (
+ CommitTagCredit,
TeamTagCredit,
TeamMembership,
+ ProjectTagCredit,
)
log = logging.getLogger('update_commited_patches')
@@ -27,9 +29,15 @@ def update_commit_callback(crowd, project, repo, commit, dryrun):
log.debug('User %s found with tag %s', p, tag)
if not dryrun:
for m in TeamMembership.objects.filter(user=p.user):
- TeamTagCredit.objects.get_or_create(
- tag=tag, team=m.team, person=p, project=project,
- commit=commit.id)
+ ctc, created = CommitTagCredit.objects.get_or_create(
+ tag=tag, person=p, commit=commit.id
+ )
+ ProjectTagCredit.objects.create(
+ commit_tag=ctc, project=project
+ )
+ TeamTagCredit.objects.create(
+ commit_tag=ctc, team=m.team
+ )
@contextlib.contextmanager