From 5ec6e62b140f3e3d1dfecd523baea719073f6f0d Mon Sep 17 00:00:00 2001 From: Matheus Fernandes Date: Tue, 18 Aug 2015 18:46:51 -0300 Subject: [PATCH] Added Gitlab Groups support to data_api --- colab/plugins/gitlab/data_api.py | 42 +++++++++++++++++++++++++++++++----------- colab/plugins/gitlab/models.py | 18 ++++++++++++++++++ 2 files changed, 49 insertions(+), 11 deletions(-) diff --git a/colab/plugins/gitlab/data_api.py b/colab/plugins/gitlab/data_api.py index 76deb13..d8ab07f 100644 --- a/colab/plugins/gitlab/data_api.py +++ b/colab/plugins/gitlab/data_api.py @@ -9,7 +9,8 @@ from django.conf import settings from django.db.models.fields import DateTimeField from colab.plugins.gitlab.models import (GitlabProject, GitlabMergeRequest, - GitlabComment, GitlabIssue) + GitlabComment, GitlabIssue, + GitlabGroup) from colab.plugins.utils.proxy_data_api import ProxyDataAPI LOGGER = logging.getLogger('colab.plugin.gitlab') @@ -27,6 +28,7 @@ class GitlabDataAPI(ProxyDataAPI): if upstream[-1] == '/': upstream = upstream[:-1] + print u'{}{}?{}'.format(upstream, path, params) return u'{}{}?{}'.format(upstream, path, params) def get_json_data(self, api_url, page, pages=1000): @@ -82,6 +84,24 @@ class GitlabDataAPI(ProxyDataAPI): return projects + def fetch_groups(self): + page = 1 + groups = [] + + while True: + json_data = self.get_json_data('/api/v3/groups', page) + page = page + 1 + + if not len(json_data): + break + + for element in json_data: + group = GitlabGroup() + self.fill_object_data(element, group) + groups.append(group) + + return groups + def fetch_merge_request(self, projects): all_merge_request = [] @@ -182,22 +202,22 @@ class GitlabDataAPI(ProxyDataAPI): def fetch_data(self): LOGGER.info("Importing Projects") projects = self.fetch_projects() - for datum in projects: - datum.save() LOGGER.info("Importing Merge Requests") - merge_request_list = self.fetch_merge_request(projects) - for datum in merge_request_list: - datum.save() + merge_requests = self.fetch_merge_request(projects) LOGGER.info("Importing Issues") - issue_list = self.fetch_issue(projects) - for datum in issue_list: - datum.save() + issues = self.fetch_issue(projects) LOGGER.info("Importing Comments") - comments_list = self.fetch_comments() - for datum in comments_list: + comments = self.fetch_comments() + + LOGGER.info("Importing Groups") + groups = self.fetch_groups() + + save_list = projects + merge_requests + issues + comments + groups + + for datum in save_list: datum.save() @property diff --git a/colab/plugins/gitlab/models.py b/colab/plugins/gitlab/models.py index cbc9b2e..49511a5 100644 --- a/colab/plugins/gitlab/models.py +++ b/colab/plugins/gitlab/models.py @@ -24,6 +24,24 @@ class GitlabProject(models.Model, HitCounterModelMixin): verbose_name_plural = _('Gitlab Projects') +class GitlabGroup(models.Model): + id = models.IntegerField(primary_key=True) + name = models.CharField(max_length=100) + path = models.CharField(max_length=100) + owner_id = models.IntegerField(null=True) + + def __unicode__(self): + return u'{}'.format(self.path) + + @property + def url(self): + return u'/gitlab/groups/{}'.format(self.id) + + class Meta: + verbose_name = _('Gitlab Group') + verbose_name_plural = _('Gitlab Groups') + + class GitlabMergeRequest(Collaboration): id = models.IntegerField(primary_key=True) -- libgit2 0.21.2