Commit 22c3e7454db5238fdb3e4df2bb95a8ab72daa533
Committed by
Sergio Oliveira
1 parent
f59cc898
Exists in
master
and in
39 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 +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') |