Commit 22c3e7454db5238fdb3e4df2bb95a8ab72daa533

Authored by Gust
Committed by Sergio Oliveira
1 parent f59cc898

Add GitlabMergeRequest model

Signed-off-by: Gustavo Jaruga <darksshades@gmail.com>
Signed-off-by: Siqueira de Melo <rodrigosiqueiramelo@gmail.com>
colab/proxy/gitlab/data_api.py
@@ -7,7 +7,7 @@ from dateutil.parser import parse @@ -7,7 +7,7 @@ from dateutil.parser import parse
7 from django.conf import settings 7 from django.conf import settings
8 from django.db.models.fields import DateTimeField 8 from django.db.models.fields import DateTimeField
9 9
10 -from colab.proxy.gitlab.models import GitlabProject 10 +from colab.proxy.gitlab.models import GitlabProject, GitlabMergeRequest
11 from colab.proxy.utils.proxy_data_api import ProxyDataAPI 11 from colab.proxy.utils.proxy_data_api import ProxyDataAPI
12 12
13 13
@@ -25,14 +25,14 @@ class GitlabDataAPI(ProxyDataAPI): @@ -25,14 +25,14 @@ class GitlabDataAPI(ProxyDataAPI):
25 25
26 return u'{}{}?{}'.format(upstream, path, params) 26 return u'{}{}?{}'.format(upstream, path, params)
27 27
28 - def fetchProjects(self): 28 + def fetch_projects(self):
29 page = 1 29 page = 1
30 projects = [] 30 projects = []
31 31
32 # Iterates throughout all projects pages 32 # Iterates throughout all projects pages
33 while(True): 33 while(True):
34 url = self.get_request_url('/api/v3/projects/all', 34 url = self.get_request_url('/api/v3/projects/all',
35 - per_page=100, 35 + per_page=1000,
36 page=page) 36 page=page)
37 data = urllib2.urlopen(url) 37 data = urllib2.urlopen(url)
38 json_data = json.load(data) 38 json_data = json.load(data)
@@ -57,11 +57,60 @@ class GitlabDataAPI(ProxyDataAPI): @@ -57,11 +57,60 @@ class GitlabDataAPI(ProxyDataAPI):
57 57
58 return projects 58 return projects
59 59
  60 + def fetch_merge_request(self, projects):
  61 + page = 1
  62 + all_merge_request = []
  63 +
  64 + # Iterate under all projects
  65 + for project in projects:
  66 + # Iterate under all MR inside project
  67 + while(True):
  68 + merge_request_url = \
  69 + '/api/v3/projects/{}/merge_requests'.format(project.id)
  70 + url = self.get_request_url(merge_request_url,
  71 + per_page=1000,
  72 + page=page)
  73 +
  74 + data = urllib2.urlopen(url)
  75 + json_data_mr = json.load(data)
  76 +
  77 + if len(json_data_mr) == 0:
  78 + break
  79 +
  80 + page = page + 1
  81 + for element in json_data_mr:
  82 + single_merge_request = GitlabMergeRequest()
  83 +
  84 + for field in GitlabMergeRequest._meta.fields:
  85 + if field.name == "user":
  86 + single_merge_request.update_user(
  87 + element["author"]["username"])
  88 + continue
  89 + if field.name == "project":
  90 + single_merge_request.project_id = \
  91 + element["project_id"]
  92 + continue
  93 +
  94 + if isinstance(field, DateTimeField):
  95 + value = parse(element[field.name])
  96 + else:
  97 + value = element[field.name]
  98 +
  99 + setattr(single_merge_request, field.name, value)
  100 +
  101 + all_merge_request.append(single_merge_request)
  102 +
  103 + return all_merge_request
  104 +
60 def fetch_data(self): 105 def fetch_data(self):
61 - data = self.fetchProjects() 106 + data = self.fetch_projects()
  107 + merge_request_list = self.fetch_merge_request(data)
62 108
63 for datum in data: 109 for datum in data:
64 datum.save() 110 datum.save()
  111 + for datum in merge_request_list:
  112 + print datum.__dict__
  113 + datum.save()
65 114
66 @property 115 @property
67 def app_label(self): 116 def app_label(self):
colab/proxy/gitlab/models.py
1 from django.db import models 1 from django.db import models
2 from django.utils.translation import ugettext_lazy as _ 2 from django.utils.translation import ugettext_lazy as _
  3 +from colab.proxy.utils.models import Collaboration
3 4
4 5
5 class GitlabProject(models.Model): 6 class GitlabProject(models.Model):
@@ -15,3 +16,47 @@ class GitlabProject(models.Model): @@ -15,3 +16,47 @@ class GitlabProject(models.Model):
15 class Meta: 16 class Meta:
16 verbose_name = _('Gitlab Project') 17 verbose_name = _('Gitlab Project')
17 verbose_name_plural = _('Gitlab Projects') 18 verbose_name_plural = _('Gitlab Projects')
  19 +
  20 +
  21 +class GitlabMergeRequest(Collaboration):
  22 +
  23 + id = models.IntegerField(primary_key=True)
  24 + target_branch = models.TextField()
  25 + source_branch = models.TextField()
  26 + project = models.ForeignKey(GitlabProject, null=True,
  27 + on_delete=models.SET_NULL)
  28 + description = models.TextField()
  29 + title = models.TextField()
  30 + state = models.TextField()
  31 +
  32 + class Meta:
  33 + verbose_name = _('Gitlab Merge Request')
  34 + verbose_name_plural = _('Gitlab Merge Requests')
  35 +
  36 +
  37 +class GitlabIssue(Collaboration):
  38 +
  39 + id = models.IntegerField(primary_key=True)
  40 + project_id = models.ForeignKey(GitlabProject, null=True,
  41 + on_delete=models.SET_NULL)
  42 + title = models.TextField()
  43 + description = models.TextField()
  44 +
  45 + state = models.TextField()
  46 +
  47 + class Meta:
  48 + verbose_name = _('Gitlab Collaboration')
  49 + verbose_name_plural = _('Gitlab Collaborations')
  50 +
  51 +
  52 +class GitlabComment(Collaboration):
  53 +
  54 + id = models.IntegerField(primary_key=True)
  55 + body = models.TextField()
  56 + author_email = models.EmailField(null=True, blank=True)
  57 + author_name = models.TextField()
  58 + created_at = models.DateTimeField(blank=True)
  59 +
  60 + class Meta:
  61 + verbose_name = _('Gitlab Comments')
  62 + verbose_name_plural = _('Gitlab Comments')