diff --git a/colab/proxy/gitlab/data_api.py b/colab/proxy/gitlab/data_api.py index bfc2a1d..adaee8d 100644 --- a/colab/proxy/gitlab/data_api.py +++ b/colab/proxy/gitlab/data_api.py @@ -7,7 +7,7 @@ from dateutil.parser import parse from django.conf import settings from django.db.models.fields import DateTimeField -from colab.proxy.gitlab.models import GitlabProject +from colab.proxy.gitlab.models import GitlabProject, GitlabMergeRequest from colab.proxy.utils.proxy_data_api import ProxyDataAPI @@ -25,14 +25,14 @@ class GitlabDataAPI(ProxyDataAPI): return u'{}{}?{}'.format(upstream, path, params) - def fetchProjects(self): + def fetch_projects(self): page = 1 projects = [] # Iterates throughout all projects pages while(True): url = self.get_request_url('/api/v3/projects/all', - per_page=100, + per_page=1000, page=page) data = urllib2.urlopen(url) json_data = json.load(data) @@ -57,11 +57,60 @@ class GitlabDataAPI(ProxyDataAPI): return projects + def fetch_merge_request(self, projects): + page = 1 + all_merge_request = [] + + # Iterate under all projects + for project in projects: + # Iterate under all MR inside project + while(True): + merge_request_url = \ + '/api/v3/projects/{}/merge_requests'.format(project.id) + url = self.get_request_url(merge_request_url, + per_page=1000, + page=page) + + data = urllib2.urlopen(url) + json_data_mr = json.load(data) + + if len(json_data_mr) == 0: + break + + page = page + 1 + for element in json_data_mr: + single_merge_request = GitlabMergeRequest() + + for field in GitlabMergeRequest._meta.fields: + if field.name == "user": + single_merge_request.update_user( + element["author"]["username"]) + continue + if field.name == "project": + single_merge_request.project_id = \ + element["project_id"] + continue + + if isinstance(field, DateTimeField): + value = parse(element[field.name]) + else: + value = element[field.name] + + setattr(single_merge_request, field.name, value) + + all_merge_request.append(single_merge_request) + + return all_merge_request + def fetch_data(self): - data = self.fetchProjects() + data = self.fetch_projects() + merge_request_list = self.fetch_merge_request(data) for datum in data: datum.save() + for datum in merge_request_list: + print datum.__dict__ + datum.save() @property def app_label(self): diff --git a/colab/proxy/gitlab/models.py b/colab/proxy/gitlab/models.py index 4daa563..1c8e1c7 100644 --- a/colab/proxy/gitlab/models.py +++ b/colab/proxy/gitlab/models.py @@ -1,5 +1,6 @@ from django.db import models from django.utils.translation import ugettext_lazy as _ +from colab.proxy.utils.models import Collaboration class GitlabProject(models.Model): @@ -15,3 +16,47 @@ class GitlabProject(models.Model): class Meta: verbose_name = _('Gitlab Project') verbose_name_plural = _('Gitlab Projects') + + +class GitlabMergeRequest(Collaboration): + + id = models.IntegerField(primary_key=True) + target_branch = models.TextField() + source_branch = models.TextField() + project = models.ForeignKey(GitlabProject, null=True, + on_delete=models.SET_NULL) + description = models.TextField() + title = models.TextField() + state = models.TextField() + + class Meta: + verbose_name = _('Gitlab Merge Request') + verbose_name_plural = _('Gitlab Merge Requests') + + +class GitlabIssue(Collaboration): + + id = models.IntegerField(primary_key=True) + project_id = models.ForeignKey(GitlabProject, null=True, + on_delete=models.SET_NULL) + title = models.TextField() + description = models.TextField() + + state = models.TextField() + + class Meta: + verbose_name = _('Gitlab Collaboration') + verbose_name_plural = _('Gitlab Collaborations') + + +class GitlabComment(Collaboration): + + id = models.IntegerField(primary_key=True) + body = models.TextField() + author_email = models.EmailField(null=True, blank=True) + author_name = models.TextField() + created_at = models.DateTimeField(blank=True) + + class Meta: + verbose_name = _('Gitlab Comments') + verbose_name_plural = _('Gitlab Comments') -- libgit2 0.21.2