Commit 6dffc007011e8de85b4540260ba9441cca42962b
Committed by
Sergio Oliveira
1 parent
7feb4c10
Exists in
master
and in
39 other branches
Add fetch comment
Showing
2 changed files
with
156 additions
and
54 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, GitlabMergeRequest | 10 | +from colab.proxy.gitlab.models import GitlabProject, GitlabMergeRequest, GitlabComment, GitlabIssue |
11 | from colab.proxy.utils.proxy_data_api import ProxyDataAPI | 11 | from colab.proxy.utils.proxy_data_api import ProxyDataAPI |
12 | 12 | ||
13 | 13 | ||
@@ -57,57 +57,57 @@ class GitlabDataAPI(ProxyDataAPI): | @@ -57,57 +57,57 @@ 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 | 60 | + def fetch_merge_request(self, projects): |
61 | + all_merge_request = [] | ||
62 | + | ||
63 | + # Iterate under all projects | ||
64 | + for project in projects: | ||
65 | + page = 1 | ||
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 | 104 | ||
105 | def fetch_issue(self, projects): | 105 | def fetch_issue(self, projects): |
106 | - page = 1 | ||
107 | all_issues = [] | 106 | all_issues = [] |
108 | 107 | ||
109 | # Iterate under all projects | 108 | # Iterate under all projects |
110 | for project in projects: | 109 | for project in projects: |
110 | + page = 1 | ||
111 | # Iterate under all Issues inside project | 111 | # Iterate under all Issues inside project |
112 | while(True): | 112 | while(True): |
113 | issue_url = \ | 113 | issue_url = \ |
@@ -129,6 +129,10 @@ class GitlabDataAPI(ProxyDataAPI): | @@ -129,6 +129,10 @@ class GitlabDataAPI(ProxyDataAPI): | ||
129 | if field.name == "project": | 129 | if field.name == "project": |
130 | single_issue.project_id = element["project_id"] | 130 | single_issue.project_id = element["project_id"] |
131 | continue | 131 | continue |
132 | + if field.name == "user": | ||
133 | + single_issue.update_user( | ||
134 | + element["author"]["username"]) | ||
135 | + continue | ||
132 | 136 | ||
133 | if isinstance(field, DateTimeField): | 137 | if isinstance(field, DateTimeField): |
134 | value = parse(element[field.name]) | 138 | value = parse(element[field.name]) |
@@ -139,20 +143,120 @@ class GitlabDataAPI(ProxyDataAPI): | @@ -139,20 +143,120 @@ class GitlabDataAPI(ProxyDataAPI): | ||
139 | 143 | ||
140 | all_issues.append(single_issue) | 144 | all_issues.append(single_issue) |
141 | 145 | ||
142 | - return all_issues | 146 | + return all_issues |
143 | 147 | ||
144 | - def fetch_data(self): | ||
145 | - data = self.fetch_projects() | ||
146 | - #merge_request_list = self.fetch_merge_request(data) | ||
147 | - issue_list = self.fetch_issue(data) | 148 | + def fetch_comments(self): |
149 | + all_comments = [] | ||
150 | + | ||
151 | + all_comments.extend(self.fetch_comments_MR()) | ||
152 | + all_comments.extend(self.fetch_comments_issues()) | ||
153 | + | ||
154 | + return all_comments | ||
155 | + | ||
156 | + def fetch_comments_MR(self): | ||
157 | + all_comments = [] | ||
158 | + all_merge_requests = GitlabMergeRequest.objects.all() | ||
159 | + | ||
160 | + for merge_request in all_merge_requests: | ||
161 | + page = 1 | ||
162 | + # Iterate under all comments of MR inside project | ||
163 | + while(True): | ||
164 | + merge_request_url = \ | ||
165 | + '/api/v3/projects/{}/merge_requests/{}/notes' \ | ||
166 | + .format(merge_request.project_id, merge_request.id) | ||
167 | + url = self.get_request_url(merge_request_url, | ||
168 | + per_page=1000, | ||
169 | + page=page) | ||
170 | + | ||
171 | + data = urllib2.urlopen(url) | ||
172 | + json_data_mr = json.load(data) | ||
173 | + | ||
174 | + if len(json_data_mr) == 0: | ||
175 | + break | ||
176 | + | ||
177 | + page = page + 1 | ||
148 | 178 | ||
149 | - for datum in data: | 179 | + for element in json_data_mr: |
180 | + single_comment = GitlabComment() | ||
181 | + | ||
182 | + for field in GitlabComment._meta.fields: | ||
183 | + if field.name == "user": | ||
184 | + single_comment.update_user( | ||
185 | + element["author"]["username"]) | ||
186 | + continue | ||
187 | + | ||
188 | + if isinstance(field, DateTimeField): | ||
189 | + value = parse(element[field.name]) | ||
190 | + else: | ||
191 | + value = element[field.name] | ||
192 | + | ||
193 | + setattr(single_comment, field.name, value) | ||
194 | + | ||
195 | + all_comments.append(single_comment) | ||
196 | + | ||
197 | + return all_comments | ||
198 | + | ||
199 | + | ||
200 | + def fetch_comments_issues(self): | ||
201 | + all_comments = [] | ||
202 | + all_issues = GitlabIssue.objects.all() | ||
203 | + | ||
204 | + for issue in all_issues: | ||
205 | + page = 1 | ||
206 | + # Iterate under all comments of MR inside project | ||
207 | + while(True): | ||
208 | + issue_comments_request_url = \ | ||
209 | + '/api/v3/projects/{}/issues/{}/notes' \ | ||
210 | + .format(issue.project_id, issue.id) | ||
211 | + url = self.get_request_url(issue_comments_request_url, | ||
212 | + per_page=1000, | ||
213 | + page=page) | ||
214 | + | ||
215 | + data = urllib2.urlopen(url) | ||
216 | + json_data_mr = json.load(data) | ||
217 | + | ||
218 | + if len(json_data_mr) == 0: | ||
219 | + break | ||
220 | + | ||
221 | + page = page + 1 | ||
222 | + for element in json_data_mr: | ||
223 | + single_comment = GitlabComment() | ||
224 | + | ||
225 | + for field in GitlabComment._meta.fields: | ||
226 | + if field.name == "user": | ||
227 | + single_comment.update_user( | ||
228 | + element["author"]["username"]) | ||
229 | + continue | ||
230 | + | ||
231 | + if isinstance(field, DateTimeField): | ||
232 | + value = parse(element[field.name]) | ||
233 | + else: | ||
234 | + value = element[field.name] | ||
235 | + | ||
236 | + setattr(single_comment, field.name, value) | ||
237 | + | ||
238 | + all_comments.append(single_comment) | ||
239 | + | ||
240 | + return all_comments | ||
241 | + | ||
242 | + def fetch_data(self): | ||
243 | + projects = self.fetch_projects() | ||
244 | + for datum in projects: | ||
150 | datum.save() | 245 | datum.save() |
246 | + | ||
247 | +# merge_request_list = self.fetch_merge_request(projects) | ||
151 | # for datum in merge_request_list: | 248 | # for datum in merge_request_list: |
152 | # datum.save() | 249 | # datum.save() |
250 | + | ||
251 | + issue_list = self.fetch_issue(projects) | ||
153 | for datum in issue_list: | 252 | for datum in issue_list: |
154 | datum.save() | 253 | datum.save() |
155 | 254 | ||
255 | + comments_list = self.fetch_comments() | ||
256 | + for datum in comments_list: | ||
257 | + datum.save() | ||
258 | + | ||
259 | + | ||
156 | @property | 260 | @property |
157 | def app_label(self): | 261 | def app_label(self): |
158 | return 'gitlab' | 262 | return 'gitlab' |
colab/proxy/gitlab/models.py
@@ -53,8 +53,6 @@ class GitlabComment(Collaboration): | @@ -53,8 +53,6 @@ class GitlabComment(Collaboration): | ||
53 | 53 | ||
54 | id = models.IntegerField(primary_key=True) | 54 | id = models.IntegerField(primary_key=True) |
55 | body = models.TextField() | 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) | 56 | created_at = models.DateTimeField(blank=True) |
59 | 57 | ||
60 | class Meta: | 58 | class Meta: |