Commit 5ec6e62b140f3e3d1dfecd523baea719073f6f0d

Authored by Matheus Fernandes
1 parent 7b82e8f3

Added Gitlab Groups support to data_api

Signed-off-by: Matheus Fernandes <matheus.souza.fernandes@gmail.com>
Signed-off-by: Lucas Moura <lucas.moura128@gmail.com>
colab/plugins/gitlab/data_api.py
@@ -9,7 +9,8 @@ from django.conf import settings @@ -9,7 +9,8 @@ from django.conf import settings
9 from django.db.models.fields import DateTimeField 9 from django.db.models.fields import DateTimeField
10 10
11 from colab.plugins.gitlab.models import (GitlabProject, GitlabMergeRequest, 11 from colab.plugins.gitlab.models import (GitlabProject, GitlabMergeRequest,
12 - GitlabComment, GitlabIssue) 12 + GitlabComment, GitlabIssue,
  13 + GitlabGroup)
13 from colab.plugins.utils.proxy_data_api import ProxyDataAPI 14 from colab.plugins.utils.proxy_data_api import ProxyDataAPI
14 15
15 LOGGER = logging.getLogger('colab.plugin.gitlab') 16 LOGGER = logging.getLogger('colab.plugin.gitlab')
@@ -27,6 +28,7 @@ class GitlabDataAPI(ProxyDataAPI): @@ -27,6 +28,7 @@ class GitlabDataAPI(ProxyDataAPI):
27 if upstream[-1] == '/': 28 if upstream[-1] == '/':
28 upstream = upstream[:-1] 29 upstream = upstream[:-1]
29 30
  31 + print u'{}{}?{}'.format(upstream, path, params)
30 return u'{}{}?{}'.format(upstream, path, params) 32 return u'{}{}?{}'.format(upstream, path, params)
31 33
32 def get_json_data(self, api_url, page, pages=1000): 34 def get_json_data(self, api_url, page, pages=1000):
@@ -82,6 +84,24 @@ class GitlabDataAPI(ProxyDataAPI): @@ -82,6 +84,24 @@ class GitlabDataAPI(ProxyDataAPI):
82 84
83 return projects 85 return projects
84 86
  87 + def fetch_groups(self):
  88 + page = 1
  89 + groups = []
  90 +
  91 + while True:
  92 + json_data = self.get_json_data('/api/v3/groups', page)
  93 + page = page + 1
  94 +
  95 + if not len(json_data):
  96 + break
  97 +
  98 + for element in json_data:
  99 + group = GitlabGroup()
  100 + self.fill_object_data(element, group)
  101 + groups.append(group)
  102 +
  103 + return groups
  104 +
85 def fetch_merge_request(self, projects): 105 def fetch_merge_request(self, projects):
86 all_merge_request = [] 106 all_merge_request = []
87 107
@@ -182,22 +202,22 @@ class GitlabDataAPI(ProxyDataAPI): @@ -182,22 +202,22 @@ class GitlabDataAPI(ProxyDataAPI):
182 def fetch_data(self): 202 def fetch_data(self):
183 LOGGER.info("Importing Projects") 203 LOGGER.info("Importing Projects")
184 projects = self.fetch_projects() 204 projects = self.fetch_projects()
185 - for datum in projects:  
186 - datum.save()  
187 205
188 LOGGER.info("Importing Merge Requests") 206 LOGGER.info("Importing Merge Requests")
189 - merge_request_list = self.fetch_merge_request(projects)  
190 - for datum in merge_request_list:  
191 - datum.save() 207 + merge_requests = self.fetch_merge_request(projects)
192 208
193 LOGGER.info("Importing Issues") 209 LOGGER.info("Importing Issues")
194 - issue_list = self.fetch_issue(projects)  
195 - for datum in issue_list:  
196 - datum.save() 210 + issues = self.fetch_issue(projects)
197 211
198 LOGGER.info("Importing Comments") 212 LOGGER.info("Importing Comments")
199 - comments_list = self.fetch_comments()  
200 - for datum in comments_list: 213 + comments = self.fetch_comments()
  214 +
  215 + LOGGER.info("Importing Groups")
  216 + groups = self.fetch_groups()
  217 +
  218 + save_list = projects + merge_requests + issues + comments + groups
  219 +
  220 + for datum in save_list:
201 datum.save() 221 datum.save()
202 222
203 @property 223 @property
colab/plugins/gitlab/models.py
@@ -24,6 +24,24 @@ class GitlabProject(models.Model, HitCounterModelMixin): @@ -24,6 +24,24 @@ class GitlabProject(models.Model, HitCounterModelMixin):
24 verbose_name_plural = _('Gitlab Projects') 24 verbose_name_plural = _('Gitlab Projects')
25 25
26 26
  27 +class GitlabGroup(models.Model):
  28 + id = models.IntegerField(primary_key=True)
  29 + name = models.CharField(max_length=100)
  30 + path = models.CharField(max_length=100)
  31 + owner_id = models.IntegerField(null=True)
  32 +
  33 + def __unicode__(self):
  34 + return u'{}'.format(self.path)
  35 +
  36 + @property
  37 + def url(self):
  38 + return u'/gitlab/groups/{}'.format(self.id)
  39 +
  40 + class Meta:
  41 + verbose_name = _('Gitlab Group')
  42 + verbose_name_plural = _('Gitlab Groups')
  43 +
  44 +
27 class GitlabMergeRequest(Collaboration): 45 class GitlabMergeRequest(Collaboration):
28 46
29 id = models.IntegerField(primary_key=True) 47 id = models.IntegerField(primary_key=True)