diff --git a/colab/proxy/gitlab/data_api.py b/colab/proxy/gitlab/data_api.py index 2c81b7e..38b6b9a 100644 --- a/colab/proxy/gitlab/data_api.py +++ b/colab/proxy/gitlab/data_api.py @@ -59,7 +59,6 @@ class GitlabDataAPI(ProxyDataAPI): def fetch_merge_request(self, projects): all_merge_request = [] - # Iterate under all projects for project in projects: page = 1 @@ -92,7 +91,7 @@ class GitlabDataAPI(ProxyDataAPI): continue if isinstance(field, DateTimeField): - value = parse(element[field.name]) + value = parse(element["created_at"]) else: value = element[field.name] @@ -135,7 +134,7 @@ class GitlabDataAPI(ProxyDataAPI): continue if isinstance(field, DateTimeField): - value = parse(element[field.name]) + value = parse(element["created_at"]) else: value = element[field.name] @@ -184,9 +183,19 @@ class GitlabDataAPI(ProxyDataAPI): single_comment.update_user( element["author"]["username"]) continue + if field.name == "project": + single_comment.project = \ + merge_request.project + continue + if field.name == "issue_comment": + single_comment.issue_comment = False + continue + if field.name == "parent_id": + single_comment.parent_id = merge_request.id + continue if isinstance(field, DateTimeField): - value = parse(element[field.name]) + value = parse(element["created_at"]) else: value = element[field.name] @@ -227,9 +236,19 @@ class GitlabDataAPI(ProxyDataAPI): single_comment.update_user( element["author"]["username"]) continue + if field.name == "project": + single_comment.project = \ + issue.project + continue + if field.name == "issue_comment": + single_comment.issue_comment = True + continue + if field.name == "parent_id": + single_comment.parent_id = issue.id + continue if isinstance(field, DateTimeField): - value = parse(element[field.name]) + value = parse(element["created_at"]) else: value = element[field.name] @@ -240,18 +259,22 @@ class GitlabDataAPI(ProxyDataAPI): return all_comments def fetch_data(self): + print "projects" projects = self.fetch_projects() for datum in projects: datum.save() -# merge_request_list = self.fetch_merge_request(projects) -# for datum in merge_request_list: -# datum.save() + print "MR" + merge_request_list = self.fetch_merge_request(projects) + for datum in merge_request_list: + datum.save() + print "issues" issue_list = self.fetch_issue(projects) for datum in issue_list: datum.save() + print "comments" comments_list = self.fetch_comments() for datum in comments_list: datum.save() diff --git a/colab/proxy/gitlab/models.py b/colab/proxy/gitlab/models.py index 162d0c9..36b43de 100644 --- a/colab/proxy/gitlab/models.py +++ b/colab/proxy/gitlab/models.py @@ -1,9 +1,11 @@ from django.db import models from django.utils.translation import ugettext_lazy as _ from colab.proxy.utils.models import Collaboration +from hitcounter.models import HitCounterModelMixin +import datetime -class GitlabProject(models.Model): +class GitlabProject(models.Model, HitCounterModelMixin): id = models.IntegerField(primary_key=True) description = models.TextField() @@ -12,6 +14,11 @@ class GitlabProject(models.Model): name_with_namespace = models.TextField() created_at = models.DateTimeField(blank=True) last_activity_at = models.DateTimeField(blank=True) + path_with_namespace = models.TextField(blank=True, null=True) + + @property + def url(self): + return u'/gitlab/{}'.format(self.path_with_namespace) class Meta: verbose_name = _('Gitlab Project') @@ -28,6 +35,21 @@ class GitlabMergeRequest(Collaboration): description = models.TextField() title = models.TextField() state = models.TextField() + modified = models.DateTimeField(blank=True, null=True) + + @property + def tag(self): + return self.state + + type = u'merge_request' + icon_name = u'file' + + @property + def url(self): + return u'/gitlab/{}/merge_requests/{}'.format(self.project.path_with_namespace, self.id) + + def get_author(self): + return user class Meta: verbose_name = _('Gitlab Merge Request') @@ -43,10 +65,19 @@ class GitlabIssue(Collaboration): description = models.TextField() state = models.TextField() + modified = models.DateTimeField(blank=True, null=True) + + icon_name = u'align-right' + type = u'gitlab_issue' + + @property + def url(self): + return u'/gitlab/{}/issues/{}'.format(self.project.path_with_namespace, self.id) + class Meta: - verbose_name = _('Gitlab Collaboration') - verbose_name_plural = _('Gitlab Collaborations') + verbose_name = _('Gitlab Issue') + verbose_name_plural = _('Gitlab Issues') class GitlabComment(Collaboration): @@ -54,6 +85,48 @@ class GitlabComment(Collaboration): id = models.IntegerField(primary_key=True) body = models.TextField() created_at = models.DateTimeField(blank=True) + modified = models.DateTimeField(blank=True, null=True) + issue_comment = models.BooleanField(default=True) + + project = models.ForeignKey(GitlabProject, null=True, + on_delete=models.SET_NULL) + + parent_id = models.IntegerField(null=True) + type = u'comment' + + @property + def title(self): + if self.issue_comment: + issue = GitlabIssue.objects.get(id=self.parent_id) + return issue.title + else: + merge_request = GitlabMergeRequest.objects.get(id=self.parent_id) + return merge_request.title + + icon_name = u'align-right' + + @property + def description(self): + return self.body + + @property + def tag(self): + if self.issue_comment: + issue = GitlabIssue.objects.get(id=self.parent_id) + return issue.state + else: + merge_request = GitlabMergeRequest.objects.get(id=self.parent_id) + return merge_request.state + + @property + def url(self): + if self.issue_comment: + return u'/gitlab/{}/issues/{}#notes_{}'.format( + self.project.path_with_namespace, self.parent_id, self.id) + else: + return u'/gitlab/{}/merge_requests/{}#notes_{}'.format( + self.project.path_with_namespace, self.parent_id, self.id) + class Meta: verbose_name = _('Gitlab Comments') -- libgit2 0.21.2