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 from django.conf import settings
8 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 11 from colab.proxy.utils.proxy_data_api import ProxyDataAPI
12 12  
13 13  
... ... @@ -25,14 +25,14 @@ class GitlabDataAPI(ProxyDataAPI):
25 25  
26 26 return u'{}{}?{}'.format(upstream, path, params)
27 27  
28   - def fetchProjects(self):
  28 + def fetch_projects(self):
29 29 page = 1
30 30 projects = []
31 31  
32 32 # Iterates throughout all projects pages
33 33 while(True):
34 34 url = self.get_request_url('/api/v3/projects/all',
35   - per_page=100,
  35 + per_page=1000,
36 36 page=page)
37 37 data = urllib2.urlopen(url)
38 38 json_data = json.load(data)
... ... @@ -57,11 +57,60 @@ class GitlabDataAPI(ProxyDataAPI):
57 57  
58 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 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 109 for datum in data:
64 110 datum.save()
  111 + for datum in merge_request_list:
  112 + print datum.__dict__
  113 + datum.save()
65 114  
66 115 @property
67 116 def app_label(self):
... ...
colab/proxy/gitlab/models.py
1 1 from django.db import models
2 2 from django.utils.translation import ugettext_lazy as _
  3 +from colab.proxy.utils.models import Collaboration
3 4  
4 5  
5 6 class GitlabProject(models.Model):
... ... @@ -15,3 +16,47 @@ class GitlabProject(models.Model):
15 16 class Meta:
16 17 verbose_name = _('Gitlab Project')
17 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')
... ...