diff options
author | Ben Copeland <ben.copeland@linaro.org> | 2017-05-19 16:59:22 +0100 |
---|---|---|
committer | Ben Copeland <ben.copeland@linaro.org> | 2017-05-22 14:12:17 +0100 |
commit | 0f56e149b23b80ad1ec71c185d32b73f1b2d73d4 (patch) | |
tree | de970c6e18d965af359c76ded43246aea1eb56c1 /linaro_metrics | |
parent | 90d29193ea47b4aaa5dc9a612e8b48b396291e6e (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.py | 8 | ||||
-rw-r--r-- | linaro_metrics/api.py | 19 | ||||
-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.py | 26 | ||||
-rw-r--r-- | linaro_metrics/team_project_credit.py | 14 |
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 |