Commit 22c3e7454db5238fdb3e4df2bb95a8ab72daa533
Committed by
Sergio Oliveira
1 parent
f59cc898
Exists in
master
and in
11 other branches
Add GitlabMergeRequest model
Signed-off-by: Gustavo Jaruga <darksshades@gmail.com> Signed-off-by: Siqueira de Melo <rodrigosiqueiramelo@gmail.com>
Showing
2 changed files
with
98 additions
and
4 deletions
Show diff stats
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') | ... | ... |